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

 

вот прилагаю решение (длл) для создания форм в скриптах

создаются следующие контролы; 

выпадающий список (TComboBox)

выбор из группы (TRadioGroup)

флажок (TCheckBox)

поле для ввода чисел с плавающей точкой (TEdit), в этом поле можно ввести всякую лабуду, тогда вернется 0

пример тоже есть

выглядит это примерно так

а вот код, который это создает:

  CreateForm("Test");
  int r=CreateObject("TRadioGroup","Пример RadioGroup");
    AddString(r, "нулевой");
    AddString(r, "первый");
    AddString(r, "второй");
    AddString(r, "третий");
    AddString(r, "четвертый");
    SetValue(r,2);
  int c=CreateObject("TComboBox","Пример ComboBox");
    AddString(c, "нулевой");
    AddString(c, "первый");
    AddString(c, "второй");
    AddString(c, "третий");
    AddString(c, "четвертый");
    SetValue(c,3);
  int e=CreateObject("TEdit","Пример Edit");
    SetValue(e,3.3);
  int b=CreateObject("TCheckBox","Пример TCheckBox");
    SetValue(b,False);
  if (ShowForm()==1) {
    Print(DoubleToStr(GetValue(r),0));
    Print(DoubleToStr(GetValue(c),0));
    Print(DoubleToStr(GetValue(e),2));
    Print(DoubleToStr(GetValue(b),0));
  }
  FreeForm();

 
добавил поля для даты и времени, пример смотрите в архиве
Файлы:
 
blend писал(а) >>
добавил поля для даты и времени, пример смотрите в архиве

Круто!

А кнопки можно делать? И обработчики на их нажатия?

Эх.. И сделать это окошко AlwaysOnTop, resizeable и использовать в качестве панельки для управления и отображения необходимой информации... .

То есть создание формы производится в Init()

( а несколько форм можно?)

CreateForm("Test1");
int r=CreateObject("TRadioGroup","Пример RadioGroup");
AddString(r, "нулевой");
SetValue(r,2);
end create // конец формы1

CreateForm("Test2");
int r=CreateObject("TRadioGroup","Пример RadioGroup");
AddString(r, "нулевой");
SetValue(r,2);
end create // конец формы2

а считывание данных с форм - по тикам в Start()

if (ShowForm()==1) {
Print(DoubleToStr(GetValue(r),0));
Print(DoubleToStr(GetValue(c),0));
Print(DoubleToStr(GetValue(e),2));
Print(DoubleToStr(GetValue(b),0));
}

В DeInit()

{
FreeForm(); // всех форм
}

 
blend писал(а) >>
добавил поля для даты и времени, пример смотрите в архиве

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

...

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

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

Класс!

 
blend >>:
добавил поля для даты и времени, пример смотрите в архиве

Спасибо!!!

==========

Эта библиотека хороша тем, что можно формировать окно с любым набором объектов по условию.

Т.е. в разных случаях в одном месте выводить разный набор настроек.

==========

Не хватает "TEdit" для текстового ввода с регулируемой длиной поля ввода.

Сделаете?

 

Спасибо, Blend! Очень интересно и нужно!

Два вопроса:

1. Можно ли добавить еще контролов, например ползунок TrackBar, а еще лучше напихать туда разных, не ограничивая особо.

2. Возможно ли получать значения элементов, не закрывая окно? Например

while(ShowForm()!=1) {
strS=DoubleToStr(GetValue(r),0);
}
Попробовал, не получилось. Значения отдаются только после нажатия на ОК.


Было бы очень удобно иметь такую библиотеку!

 
blend >>:

Спасибо Вам! blend


Очень полезная штука,   главное все очень просто

 
falkov >>:

Спасибо, Blend! Очень интересно и нужно!

Два вопроса:

1. Можно ли добавить еще контролов, например ползунок TrackBar, а еще лучше напихать туда разных, не ограничивая особо.

2. Возможно ли получать значения элементов, не закрывая окно? Например

while(ShowForm()!=1) {
strS=DoubleToStr(GetValue(r),0);
}
Попробовал, не получилось. Значения отдаются только после нажатия на ОК.


Было бы очень удобно иметь такую библиотеку!

Сам не пробывал, но в сообщении выше уже попробывали. Работает без кнопки "ОК".

strS=DoubleToStr(GetValue(r),0);
 

Да, там diakin пробовал вставлять в индик, он писал:

А оно на каждый тик выскакивает

Мне хотелось бы немного другое - постоянно висит окно, туда выведены ползунки для регулировки параметров индикаторов, при изменении их индикаторы изменяются. Надо только организовать передачу параметров из контролов окна в МТ4. Т.е. не нажимая кнопку ОК. Просто постоянно отслеживаются положения регуляторов.

 

спасибо за теплые слова, будет обед допишу все что успею и смогу

1.множественность окон изначально написана, только я спецом убрал, чтобы было проще в использовании, по желанию снова верну

2.формы немодальные без проблем

3.обработчики кнопок? если форма будет висеть немодально и отслеживаться изменения на каждом тике, то можно будет использовать радиобутон, но вообще даже не думал на тему кнопок

4.возврат строки добавлю во все контролы

5. дополнительные контролы по желанию но в разумных пределах

6. получать значения не закрывая окна можно будет для немодальных окон

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