diff --git a/Controls/BmpButton.mqh b/Controls/BmpButton.mqh new file mode 100644 index 0000000..dbc040e --- /dev/null +++ b/Controls/BmpButton.mqh @@ -0,0 +1,268 @@ +//+------------------------------------------------------------------+ +//| BmpButton.mqh | +//| Copyright 2000-2024, MetaQuotes Ltd. | +//| https://www.mql5.com | +//+------------------------------------------------------------------+ +#include "WndObj.mqh" +#include +//+------------------------------------------------------------------+ +//| Class CBmpButton | +//| Usage: control that is displayed by | +//| the CChartObjectBmpLabel object | +//+------------------------------------------------------------------+ +class CBmpButton : public CWndObj + { +private: + CChartObjectBmpLabel m_button; // chart object + //--- parameters of the chart object + int m_border; // border width + string m_bmp_off_name; // name of BMP file for the "OFF" state (default state) + string m_bmp_on_name; // name of BMP file for the "ON" state + string m_bmp_passive_name; + string m_bmp_active_name; + +public: + CBmpButton(void); + ~CBmpButton(void); + //--- create + virtual bool Create(const long chart,const string name,const int subwin,const int x1,const int y1,const int x2,const int y2); + //--- parameters of the chart object + int Border(void) const { return(m_border); } + bool Border(const int value); + bool BmpNames(const string off="",const string on=""); + string BmpOffName(void) const { return(m_bmp_off_name); } + bool BmpOffName(const string name); + string BmpOnName(void) const { return(m_bmp_on_name); } + bool BmpOnName(const string name); + string BmpPassiveName(void) const { return(m_bmp_passive_name); } + bool BmpPassiveName(const string name); + string BmpActiveName(void) const { return(m_bmp_active_name); } + bool BmpActiveName(const string name); + //--- state + bool Pressed(void) const { return(m_button.State()); } + bool Pressed(const bool pressed) { return(m_button.State(pressed)); } + //--- properties + bool Locking(void) const { return(IS_CAN_LOCK); } + void Locking(const bool locking); + +protected: + //--- handlers of object settings + virtual bool OnSetZOrder(void) { return(m_button.Z_Order(m_zorder)); } + //--- internal event handlers + virtual bool OnCreate(void); + virtual bool OnShow(void); + virtual bool OnHide(void); + virtual bool OnMove(void); + virtual bool OnChange(void); + //--- новые обработчики + virtual bool OnActivate(void); + virtual bool OnDeactivate(void); + virtual bool OnMouseDown(void); + virtual bool OnMouseUp(void); + }; +//+------------------------------------------------------------------+ +//| Constructor | +//+------------------------------------------------------------------+ +CBmpButton::CBmpButton(void) : m_border(0), + m_bmp_off_name(NULL), + m_bmp_on_name(NULL), + m_bmp_passive_name(NULL), + m_bmp_active_name(NULL) + { + } +//+------------------------------------------------------------------+ +//| Destructor | +//+------------------------------------------------------------------+ +CBmpButton::~CBmpButton(void) + { + } +//+------------------------------------------------------------------+ +//| Create a control | +//+------------------------------------------------------------------+ +bool CBmpButton::Create(const long chart,const string name,const int subwin,const int x1,const int y1,const int x2,const int y2) + { +//--- call method of the parent class + if(!CWndObj::Create(chart,name,subwin,x1,y1,x2,y2)) + return(false); +//--- create the chart object + if(!m_button.Create(chart,name,subwin,x1,y1)) + return(false); +//--- call the settings handler + return(OnChange()); + } +//+------------------------------------------------------------------+ +//| Set border width | +//+------------------------------------------------------------------+ +bool CBmpButton::Border(const int value) + { +//--- save new value of parameter + m_border=value; +//--- set up the chart object + return(m_button.Width(value)); + } +//+------------------------------------------------------------------+ +//| Set two images at once | +//+------------------------------------------------------------------+ +bool CBmpButton::BmpNames(const string off,const string on) + { +//--- save new values of parameters + m_bmp_off_name=off; + m_bmp_on_name =on; +//--- set up the chart object + if(!m_button.BmpFileOff(off)) + return(false); + if(!m_button.BmpFileOn(on)) + return(false); +//--- succeed + return(true); + } +//+------------------------------------------------------------------+ +//| Set image for the "OFF" state | +//+------------------------------------------------------------------+ +bool CBmpButton::BmpOffName(const string name) + { +//--- save new value of parameter + m_bmp_off_name=name; +//--- set up the chart object + if(!m_button.BmpFileOff(name)) + return(false); +//--- set size by image dimensions + Width(m_button.X_Size()); + Height(m_button.Y_Size()); +//--- succeed + return(true); + } +//+------------------------------------------------------------------+ +//| Set image for the "ON" state | +//+------------------------------------------------------------------+ +bool CBmpButton::BmpOnName(const string name) + { +//--- save new value of parameter + m_bmp_on_name=name; +//--- set up the chart object + if(!m_button.BmpFileOn(name)) + return(false); +//--- set size by image dimensions + Width(m_button.X_Size()); + Height(m_button.Y_Size()); +//--- succeed + return(true); + } +//+------------------------------------------------------------------+ +//| Set image for the "OFF" state (passive) | +//+------------------------------------------------------------------+ +bool CBmpButton::BmpPassiveName(const string name) + { +//--- save new value of parameter + m_bmp_passive_name=name; +//--- set up the chart object + if(!IS_ACTIVE) + return(BmpOffName(name)); +//--- succeed + return(true); + } +//+------------------------------------------------------------------+ +//| Set image for the "OFF" state (active) | +//+------------------------------------------------------------------+ +bool CBmpButton::BmpActiveName(const string name) + { +//--- save new value of parameter + m_bmp_active_name=name; +//--- set up the chart object + if(IS_ACTIVE) + return(BmpOffName(name)); +//--- succeed + return(true); + } +//+------------------------------------------------------------------+ +//| Locking flag | +//+------------------------------------------------------------------+ +void CBmpButton::Locking(const bool flag) + { + if(flag) + PropFlagsSet(WND_PROP_FLAG_CAN_LOCK); + else + PropFlagsReset(WND_PROP_FLAG_CAN_LOCK); + } +//+------------------------------------------------------------------+ +//| Create object on chart | +//+------------------------------------------------------------------+ +bool CBmpButton::OnCreate(void) + { +//--- create the chart object by previously set parameters + return(m_button.Create(m_chart_id,m_name,m_subwin,m_rect.left,m_rect.top)); + } +//+------------------------------------------------------------------+ +//| Display object on chart | +//+------------------------------------------------------------------+ +bool CBmpButton::OnShow(void) + { + return(m_button.Timeframes(OBJ_ALL_PERIODS)); + } +//+------------------------------------------------------------------+ +//| Hide object from chart | +//+------------------------------------------------------------------+ +bool CBmpButton::OnHide(void) + { + return(m_button.Timeframes(OBJ_NO_PERIODS)); + } +//+------------------------------------------------------------------+ +//| Absolute movement of the chart object | +//+------------------------------------------------------------------+ +bool CBmpButton::OnMove(void) + { +//--- position the chart object + return(m_button.X_Distance(m_rect.left) && m_button.Y_Distance(m_rect.top)); + } +//+------------------------------------------------------------------+ +//| Set up the chart object | +//+------------------------------------------------------------------+ +bool CBmpButton::OnChange(void) + { +//--- set up the chart object + return(m_button.Width(m_border) && m_button.BmpFileOff(m_bmp_off_name) && m_button.BmpFileOn(m_bmp_on_name)); + } +//+------------------------------------------------------------------+ +//| Handler of activating the group of controls | +//+------------------------------------------------------------------+ +bool CBmpButton::OnActivate(void) + { + if(m_bmp_active_name!=NULL) + BmpOffName(m_bmp_active_name); +//--- handled + return(true); + } +//+------------------------------------------------------------------+ +//| Handler of deactivating the group of controls | +//+------------------------------------------------------------------+ +bool CBmpButton::OnDeactivate(void) + { + if(m_bmp_passive_name!=NULL) + BmpOffName(m_bmp_passive_name); + if(!IS_CAN_LOCK) + Pressed(false); +//--- handled + return(true); + } +//+------------------------------------------------------------------+ +//| Handler of click on the left mouse button | +//+------------------------------------------------------------------+ +bool CBmpButton::OnMouseDown(void) + { + if(!IS_CAN_LOCK) + Pressed(!Pressed()); +//--- call of the method of the parent class + return(CWnd::OnMouseDown()); + } +//+------------------------------------------------------------------+ +//| Handler of click on the left mouse button | +//+------------------------------------------------------------------+ +bool CBmpButton::OnMouseUp(void) + { +//--- depress the button if it is not fixed + if(m_button.State() && !IS_CAN_LOCK) + m_button.State(false); +//--- call of the method of the parent class + return(CWnd::OnMouseUp()); + } +//+------------------------------------------------------------------+ diff --git a/Controls/Button.mqh b/Controls/Button.mqh new file mode 100644 index 0000000..0be9dbd --- /dev/null +++ b/Controls/Button.mqh @@ -0,0 +1,146 @@ +//+------------------------------------------------------------------+ +//| Button.mqh | +//| Copyright 2000-2024, MetaQuotes Ltd. | +//| https://www.mql5.com | +//+------------------------------------------------------------------+ +#include "WndObj.mqh" +#include +//+------------------------------------------------------------------+ +//| Class CButton | +//| Usage: control that is displayed by | +//| the CChartObjectButton object | +//+------------------------------------------------------------------+ +class CButton : public CWndObj + { +private: + CChartObjectButton m_button; // chart object + +public: + CButton(void); + ~CButton(void); + //--- create + virtual bool Create(const long chart,const string name,const int subwin,const int x1,const int y1,const int x2,const int y2); + //--- state + bool Pressed(void) const { return(m_button.State()); } + bool Pressed(const bool pressed) { return(m_button.State(pressed)); } + //--- properties + bool Locking(void) const { return(IS_CAN_LOCK); } + void Locking(const bool flag); + +protected: + //--- handlers of object settings + virtual bool OnSetText(void) { return(m_button.Description(m_text)); } + virtual bool OnSetColor(void) { return(m_button.Color(m_color)); } + virtual bool OnSetColorBackground(void) { return(m_button.BackColor(m_color_background)); } + virtual bool OnSetColorBorder(void) { return(m_button.BorderColor(m_color_border)); } + virtual bool OnSetFont(void) { return(m_button.Font(m_font)); } + virtual bool OnSetFontSize(void) { return(m_button.FontSize(m_font_size)); } + //--- internal event handlers + virtual bool OnCreate(void); + virtual bool OnShow(void); + virtual bool OnHide(void); + virtual bool OnMove(void); + virtual bool OnResize(void); + //--- новые обработчики + virtual bool OnMouseDown(void); + virtual bool OnMouseUp(void); + }; +//+------------------------------------------------------------------+ +//| Constructor | +//+------------------------------------------------------------------+ +CButton::CButton(void) + { + m_color =CONTROLS_BUTTON_COLOR; + m_color_background=CONTROLS_BUTTON_COLOR_BG; + m_color_border =CONTROLS_BUTTON_COLOR_BORDER; + } +//+------------------------------------------------------------------+ +//| Destructor | +//+------------------------------------------------------------------+ +CButton::~CButton(void) + { + } +//+------------------------------------------------------------------+ +//| Create a control | +//+------------------------------------------------------------------+ +bool CButton::Create(const long chart,const string name,const int subwin,const int x1,const int y1,const int x2,const int y2) + { +//--- call method of the parent class + if(!CWndObj::Create(chart,name,subwin,x1,y1,x2,y2)) + return(false); +//--- create the chart object + if(!m_button.Create(chart,name,subwin,x1,y1,Width(),Height())) + return(false); +//--- call the settings handler + return(OnChange()); + } +//+------------------------------------------------------------------+ +//| Locking flag | +//+------------------------------------------------------------------+ +void CButton::Locking(const bool flag) + { + if(flag) + PropFlagsSet(WND_PROP_FLAG_CAN_LOCK); + else + PropFlagsReset(WND_PROP_FLAG_CAN_LOCK); + } +//+------------------------------------------------------------------+ +//| Create object on chart | +//+------------------------------------------------------------------+ +bool CButton::OnCreate(void) + { +//--- create the chart object by previously set parameters + return(m_button.Create(m_chart_id,m_name,m_subwin,m_rect.left,m_rect.top,m_rect.Width(),m_rect.Height())); + } +//+------------------------------------------------------------------+ +//| Display object on chart | +//+------------------------------------------------------------------+ +bool CButton::OnShow(void) + { + return(m_button.Timeframes(OBJ_ALL_PERIODS)); + } +//+------------------------------------------------------------------+ +//| Hide object from chart | +//+------------------------------------------------------------------+ +bool CButton::OnHide(void) + { + return(m_button.Timeframes(OBJ_NO_PERIODS)); + } +//+------------------------------------------------------------------+ +//| Absolute movement of the chart object | +//+------------------------------------------------------------------+ +bool CButton::OnMove(void) + { +//--- position the chart object + return(m_button.X_Distance(m_rect.left) && m_button.Y_Distance(m_rect.top)); + } +//+------------------------------------------------------------------+ +//| Resize the chart object | +//+------------------------------------------------------------------+ +bool CButton::OnResize(void) + { +//--- resize the chart object + return(m_button.X_Size(m_rect.Width()) && m_button.Y_Size(m_rect.Height())); + } +//+------------------------------------------------------------------+ +//| Handler of click on the left mouse button | +//+------------------------------------------------------------------+ +bool CButton::OnMouseDown(void) + { + if(!IS_CAN_LOCK) + Pressed(!Pressed()); +//--- call of the method of the parent class + return(CWnd::OnMouseDown()); + } +//+------------------------------------------------------------------+ +//| Handler of click on the left mouse button | +//+------------------------------------------------------------------+ +bool CButton::OnMouseUp(void) + { +//--- depress the button if it is not fixed + if(m_button.State() && !IS_CAN_LOCK) + m_button.State(false); +//--- call of the method of the parent class + return(CWnd::OnMouseUp()); + } +//+------------------------------------------------------------------+ diff --git a/Controls/CheckBox.mqh b/Controls/CheckBox.mqh new file mode 100644 index 0000000..cf4582b --- /dev/null +++ b/Controls/CheckBox.mqh @@ -0,0 +1,183 @@ +//+------------------------------------------------------------------+ +//| CheckBox.mqh | +//| Copyright 2000-2024, MetaQuotes Ltd. | +//| https://www.mql5.com | +//+------------------------------------------------------------------+ +#include "WndContainer.mqh" +#include "BmpButton.mqh" +#include "Edit.mqh" +//+------------------------------------------------------------------+ +//| Resources | +//+------------------------------------------------------------------+ +#resource "res\\CheckBoxOn.bmp" +#resource "res\\CheckBoxOff.bmp" +//+------------------------------------------------------------------+ +//| Class CCheckBox | +//| Usage: class that implements the "CheckBox" control | +//+------------------------------------------------------------------+ +class CCheckBox : public CWndContainer + { +private: + //--- dependent controls + CBmpButton m_button; // button object + CEdit m_label; // label object + //--- data + int m_value; // value + +public: + CCheckBox(void); + ~CCheckBox(void); + //--- create + virtual bool Create(const long chart,const string name,const int subwin,const int x1,const int y1,const int x2,const int y2); + //--- chart event handler + virtual bool OnEvent(const int id,const long &lparam,const double &dparam,const string &sparam); + //--- settings + string Text(void) const { return(m_label.Text()); } + bool Text(const string value) { return(m_label.Text(value)); } + color Color(void) const { return(m_label.Color()); } + bool Color(const color value) { return(m_label.Color(value)); } + //--- state + bool Checked(void) const { return(m_button.Pressed()); } + bool Checked(const bool flag) { return(m_button.Pressed(flag)); } + //--- data + int Value(void) const { return(m_value); } + void Value(const int value) { m_value=value; } + //--- methods for working with files + virtual bool Save(const int file_handle); + virtual bool Load(const int file_handle); + +protected: + //--- create dependent controls + virtual bool CreateButton(void); + virtual bool CreateLabel(void); + //--- handlers of the dependent controls events + virtual bool OnClickButton(void); + virtual bool OnClickLabel(void); + }; +//+------------------------------------------------------------------+ +//| Common handler of chart events | +//+------------------------------------------------------------------+ +EVENT_MAP_BEGIN(CCheckBox) + ON_EVENT(ON_CLICK,m_button,OnClickButton) + ON_EVENT(ON_CLICK,m_label,OnClickLabel) +EVENT_MAP_END(CWndContainer) +//+------------------------------------------------------------------+ +//| Constructor | +//+------------------------------------------------------------------+ +CCheckBox::CCheckBox(void) : m_value(0) + { + } +//+------------------------------------------------------------------+ +//| Destructor | +//+------------------------------------------------------------------+ +CCheckBox::~CCheckBox(void) + { + } +//+------------------------------------------------------------------+ +//| Create a control | +//+------------------------------------------------------------------+ +bool CCheckBox::Create(const long chart,const string name,const int subwin,const int x1,const int y1,const int x2,const int y2) + { +//--- call method of the parent class + if(!CWndContainer::Create(chart,name,subwin,x1,y1,x2,y2)) + return(false); +//--- create dependent controls + if(!CreateButton()) + return(false); + if(!CreateLabel()) + return(false); +//--- succeeded + return(true); + } +//+------------------------------------------------------------------+ +//| Create button | +//+------------------------------------------------------------------+ +bool CCheckBox::CreateButton(void) + { +//--- calculate coordinates + int x1=CONTROLS_CHECK_BUTTON_X_OFF; + int y1=CONTROLS_CHECK_BUTTON_Y_OFF; + int x2=x1+CONTROLS_BUTTON_SIZE; + int y2=y1+CONTROLS_BUTTON_SIZE-CONTROLS_BORDER_WIDTH; +//--- create + if(!m_button.Create(m_chart_id,m_name+"Button",m_subwin,x1,y1,x2,y2)) + return(false); + if(!m_button.BmpNames("::res\\CheckBoxOff.bmp","::res\\CheckBoxOn.bmp")) + return(false); + if(!Add(m_button)) + return(false); + m_button.Locking(true); +//--- succeeded + return(true); + } +//+------------------------------------------------------------------+ +//| Create label | +//+------------------------------------------------------------------+ +bool CCheckBox::CreateLabel(void) + { +//--- calculate coordinates + int x1=CONTROLS_CHECK_LABEL_X_OFF; + int y1=CONTROLS_CHECK_LABEL_Y_OFF; + int x2=Width(); + int y2=Height(); +//--- create + if(!m_label.Create(m_chart_id,m_name+"Label",m_subwin,x1,y1,x2,y2)) + return(false); + if(!m_label.Text(m_name)) + return(false); + if(!Add(m_label)) + return(false); + m_label.ReadOnly(true); + m_label.ColorBackground(CONTROLS_CHECKGROUP_COLOR_BG); + m_label.ColorBorder(CONTROLS_CHECKGROUP_COLOR_BG); +//--- succeeded + return(true); + } +//+------------------------------------------------------------------+ +//| | +//+------------------------------------------------------------------+ +bool CCheckBox::Save(const int file_handle) + { +//--- check + if(file_handle==INVALID_HANDLE) + return(false); +//--- + FileWriteInteger(file_handle,Checked()); +//--- succeed + return(true); + } +//+------------------------------------------------------------------+ +//| | +//+------------------------------------------------------------------+ +bool CCheckBox::Load(const int file_handle) + { +//--- check + if(file_handle==INVALID_HANDLE) + return(false); +//--- + if(!FileIsEnding(file_handle)) + Checked(FileReadInteger(file_handle)); +//--- succeed + return(true); + } +//+------------------------------------------------------------------+ +//| Handler of click on button | +//+------------------------------------------------------------------+ +bool CCheckBox::OnClickButton(void) + { +//--- send the "changed state" event + EventChartCustom(CONTROLS_SELF_MESSAGE,ON_CHANGE,m_id,0.0,m_name); +//--- handled + return(true); + } +//+------------------------------------------------------------------+ +//| Handler of click on label | +//+------------------------------------------------------------------+ +bool CCheckBox::OnClickLabel(void) + { +//--- change button state + m_button.Pressed(!m_button.Pressed()); +//--- return the result of the button click handler + return(OnClickButton()); + } +//+------------------------------------------------------------------+ diff --git a/Controls/CheckGroup.mqh b/Controls/CheckGroup.mqh new file mode 100644 index 0000000..73395d3 --- /dev/null +++ b/Controls/CheckGroup.mqh @@ -0,0 +1,377 @@ +//+------------------------------------------------------------------+ +//| CheckGroup.mqh | +//| Copyright 2000-2024, MetaQuotes Ltd. | +//| https://www.mql5.com | +//+------------------------------------------------------------------+ +#include "WndClient.mqh" +#include "CheckBox.mqh" +#include +#include +#include +//+------------------------------------------------------------------+ +//| Class CCheckGroup | +//| Usage: view and edit group of flags | +//+------------------------------------------------------------------+ +class CCheckGroup : public CWndClient + { +private: + //--- dependent controls + CCheckBox m_rows[]; // array of the row objects + //--- set up + int m_offset; // index of first visible row in array of rows + int m_total_view; // number of visible rows + int m_item_height; // height of visible row + //--- data + CArrayString m_strings; // array of rows + CArrayLong m_values; // array of values + CArrayInt m_states; // array of states + long m_value; // current value + int m_current; // index of current row in array of rows + +public: + CCheckGroup(void); + ~CCheckGroup(void); + //--- create + virtual bool Create(const long chart,const string name,const int subwin,const int x1,const int y1,const int x2,const int y2); + virtual void Destroy(const int reason=0); + //--- chart event handler + virtual bool OnEvent(const int id,const long &lparam,const double &dparam,const string &sparam); + //--- fill + virtual bool AddItem(const string item,const long value=0); + //--- data + long Value(void) const; + bool Value(const long value); + int Check(const int idx) const; + bool Check(const int idx,const int value); + //--- state + virtual bool Show(void); + //--- methods for working with files + virtual bool Save(const int file_handle); + virtual bool Load(const int file_handle); + +protected: + //--- create dependent controls + bool CreateButton(int index); + //--- handlers of the dependent controls events + virtual bool OnVScrollShow(void); + virtual bool OnVScrollHide(void); + virtual bool OnScrollLineDown(void); + virtual bool OnScrollLineUp(void); + virtual bool OnChangeItem(const int row_index); + //--- redraw + bool Redraw(void); + bool RowState(const int index,const bool select); + }; +//+------------------------------------------------------------------+ +//| Common handler of chart events | +//+------------------------------------------------------------------+ +EVENT_MAP_BEGIN(CCheckGroup) + ON_INDEXED_EVENT(ON_CHANGE,m_rows,OnChangeItem) +EVENT_MAP_END(CWndClient) +//+------------------------------------------------------------------+ +//| Constructor | +//+------------------------------------------------------------------+ +CCheckGroup::CCheckGroup(void) : m_offset(0), + m_total_view(0), + m_item_height(CONTROLS_LIST_ITEM_HEIGHT), + m_current(CONTROLS_INVALID_INDEX), + m_value(0) + { + } +//+------------------------------------------------------------------+ +//| Destructor | +//+------------------------------------------------------------------+ +CCheckGroup::~CCheckGroup(void) + { + } +//+------------------------------------------------------------------+ +//| Create a control | +//+------------------------------------------------------------------+ +bool CCheckGroup::Create(const long chart,const string name,const int subwin,const int x1,const int y1,const int x2,const int y2) + { +//--- determine the number of visible rows + m_total_view=(y2-y1)/m_item_height; +//--- check the number of visible rows + if(m_total_view<1) + return(false); +//--- call method of the parent class + if(!CWndClient::Create(chart,name,subwin,x1,y1,x2,y2)) + return(false); +//--- set up + if(!m_background.ColorBackground(CONTROLS_CHECKGROUP_COLOR_BG)) + return(false); + if(!m_background.ColorBorder(CONTROLS_CHECKGROUP_COLOR_BORDER)) + return(false); +//--- create dependent controls + ArrayResize(m_rows,m_total_view); + for(int i=0;i=m_values.Total()) + return(0); +//--- + return(m_states[idx]); + } +//+------------------------------------------------------------------+ +//| | +//+------------------------------------------------------------------+ +bool CCheckGroup::Check(const int idx,const int value) + { +//--- check + if(idx>=m_values.Total()) + return(false); +//--- + bool res=(m_states.Update(idx,value) && Redraw()); +//--- change value + if(res && idx<64) + { + if(m_rows[idx].Checked()) + Value(m_value|m_values.At(idx)); + else + Value(m_value&(~m_values.At(idx))); + } +//--- + return(res); + } +//+------------------------------------------------------------------+ +//| Makes the group visible | +//+------------------------------------------------------------------+ +bool CCheckGroup::Show(void) + { +//--- call of the method of the parent class + if(!CWndClient::Show()) + return(false); +//--- loop by rows + int total=m_values.Total(); + for(int i=total;i=ArraySize(m_rows)) + return(true); +//--- change state + return(m_rows[index].Checked(select)); + } +//+------------------------------------------------------------------+ +//| Handler of the "Show vertical scrollbar" event | +//+------------------------------------------------------------------+ +bool CCheckGroup::OnVScrollShow(void) + { +//--- loop by "rows" + for(int i=0;i