Почему съезжает панель при обновлении настроек эксперта? - страница 4

 
Vitalii Ananev:

Посмотрите еще метод bool CDialog::CreateClientArea(void) там создается клиентская область и тоже устанавливается ее цвет. Получается, что там два объекта CPanel накладываются друг на друга. 

.....

Сейчас экспериментировал. Там надо еще и метод Add()  будет переопределить.  

zя запутался )) ни все сразу )

А мне тут советовали дефайны переопределить в Defines, это можно сделать? а то у меня не получилось

 
Maxim Dmitrievsky:

zя запутался )) ни все сразу )

А мне тут советовали дефайны переопределить в Defines, это можно сделать? а то у меня не получилось

Они в файле Defines.mqh. Там можно поменять цвет. Но тогда не будет гибкости. То есть если понадобится другой цвет то надо править этот файл и перекомпилировать.

Это константы их переопределить нельзя. Также как и защищенные поля класса предка.  

Вот что у меня получилось в результате всех манипуляций если делать так как я вам сказал.

 

 
Maxim Dmitrievsky:

А мне тут советовали дефайны переопределить в Defines, это можно сделать? а то у меня не получилось

Да, так проще. Но, конечно, не гибко.

 

Vitalii Ananev:

Это константы их переопределить нельзя. Также как и защищенные поля класса предка.  

Можно, #undef

 

Vitalii Ananev:

Вот что у меня получилось в результате всех манипуляций если делать так как я вам сказал.

Там может много чего повсплывать. А если нужно и цвет контролов менять, то вообще эпопея начнется.

 
Andrey Khatimlianskii:

Да, так проще. Но, конечно, не гибко.

 

Можно, #undef

 

Там может много чего повсплывать. А если нужно и цвет контролов менять, то вообще эпопея начнется.

Не знал, что их можно переопределить. В справке про #undef нет ни чего. Приведите пример если не трудно.

....

А не не надо, нашел в справке. 

 

Проверил. Если использовать 

#undef CONTROLS_DIALOG_COLOR_BG
#define CONTROLS_DIALOG_COLOR_BG            clrAqua

 Цвет панели не меняется так и остается серым. Если менять непосредственно в файле Defines то цвет меняется.

 
Vitalii Ananev:

Проверил. Если использовать 

 Цвет панели не меняется так и остается серым.

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

Обсуждение статьи "Как быстро добавить панель управления к индикатору и советнику"

Andrey Khatimlianskii, 2016.03.08 21:54

После изменения файла перекомпилируйте советника, должно сработать. И не забудьте сделать бэк-ап, чтоб после обновления восстановить свой вариант.

Переопределение делается с помощью #undef и #define. Но их нужно в нужное место вставить ;)


 
Andrey Khatimlianskii:

Все вставлено в нужном месте. Панель серая.

#include <Controls\Dialog.mqh>
#include <Controls\Button.mqh>
#include <Controls\Edit.mqh>
#include <Controls\Label.mqh>
#include <Controls\ComboBox.mqh>

#include <Classes\VASymbol.mqh>

#undef CONTROLS_DIALOG_COLOR_BG
#define CONTROLS_DIALOG_COLOR_BG            clrAqua
 
Andrey Khatimlianskii:

колитесь куда прикладывать! у меня уже через строчку они во всем коде... %)
 

Примерно так:

// ПЕРЕД подключением Dialog.mqh!
#include <Controls\Defines.mqh>

//--- Забываем старые цвета
#undef  CONTROLS_DIALOG_COLOR_BORDER_LIGHT
#undef  CONTROLS_DIALOG_COLOR_BORDER_DARK
#undef  CONTROLS_DIALOG_COLOR_BG
#undef  CONTROLS_DIALOG_COLOR_CAPTION_TEXT
#undef  CONTROLS_DIALOG_COLOR_CLIENT_BG
#undef  CONTROLS_DIALOG_COLOR_CLIENT_BORDER

//--- Устанавливаем новые цвета
#define CONTROLS_DIALOG_COLOR_BORDER_LIGHT  clrWhite            // Dialog border color (outside)
#define CONTROLS_DIALOG_COLOR_BORDER_DARK   C'0xB6,0xB6,0xB6'   // Dialog border color (inside)
#define CONTROLS_DIALOG_COLOR_BG            clrLightGreen       // Dialog background (under the caption and around the client area)
#define CONTROLS_DIALOG_COLOR_CAPTION_TEXT  C'0x28,0x29,0x3B'   // Dialog caption text color
#define CONTROLS_DIALOG_COLOR_CLIENT_BG     clrAliceBlue        // Client area background color
#define CONTROLS_DIALOG_COLOR_CLIENT_BORDER C'0xC8,0xC8,0xC8'   // Client area color

// Теперь подключаем
#include <Controls\Dialog.mqh>
 
Vitalii Ananev:

Все вставлено в нужном месте. Панель серая.

Просто проследите порядок включения файлов и компиляции, и станет понятно.

Defines.mqh подключается из Dialog.mqh, поэтому константы тут же "прошиваются" в код этого файла. Потом вы их переопределяете, и компиляция остальной части программы происходит с новыми значениями. Но они нигде не используются ;)