Автор Тема: Диалоговое окно с кнопками OK, Да, Нет...  (Прочитано 3164 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Vint

  • Супермодератор
  • Герой форума
  • *
  • Сообщений: 3756
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • Просмотр профиля
Диалоговое окно с кнопками OK, Да, Нет...
« : Сентябрь 22, 2013, 11:42:56 pm »
Прочитав тему про переход на 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) - упрощённый вариант, запрос на перезапись файла.
Все передаваемые значения и возвращаемые результаты в комментариях.
Код: Clickermann
  1.  
  2. #name "Window & Window_yes-no"
  3. // Author: Vint
  4. // Version: 1.0 (10.09.2013)
  5.  
  6.  
  7. //==============================================================================
  8. SUB(Window) //==========  Окно универсальное ===================================
  9.  
  10.   // $window_flag = 0 // Режим окна (сколько и какие кнопки)
  11.   // $window_title = "Сообщение" // Заголовок окна
  12.   // $window_text = "Перезаписать файл?" // текст в окне
  13.   // $window_timeout = 5 // время оказа окна, "0"- без лимита
  14.   // GOSUB(Window) // вызываем настраиваемое окно
  15.  
  16.  
  17.   DEFINE($window_title, "Сообщение")
  18.   DEFINE($window_text, "Текст")
  19.  
  20.   INIWRITE("Window.ini","flag",$window_flag, "Window")
  21.   WAITMS(50)
  22.   INIWRITE("Window.ini","title",$window_title, "Window")
  23.   WAITMS(50)
  24.   INIWRITE("Window.ini","text",$window_text, "Window")
  25.   WAITMS(50)
  26.   INIWRITE("Window.ini","timeout",$window_timeout, "Window")
  27.   WAITMS(50)
  28.   INIWRITE("Window.ini","return","0", "Window")
  29.   WAITMS(100)
  30.  
  31.   EXECUTE("Window_ini.exe","Window")
  32.   WAIT(1)
  33.   WHILE(INT(INIREAD("Window.ini", "return", "Window")) = 0) // ожидание
  34.      WAITMS(100)
  35.   END_CYC
  36.  
  37.   $return = INT(INIREAD("Window.ini", "return", "Window"))
  38.   IF($return = -1)
  39.      LOGWRITE ("Кнопка не нажата, время вышло")
  40.   ELSE
  41.      LOGWRITE ("Нажата кнопка с кодом: ",$return)
  42.   END_IF
  43.  
  44.   // Возвращаемые значения:
  45.   // Время вышло $return = -1
  46.   // OK $return = 1
  47.   // Отмена (CANCEL) $return = 2
  48.   // Прервать (ABORT) $return = 3
  49.   // Повтор (RETRY) $return = 4
  50.   // Пропустить (IGNORE) $return = 5
  51.   // Да (YES) $return = 6
  52.   // Нет (NO) $return = 7
  53.   // Повторить (TRY AGAIN) $return = 10
  54.   // Продолжить (CONTINUE) $return = 11
  55.  
  56.  
  57.   //Параметр flag может быть комбинацией следующих значений:
  58.  
  59.   //десятичное значение Отображаемые кнопки 0x
  60.   // 0 Кнопка OK 0x0
  61.   // 1 Кнопки OK и Отмена 0x1
  62.   // 2 Кнопки Прервать, Повтор и Пропустить 0x2
  63.   // 3 Кнопки Да, Нет и Отмена 0x3
  64.   // 4 Кнопки Да и Нет 0x4
  65.   // 5 Кнопки Повтор и Отмена 0x5
  66.   // 6 Кнопки Отмена, Повторить, Продолжить 0x6
  67.  
  68.   //десятичное значение Отображаемая иконка 0x
  69.   // 0 (Нет) 0x0
  70.   // 16 Иконка "стоп" 0x10
  71.   // 32 Иконка "знак вопроса" 0x20
  72.   // 48 Иконка "предупреждение" 0x30
  73.   // 64 Иконка "информация", с 'i' в кружке 0x40
  74.  
  75.   //десятичное значение Выделенная кнопка по умолчанию 0x
  76.   // 0 Первая кнопка 0x0
  77.   // 256 Вторая кнопка 0x100
  78.   // 512 Третья кнопка 0x200
  79.  
  80.   //десятичное значение Модальность 0x
  81.   // 0 Приложение (Application) 0x0
  82.   // 4096 Системная, поверх всех окон 0x1000
  83.   // 8192 Блокирует родительское окно 0x2000
  84.  
  85.   // десятичное значение Другое 0x
  86.   // 262144 имеет атрибут "поверх всех окон" 0x40000
  87.   // 524288 Заголовок и текст выравниваются по правому краю 0x80000
  88.  
  89. END_SUB
  90.  
  91. //==============================================================================
  92. SUB(Window_yes-no) //==========  Окно Да/нет ===================================
  93.  
  94.   // $window_title = "Сообщение" // Заголовок окна
  95.   // $window_text = "Перезаписать файл?" // текст в окне
  96.   // $window_timeout = 5 // время показа окна, "0"- без лимита
  97.   // GOSUB(Window_yes-no) // вызываем окно Да/Нет
  98.  
  99.   DEFINE($window_title, "Сообщение")
  100.   DEFINE($window_text, "Перезаписать файл?")
  101.   DEFINE($window_timeout, 5)
  102.  
  103.   INIWRITE("Window.ini","flag","266532", "Windowyesno")
  104.   WAITMS(50)
  105.   INIWRITE("Window.ini","title",$window_title, "Windowyesno")
  106.   WAITMS(50)
  107.   INIWRITE("Window.ini","text",$window_text, "Windowyesno")
  108.   WAITMS(50)
  109.   INIWRITE("Window.ini","timeout",$window_timeout, "Windowyesno")
  110.   WAITMS(50)
  111.   INIWRITE("Window.ini","return","0", "Windowyesno")
  112.   WAITMS(100)
  113.  
  114.   EXECUTE("Window_ini.exe","Windowyesno")
  115.   WAIT(1)
  116.   WHILE(INT(INIREAD("Window.ini", "return", "Windowyesno")) = 0) // ожидание
  117.      WAITMS(100)
  118.   END_CYC
  119.  
  120.   $return = INT(INIREAD("Window.ini", "return", "Windowyesno"))
  121.   IF($return = 6)
  122.      LOGWRITE ("Нажата кнопка - ДА -")
  123.   ELSE
  124.      IF($return = 7)
  125.         LOGWRITE ("Нажата кнопка - Нет -")
  126.      ELSE
  127.         LOGWRITE ("Кнопка не нажата, время вышло")
  128.      END_IF
  129.   END_IF
  130.  
  131.   // Возвращаемые значения:
  132.   // Время вышло $return = -1
  133.   // Да (YES) $return = 6
  134.   // Нет (NO) $return = 7
  135. END_SUB
  136.  
  137. //==============================================================================

Обновлённые и расширенные версии здесь:
http://crapware.aidf.org/forum/index.php?topic=1147.msg5166#msg5166
« Последнее редактирование: Сентябрь 07, 2016, 01:27:28 pm от Vint »