по мотивам "простое модальное окно"

30 января 2024, 12:21
Maxim Kuznetsov
0
33

в ответ на https://www.mql5.com/ru/forum/461540 (простое модальное диалоговое окно с двумя кнопками ввода)

сразу - на MQL не прибегая к DLL модальное окно сделать нельзя. 

Но можно прибечь-таки к DLL и быстренько накатать


#property copyright "Maxim A.Kuznetsov"
#property link      "https://www.luxtrade.tk"
#property version   "1.00"

#include <ATcl/ATcl.mqh>
void OnStart()
{
   ATcl_OnInit();
   ATcl *tcl=new ATcl();
   tcl.Eval("set final 0");                        // признак завершения
   
   tcl.Eval("package require Tk");                 // используем GUI
   tcl.Eval("wm title . {Two buttons}");           // заголовок окна
   tcl.Eval("label .labelOne -text {Данные раз:}");// текстовая метка   
   tcl.Eval("entry .entryOne");                    // поле ввода 1
   tcl.Eval("label .labelTwo -text {Данные два:}");// ещё текстовая метка
   tcl.Eval("entry .entryTwo");                    // поле ввода 2
   tcl.Eval("button .buttonOne -text {Кнопка}");   // некая кнопка
   tcl.Eval("button .buttonTwo -text {Финита} -command {set final 1}" );   // кнока выставлящая флаг завершения
   
   tcl.Eval("grid .labelOne .entryOne");        // располагаем в таблице, первая строка
   tcl.Eval("grid .labelTwo .entryTwo");        // вторая строка
   tcl.Eval("grid .buttonOne .buttonTwo");      // третья строка
   
   tcl.Eval("grab .");     // забираем фокус (будет модальное окно)
   tcl.Eval("raise .");    // отображаем окно поверх прочих

   tcl.Eval(".entryOne insert end {Данные1}");  // задаём данные в поле ввода 1
   tcl.Eval(".entryTwo insert end {Данные2}");  // задаём данные в поле ввода 2

   while(!IsStopped()) {
      tcl.Update();
      long fin=tcl.LongEval("set final"); // смотрим признак завершения
      if (fin==1) {
         // получаем введённое как текст и печатаем
         PrintFormat("one %s , two %s",tcl.StringEval(".entryOne get"),tcl.StringEval(".entryTwo get"));
         break;
      }
      Sleep(20);
   }
   delete tcl;
   ATcl_OnDeinit();
}

DLL-ку можно взять тут : https://sourceforge.net/projects/mt-atcl/

или обратиться ко мне, за более новой :-)


Поделитесь с друзьями: