Панели и диалоги. Можно задавать цвет, шрифт ...

 

На базе стандартного примера панели CBmpButton:


Таблица свойств которые задаются в файле [data folder]\MQL5\Include\Controls\Defines.mqh - именно эти свойства используются при создании панелей диалогов.

СвойствоЗначение по-умолчанию Применяется в классе
 Блок //--- common   
 CONTROLS_FONT_NAME "Trebuchet MS" Все панели на базе класса диалогов и панелей
 CONTROLS_FONT_SIZE (10) Все панели на базе класса диалогов и панелей
 Блок //--- Text 
 CONTROLS_COLOR_TEXT C'0x3B,0x29,0x28' Не применяется
 CONTROLS_COLOR_TEXT_SEL White Не применяется
 CONTROLS_COLOR_BG White Не применяется
 CONTROLS_COLOR_BG_SEL C'0x33,0x99,0xFF' CDateDropList
 Блок //--- Button 
 CONTROLS_BUTTON_COLOR C'0x3B,0x29,0x28' CButton
 CONTROLS_BUTTON_COLOR_BG C'0xDD,0xE2,0xEB' CButton
 CONTROLS_BUTTON_COLOR_BORDER C'0xB2,0xC3,0xCF' CButton, CDateDropList
 Блок //--- Label 
 CONTROLS_LABEL_COLOR C'0x3B,0x29,0x28' CLabel
 Блок //--- Edit 
 CONTROLS_EDIT_COLOR C'0x3B,0x29,0x28' CDateDropList, CEdit
 CONTROLS_EDIT_COLOR_BG White CDateDropList, CEdit
 CONTROLS_EDIT_COLOR_BORDER C'0xB2,0xC3,0xCF' CDateDropList, CEdit
 Блок //--- Scrolls   
 CONTROLS_SCROLL_COLOR_BG C'0xEC,0xEC,0xEC' CScroll
 CONTROLS_SCROLL_COLOR_BORDER C'0xD3,0xD3,0xD3' CScroll
 Блок //--- Client  
 CONTROLS_CLIENT_COLOR_BG C'0xDE,0xDE,0xDE' СWndClient -> CCheckGroup, CListView, CRadioGroup
 CONTROLS_CLIENT_COLOR_BORDER C'0x2C,0x2C,0x2C' СWndClient -> CCheckGroup, CListView, CRadioGroup
 Блок //--- ListView  
 CONTROLS_LISTITEM_COLOR_TEXT C'0x3B,0x29,0x28' CListView
 CONTROLS_LISTITEM_COLOR_TEXT_SEL White CListView
 CONTROLS_LISTITEM_COLOR_BG White CListView
 CONTROLS_LISTITEM_COLOR_BG_SEL C'0x33,0x99,0xFF' CListView
 CONTROLS_LIST_COLOR_BG White CListView
 CONTROLS_LIST_COLOR_BORDER C'0xB2,0xC3,0xCF' CListView
 Блок //--- CheckGroup  
 CONTROLS_CHECKGROUP_COLOR_BG C'0xF7,0xF7,0xF7' CCheckBox, CCheckGroup, CRadioButton
 CONTROLS_CHECKGROUP_COLOR_BORDER C'0xB2,0xC3,0xCF' CCheckGroup
 Блок //--- Dialog  
 CONTROLS_DIALOG_COLOR_BORDER_LIGHT White Все панели на базе класса диалогов и панелей
 CONTROLS_DIALOG_COLOR_BORDER_DARK C'0xB6,0xB6,0xB6' Все панели на базе класса диалогов и панелей
 CONTROLS_DIALOG_COLOR_BG C'0xF0,0xF0,0xF0' Все панели на базе класса диалогов и панелей
 CONTROLS_DIALOG_COLOR_CAPTION_TEXT C'0x28,0x29,0x3B' Все панели на базе класса диалогов и панелей
 CONTROLS_DIALOG_COLOR_CLIENT_BG C'0xF7,0xF7,0xF7' Все панели на базе класса диалогов и панелей
 CONTROLS_DIALOG_COLOR_CLIENT_BORDER C'0xC8,0xC8,0xC8' Все панели на базе класса диалогов и панелей


Достаточно подключить "Defines.mqh" впереди всех включаемых файлой и классов панелей диалогов и последовательно:

  1. #undef - отмена макроса, объявленного ранее
  2. #define - снова подключаем макрос, только в этот раз в нашими входными параметрами

//+------------------------------------------------------------------+
//|                                            ControlsBmpButton.mq5 |
//|                        Copyright 2015, MetaQuotes Software Corp. |
//|                                              http://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2015, MetaQuotes Software Corp."
#property link      "http://www.mql5.com"
#property version   "1.00"
#property description "Control Panels and Dialogs. Demonstration class CBmpButton"
#include <Controls\Defines.mqh>
#undef CONTROLS_FONT_NAME 
#undef CONTROLS_FONT_SIZE 

#undef CONTROLS_BUTTON_COLOR
#undef CONTROLS_BUTTON_COLOR_BG
#undef CONTROLS_BUTTON_COLOR_BORDER

#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 

input string   font_name                  = "Trebuchet MS";
input int      font_size                  = 10;

input color    button_color               = C'0x3B,0x29,0x28';
input color    button_color_bg            = C'0xDD,0xE2,0xEB';
input color    button_color_border        = C'0xB2,0xC3,0xCF';

input color    dialog_color_border_light  = White;
input color    dialog_color_border_dark   = C'0xB6,0xB6,0xB6';
input color    dialog_color_bg            = C'0xF0,0xF0,0xF0';
input color    dialog_color_caption_text  = C'0x28,0x29,0x3B';
input color    dialog_color_client_bg     = C'0xF7,0xF7,0xF7';
input color    dialog_color_client_border = C'0xC8,0xC8,0xC8';

#define CONTROLS_FONT_NAME                font_name
#define CONTROLS_FONT_SIZE                font_size

#define CONTROLS_BUTTON_COLOR             button_color
#define CONTROLS_BUTTON_COLOR_BG          button_color_bg
#define CONTROLS_BUTTON_COLOR_BORDER      button_color_border

#define CONTROLS_DIALOG_COLOR_BORDER_LIGHT dialog_color_border_light
#define CONTROLS_DIALOG_COLOR_BORDER_DARK dialog_color_border_dark
#define CONTROLS_DIALOG_COLOR_BG          dialog_color_bg
#define CONTROLS_DIALOG_COLOR_CAPTION_TEXT dialog_color_caption_text
#define CONTROLS_DIALOG_COLOR_CLIENT_BG   dialog_color_client_bg
#define CONTROLS_DIALOG_COLOR_CLIENT_BORDER dialog_color_client_border

#include <Controls\Dialog.mqh>
#include <Controls\BmpButton.mqh>
//+------------------------------------------------------------------+
//| defines                                                          |
//+------------------------------------------------------------------+
Файлы:
 
Vladimir Karputov:

На базе стандартного примера панели CBmpButton:


По 4-ке недавно такой вопрос возникал, как заголовки раскрашивать.Так пока напрямую делаю, через ObjectSetInteger().

А по 5-ке можете код дать посмотреть?

 

Пришла мысль, как можно реализовать выбор цвета через 3D представление цвета наглядно и быстро без всяких окон свойств.
Сделал набросок на скорую руку:


 

Да и вообще можно менять все параметры не через окна свойств, а двигая мышь.

Вот пример с обычной MA. Меняем период, сдвиг, толщину линии и цвет линии просто двигая мышкой.


 
Vasiliy Pushkaryov:

***

А по 5-ке можете код дать посмотреть?

Я дополнил первый пост примером и таблицей свойств панели диалогов который теперь можно менять.

 
Nikolai Semko:

Да и вообще можно менять все параметры не через окна свойств, а двигая мышь.

Вот пример с обычной MA. Меняем период, сдвиг, толщину линии и цвет линии просто двигая мышкой.


С цветом интересно придумано! И со сменой параметров. 
 
Nikolai Semko:

Да и вообще можно менять все параметры не через окна свойств, а двигая мышь.

Вот пример с обычной MA. Меняем период, сдвиг, толщину линии и цвет линии просто двигая мышкой.


какой программой Вы далаете такие гифки?

 
Nikolai Semko:

Пришла мысль, как можно реализовать выбор цвета через 3D представление цвета наглядно и быстро без всяких окон свойств.
Сделал набросок на скорую руку:


Это круто должен сказать... Очень круто!

Можно раскомментированный код в студию ?

 
Vladimir Gribachev:

какой программой Вы далаете такие гифки?

Съемку экрана и Гифки делаю на Camtasia 9

 
Vladimir Pastushak:

Это круто должен сказать... Очень круто!

Можно раскомментированный код в студию ?

Спасибо. 

Этот код написал на одном дыхании за несколько часов.

Он черновой и чисто для того чтобы визуализировать идею. Его стыдно выкладывать и там много ляпов.

Для более качественного кода нужно потратить дни.

Так ведь здесь нет ничего сложного. Главная ценность - это сама идея. Любой, кто хоть чуть понимает Canvas, сможет написать тоже самое, только лучше.

И кстати, я нигде не нашел такого 3D выбора цвета. Надо подкинуть эту идею Adobe и Corel :)), тем более их головные офисы от меня в шаговой доступности ))).

Странно! Ведь это первое что приходит в голову: три цвета - три измерения.

Полная цветовая палитра RGB(256*256*256= 16777216) - Куб со стороной = 256.

Хотя, у меня есть идея более компактного представления полной цветовой палитры (16777216 цветов) без кликания мышки. Реализую ее обязательно в недалеком будущем.

И кстати, достаточно легко реализовать для полиграфистов выбор CMYK цвета по такой же аналогии, но уже в 4D. Но для трейдеров это лишнее.

 
Vasiliy Pushkaryov:

По 4-ке недавно такой вопрос возникал, как заголовки раскрашивать.Так пока напрямую делаю, через ObjectSetInteger().

А по 5-ке можете код дать посмотреть?

Спасибо, теперь разобрался. Это должно и в 4-ке помочь.
Причина обращения: