Внешние ActiveX/OCX/DLL для создания GUI в MQL - страница 4

 

вообще-то похоже по завершению функции start() происходит полное обнуление  задействованной памяти, кроме глобальных переменных, в том числе и объектов созданных в длл, так что немодальное не получается, окно просто исчезает по завершению start(), а модальное блокирует дальнейшие действия как для текущего тика, так и для последующих, вот такое противоречие, с одной стороны start() написана как независимый поток, с другой все таки зависимый

то же самое и  init(). так что шансов приделать доп. панельку нет, либо писать надо не через вызов из метатрейдера, вообщем пользоваться только в скриптах((

 

есть вариант который пока лень пробовать

идентификатор модального окна и контролов на нем запустить в глобальные переменные и открыть второй советник, один советник для открытия модального окна, второй для чтения и записи, думаю что сработает, всю эту логику можно уместить в одном советнике, если нет определенной глобальной переменной, то создаем ее и открываем окно,  если такая переменная есть, то производим запись и чтение в открытом окне, надеюсь понятно объяснил


////////////////////////////

на двух графиках прекрасно получается, один график для удержания окна и изменения в нем, другой для чтения

 
diakin >>:

А почему как скрипт работает, а как индикатор - нет?

...

Уфф.. обманул, заработало.. Так что не остановить.. Надо окошко сделать немодальным и убрать кнопку OK. Закрыть можно и по крестику. Иначе пока окошко не закроешь, до кнопок терминала не добраться. А оно на каждый тик выскакивает Ж-()

А так в принципе можно использовать как доп панельку. Немодальное, resizeable, AlwaysOnTop.

Класс!

Ни как не работает. Загружается и тут же вываливается не создавая ни какого окна.

2009.02.12 20:42:01 TestCreateForm GBPUSD,H1: removed
2009.02.12 20:42:01 TestCreateForm GBPUSD,H1: loaded successfully

В чем дело?

 

Вот тут я немного рассказал о своем решении проблемы комплексно MT/MATHCAD/VISSIM : https://forum.mql4.com/ru/18928/page10

А вот создать отдельную тему и подготовить к ней материал - времени совсем нет :о( Может быть кому то будет интересно. Уж чего чего, а GUI там много. :о) Меня привлекает по сути одно - экономия времени, не нужно ничего программировать.

 
KI-trader >>:

Ни как не работает. Загружается и тут же вываливается не создавая ни какого окна.

2009.02.12 20:42:01 TestCreateForm GBPUSD,H1: removed
2009.02.12 20:42:01 TestCreateForm GBPUSD,H1: loaded successfully

В чем дело?

1. Не забудьте скопировать DCreateForm.dll в папку C:\Program Files\MetaTrader\experts\libraries\ (или как там у вас)

2. Не забудьте в настройках терминала (Сервис-Настройки-Советники) поставить отметки "Разрешить импорт DLL" и желательно снять с "Подтверждать вызов функций DLL"

После этого скриптовый тестовый вариант TestCreateForm будет работать.

 
blend >>:

есть вариант который пока лень пробовать

идентификатор модального окна и контролов на нем запустить в глобальные переменные и открыть второй советник....

на двух графиках прекрасно получается, один график для удержания окна и изменения в нем, другой для чтения

Да, через глобальные переменные так можно, но требуется удвоенное количество окон графиков что не есть гут...
А если попробовать реализовать это как-нибудь по принципу объектов графика - они ведь не уничтожаются после завершения start() и постоянно хранят свои значения?
Например "подсунуть" создаваемое окно в функцию ObjectCreate().

Конечно очень жаль, что разработчики не учли такой мелочи и приходится извращаться...
 
blend:

вообще-то похоже по завершению функции start() происходит полное обнуление  задействованной памяти, кроме глобальных переменных, в том числе и объектов созданных в длл, так что немодальное не получается, окно просто исчезает по завершению start(), а модальное блокирует дальнейшие действия как для текущего тика, так и для последующих, вот такое противоречие, с одной стороны start() написана как независимый поток, с другой все таки зависимый

то же самое и  init(). так что шансов приделать доп. панельку нет, либо писать надо не через вызов из метатрейдера, вообщем пользоваться только в скриптах((



нужно просто форму в dll запускать в отдельном потоке , а в mql4 сделать зацикленный скрипт( с условием выхода из цикла IsStopped), тогда будет интерактивная работа панели и скрипта

например так

  type

  TMyThread = class(TThread)

   private

     { Private declarations }

   protected

     procedure FormShow;

     procedure Execute; override;

  end; 

 

 

procedure Start; // экспортируемая функция

begin

 T1:=TMyThread.Create(false); // создаем поток

end; 

...

procedure TMyThread.Execute;

 begin

 FormShow; // запускаем процедуру создания формы

 end;



...

procedure TMyThread.FormShow; // процедура создания модальной формы

begin

 Form1:=TForm1.Create(nil);

 Form1.ShowModal; 

 Form1.Free;

 T1.Terminate;

 end; 

 

все остальные функции как обычно проводят обработку кнопок формы, только вызов через класс Form1

Причина обращения: