Author Topic: Диалоговое окно с кнопками OK, Да, Нет...  (Read 6866 times)

0 Members and 1 Guest are viewing this topic.

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Прочитав тему про переход на AutoIt, захотелось выложить пример совместного использования.
Как-то прочитав в контакте...
http://www.youtube.com/watch?v=ijoPWdnJbvQ&feature=youtu.be
... прочитав вконтакте вопрос о выводе простого диалогового окна с кнопками Да/Нет и дальнейшей обработкой результата, тоже подумал, что хорошо бы иметь такую возможность в кликере.
 Действительно, то что я использовал до этого функцию INPUTBOX было очень неудобно. Помимо того, что окно не выводилось поверх других приложений по умолчанию, так и вводить Да-нет или 1-0 было крайне неудобно, нужно прицелиться мышкой, выделить значение по умолчанию, ввести своё... Нет, для ввода данных это нормально. Для привычного диалога в системе нет.
Так вот не дожидаясь расширения функционала, быстренько состряпал в AutoIt заготовку буквально из 5 строк (благо там работа со всякими окнами поставлена широко). Скомпилировал в экзешник. И решил вызывать его с передачей необходимых параметров. Всё получилось, параметры я передал, осталось получить реакцию. Полез в справку кликера, т.к. помнил что читал про возврат параметров в $_return1.
Тут я жестоко обломался. Возврат параметров подразумевался только при вызове плагинов сделанных в dll. Так как я в написании и создании dll не в зуб ногой, вспомнив в очередной раз про текстовые файлы, решил передавать параметры обратно через ini файл (и туда заодно, для однородности).
Перекомпилив заготовку AutoIt на новый лад, всё прекрасно срослось.
Оформлено в виде 2 подпрограмм.
SUB(Window) - настраиваемое окно
SUB(Window_yes-no) - упрощённый вариант, запрос на перезапись файла.
Все передаваемые значения и возвращаемые результаты в комментариях.
Code: (clickermann) [Select]

#name "Window & Window_yes-no"
// Author: Vint
// Version: 1.0 (10.09.2013)


//==============================================================================
SUB(Window) //==========  Окно универсальное ===================================
   
   // $window_flag = 0 // Режим окна (сколько и какие кнопки)
   // $window_title = "Сообщение" // Заголовок окна
   // $window_text = "Перезаписать файл?" // текст в окне
   // $window_timeout = 5 // время оказа окна, "0"- без лимита
   // GOSUB(Window) // вызываем настраиваемое окно
   
   
   DEFINE($window_title, "Сообщение")
   DEFINE($window_text, "Текст")
   
   INIWRITE("Window.ini","flag",$window_flag, "Window")
   WAITMS(50)
   INIWRITE("Window.ini","title",$window_title, "Window")
   WAITMS(50)
   INIWRITE("Window.ini","text",$window_text, "Window")
   WAITMS(50)
   INIWRITE("Window.ini","timeout",$window_timeout, "Window")
   WAITMS(50)
   INIWRITE("Window.ini","return","0", "Window")
   WAITMS(100)
   
   EXECUTE("Window_ini.exe","Window")
   WAIT(1)
   WHILE(INT(INIREAD("Window.ini", "return", "Window")) = 0) // ожидание
      WAITMS(100)
   END_CYC
   
   $return = INT(INIREAD("Window.ini", "return", "Window"))
   IF($return = -1)
      LOGWRITE ("Кнопка не нажата, время вышло")
   ELSE
      LOGWRITE ("Нажата кнопка с кодом: ",$return)
   END_IF
   
   // Возвращаемые значения:
   // Время вышло $return = -1
   // OK $return = 1
   // Отмена (CANCEL) $return = 2
   // Прервать (ABORT) $return = 3
   // Повтор (RETRY) $return = 4
   // Пропустить (IGNORE) $return = 5
   // Да (YES) $return = 6
   // Нет (NO) $return = 7
   // Повторить (TRY AGAIN) $return = 10
   // Продолжить (CONTINUE) $return = 11
   
   
   //Параметр flag может быть комбинацией следующих значений:
   
   //десятичное значение Отображаемые кнопки 0x
   // 0 Кнопка OK 0x0
   // 1 Кнопки OK и Отмена 0x1
   // 2 Кнопки Прервать, Повтор и Пропустить 0x2
   // 3 Кнопки Да, Нет и Отмена 0x3
   // 4 Кнопки Да и Нет 0x4
   // 5 Кнопки Повтор и Отмена 0x5
   // 6 Кнопки Отмена, Повторить, Продолжить 0x6
   
   //десятичное значение Отображаемая иконка 0x
   // 0 (Нет) 0x0
   // 16 Иконка "стоп" 0x10
   // 32 Иконка "знак вопроса" 0x20
   // 48 Иконка "предупреждение" 0x30
   // 64 Иконка "информация", с 'i' в кружке 0x40
   
   //десятичное значение Выделенная кнопка по умолчанию 0x
   // 0 Первая кнопка 0x0
   // 256 Вторая кнопка 0x100
   // 512 Третья кнопка 0x200
   
   //десятичное значение Модальность 0x
   // 0 Приложение (Application) 0x0
   // 4096 Системная, поверх всех окон 0x1000
   // 8192 Блокирует родительское окно 0x2000
   
   // десятичное значение Другое 0x
   // 262144 имеет атрибут "поверх всех окон" 0x40000
   // 524288 Заголовок и текст выравниваются по правому краю 0x80000
   
END_SUB

//==============================================================================
SUB(Window_yes-no) //==========  Окно Да/нет ===================================
   
   // $window_title = "Сообщение" // Заголовок окна
   // $window_text = "Перезаписать файл?" // текст в окне
   // $window_timeout = 5 // время показа окна, "0"- без лимита
   // GOSUB(Window_yes-no) // вызываем окно Да/Нет
   
   DEFINE($window_title, "Сообщение")
   DEFINE($window_text, "Перезаписать файл?")
   DEFINE($window_timeout, 5)
   
   INIWRITE("Window.ini","flag","266532", "Windowyesno")
   WAITMS(50)
   INIWRITE("Window.ini","title",$window_title, "Windowyesno")
   WAITMS(50)
   INIWRITE("Window.ini","text",$window_text, "Windowyesno")
   WAITMS(50)
   INIWRITE("Window.ini","timeout",$window_timeout, "Windowyesno")
   WAITMS(50)
   INIWRITE("Window.ini","return","0", "Windowyesno")
   WAITMS(100)
   
   EXECUTE("Window_ini.exe","Windowyesno")
   WAIT(1)
   WHILE(INT(INIREAD("Window.ini", "return", "Windowyesno")) = 0) // ожидание
      WAITMS(100)
   END_CYC
   
   $return = INT(INIREAD("Window.ini", "return", "Windowyesno"))
   IF($return = 6)
      LOGWRITE ("Нажата кнопка - ДА -")
   ELSE
      IF($return = 7)
         LOGWRITE ("Нажата кнопка - Нет -")
      ELSE
         LOGWRITE ("Кнопка не нажата, время вышло")
      END_IF
   END_IF
   
   // Возвращаемые значения:
   // Время вышло $return = -1
   // Да (YES) $return = 6
   // Нет (NO) $return = 7
END_SUB

//==============================================================================

Обновлённые и расширенные версии здесь:
http://crapware.aidf.org/forum/index.php?topic=1147.msg5166#msg5166
« Last Edit: September 07, 2016, 01:27:28 PM by Vint »