OBJ_EDIT_Example

Author: Copyright 2013, MetaQuotes Software Corp.
0 Views
0 Downloads
0 Favorites
OBJ_EDIT_Example
//+------------------------------------------------------------------+
//|                                             OBJ_EDIT_Example.mq4 |
//|                        Copyright 2013, MetaQuotes Software Corp. |
//|                                              http://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright   "Copyright 2013, MetaQuotes Software Corp."
#property link        "http://www.mql5.com"
#property version     "1.00"
#property description "The Expert Advisor creates and controls the OBJ_EDIT object"
#property strict
//+------------------------------------------------------------------+
//| Òèïû êíîïîê                                                      |
//+------------------------------------------------------------------+
enum ENUM_BUTTON_TYPE
  {
   ALIGN_BUTTON=1,
   CORNER_BUTTON=2,
   COORD_BUTTON=3
  };
//--- âõîäíûå ïàðàìåòðû 
input string           InpName="OBJ_Edit_1";        // Èìÿ îáúåêòà
input int              InpX=150;                    // Ðàññòîÿíèå ïî îñè X
input int              InpY=250;                    // Ðàññòîÿíèå ïî îñè Y
input string           InpText="Text";              // Òåêñò îáúåêòà
input string           InpFont="Arial";             // Øðèôò
input int              InpFontSize=14;              // Ðàçìåð øðèôòà
input ENUM_ALIGN_MODE  InpAlign=ALIGN_CENTER;       // Ñïîñîá âûðàâíèâàíèÿ òåêñòà
input bool             InpReadOnly=false;           // Âîçìîæíîñòü ðåäàêòèðîâàòü
input ENUM_BASE_CORNER InpCorner=CORNER_LEFT_UPPER; // Óãîë ãðàôèêà äëÿ ïðèâÿçêè
input color            InpColor=clrNavy;            // Öâåò òåêñòà
input color            InpBackColor=clrIvory;       // Öâåò ôîíà
input color            InpBorderColor=clrOrangeRed; // Öâåò ãðàíèöû
input bool             InpBack=false;               // Îáúåêò íà çàäíåì ïëàíå
input bool             InpSelection=false;          // Âûäåëèòü äëÿ ïåðåìåùåíèé
input bool             InpHidden=false;             // Ñêðûò â ñïèñêå îáúåêòîâ
input long             InpZOrder=0;                 // Ïðèîðèòåò íà íàæàòèå ìûøüþ
//---
#include <ChartObjects\ChartObjectsTxtControls.mqh>
//--- êíîïêà ReadOnly
CChartObjectButton ExtReadOnlyButton;
//--- êíîïêà Selectable
CChartObjectButton ExtSelectableButton;
//--- êíîïêè óïðàâëåíèÿ ñïîñîáîì âûðàâíèâàíèÿ
CChartObjectButton ExtAlignLButton;
CChartObjectButton ExtAlignCButton;
CChartObjectButton ExtAlignRButton;
//--- êíîïêè óïðàâëåíèÿ óãëîì ïðèâÿçêè
CChartObjectButton ExtCornerLUButton;
CChartObjectButton ExtCornerLLButton;
CChartObjectButton ExtCornerRUButton;
CChartObjectButton ExtCornerRLButton;
//--- êíîïêè +- äëÿ êîîðäèíàò x è y
CChartObjectButton ExtCoordIncXButton;
CChartObjectButton ExtCoordDecXButton;
CChartObjectButton ExtCoordIncYButton;
CChartObjectButton ExtCoordDecYButton;
//--- èíôîðìàöèîííûå ïîëÿ
CChartObjectEdit ExtXCoordinateInfo;
CChartObjectEdit ExtYCoordinateInfo;
CChartObjectEdit ExtCornerInfo;
CChartObjectEdit ExtAlignInfo;
CChartObjectEdit ExtReadOnlyInfo;
CChartObjectEdit ExtSelectableInfo;
//---
bool ExtInitialized=false;
long ExtChartWidth=0;
long ExtChartHeight=0;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- îïðåäåëèì ðàçìåðû îêíà
   if(!ChartGetInteger(0,CHART_WIDTH_IN_PIXELS,0,ExtChartWidth))
     {
      Print("Íå óäàëîñü ïîëó÷èòü øèðèíó ãðàôèêà! Êîä îøèáêè = ",GetLastError());
      return(INIT_FAILED);
     }
   if(!ChartGetInteger(0,CHART_HEIGHT_IN_PIXELS,0,ExtChartHeight))
     {
      Print("Íå óäàëîñü ïîëó÷èòü âûñîòó ãðàôèêà! Êîä îøèáêè = ",GetLastError());
      return(INIT_FAILED);
     }
//--- ñîçäàäèì îáúåêò OBJ_EDIT íà ãðàôèêå      
   if(!EditCreate(0,InpName,0,InpX,InpY,250,20,InpText,InpFont,InpFontSize,InpAlign,InpReadOnly,
      InpCorner,InpColor,InpBackColor,InpBorderColor,InpBack,InpSelection,InpHidden,InpZOrder))
     {
      return(INIT_FAILED);
     }
//--- ïîäãîòàâëèâàåì êíîïêè
   PrepareButtons();
   ExtInitialized=true;
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//--- óäàëÿåì îáúåêò OBJ_EDIT ñ ãðàôèêà
   ObjectDelete(0,InpName);
//--- óäàëÿåì èíôîðìàöèîííûå ïîëÿ
   ObjectDelete(0,"edt_xcoord");
   ObjectDelete(0,"edt_ycoord");
   ObjectDelete(0,"edt_corner");
   ObjectDelete(0,"edt_align");
   ObjectDelete(0,"edt_read_only");
   ObjectDelete(0,"edt_selectable");
//--- óäàëÿåì êíîïêè
   ObjectDelete(0,"btn_read_only");
   ObjectDelete(0,"btn_selectable");
//--- óäàëÿåì êíîïêè óïðàâëåíèÿ óãëîì ïðèâÿçêè
   ObjectDelete(0,"btn_corner_left_upper");
   ObjectDelete(0,"btn_corner_left_lower");
   ObjectDelete(0,"btn_corner_right_upper");
   ObjectDelete(0,"btn_corner_right_lower");
//--- óäàëÿåì êíîïêè óïðàâëåíèÿ âûðàâíèâàíèåì
   ObjectDelete(0,"btn_align_left");
   ObjectDelete(0,"btn_align_center");
   ObjectDelete(0,"btn_align_right");
//--- óäàëÿåì êíîïêè óïðàâëåíèÿ êîîðäèíàòàìè
   ObjectDelete(0,"btn_dec_y");
   ObjectDelete(0,"btn_inc_y");
   ObjectDelete(0,"btn_inc_x");
   ObjectDelete(0,"btn_dec_x");
  }
//+------------------------------------------------------------------+
//| ChartEvent function                                              |
//+------------------------------------------------------------------+
void OnChartEvent(const int id,
                  const long &lparam,
                  const double &dparam,
                  const string &sparam)
  {
   int x=0,y=0;
   bool res=true;
//---
   if(!ExtInitialized)
      return;
//---   
   int current_corner=(int)ObjectGetInteger(0,InpName,OBJPROP_CORNER);
   bool inv_coord_corner_mode_x=false;
   bool inv_coord_corner_mode_y=false;
//--- ñïîñîá ïðèðàùåíèÿ êîîðäèíàò ïðè çàäàííîì óãëå ïðèâÿçêè
   switch(current_corner)
     {
      case CORNER_LEFT_LOWER:  {inv_coord_corner_mode_y=true; break;}
      case CORNER_RIGHT_UPPER: {inv_coord_corner_mode_x=true; break;}
      case CORNER_RIGHT_LOWER: {inv_coord_corner_mode_x=true; 
                                inv_coord_corner_mode_y=true; break;}
     }
//--- ñáðîñèì çíà÷åíèå îøèáêè
   ResetLastError();
//--- ïðîâåðêà ñîáûòèÿ íàæàòèÿ íà êíîïêó ìûøè
   if(id==CHARTEVENT_OBJECT_CLICK)
     {
      Comment("CHARTEVENT_CLICK: "+sparam);

      //--- êíîïêà óïðàâëåíèÿ ñâîéñòâîì readonly
      if(sparam=="btn_read_only")
        {
         bool read_only=(bool)ObjectGetInteger(0,InpName,OBJPROP_READONLY);
         read_only=!read_only;
         res=ObjectSetInteger(0,InpName,OBJPROP_READONLY,read_only);
        }
      //--- êíîïêà óïðàâëåíèÿ ñâîéñòâîì selectable
      if(sparam=="btn_selectable")
        {
         bool selectable=(bool)ObjectGetInteger(0,InpName,OBJPROP_SELECTABLE);
         selectable=!selectable;
         res=ObjectSetInteger(0,InpName,OBJPROP_SELECTABLE,selectable);
        }

      //--- êíîïêè óïðàâëåíèÿ ñâîéñòâîì ALIGN îáúåêòà Edit
      if(sparam=="btn_align_left")
        {
         res=ObjectSetInteger(0,InpName,OBJPROP_ALIGN,ALIGN_LEFT);
        }
      if(sparam=="btn_align_center")
        {
         res=ObjectSetInteger(0,InpName,OBJPROP_ALIGN,ALIGN_CENTER);
        }
      if(sparam=="btn_align_right")
        {
         res=ObjectSetInteger(0,InpName,OBJPROP_ALIGN,ALIGN_RIGHT);
        }

      //--- êíîïêè óïðàâëåíèÿ êîîðäèíàòàìè îáúåêòà Edit
      if(sparam=="btn_inc_x")
        {
         ButtonPressed(ExtCoordIncXButton,COORD_BUTTON);
         x=(int)ObjectGetInteger(0,InpName,OBJPROP_XDISTANCE);
         if(!inv_coord_corner_mode_x) x+=20; else x-=20;
         if(x>ExtChartWidth) x=(int)ExtChartWidth;
         if(x<0) x=0;
         res=ObjectSetInteger(0,InpName,OBJPROP_XDISTANCE,x);
         UnSelectButton(ExtCoordIncXButton);
        }
      if(sparam=="btn_dec_x")
        {
         ButtonPressed(ExtCoordDecXButton,COORD_BUTTON);
         x=(int)ObjectGetInteger(0,InpName,OBJPROP_XDISTANCE);
         if(!inv_coord_corner_mode_x) x-=20; else x+=20;
         if(x<0) x=0;
         res=ObjectSetInteger(0,InpName,OBJPROP_XDISTANCE,x);
         UnSelectButton(ExtCoordDecXButton);
        }
      if(sparam=="btn_inc_y")
        {
         ButtonPressed(ExtCoordIncYButton,COORD_BUTTON);
         y=(int)ObjectGetInteger(0,InpName,OBJPROP_YDISTANCE);
         if(!inv_coord_corner_mode_y) y+=20; else y-=20;
         if(y<0) y=0;
         if(y>ExtChartHeight) y=(int)ExtChartHeight;
         res=ObjectSetInteger(0,InpName,OBJPROP_YDISTANCE,y);
         UnSelectButton(ExtCoordIncYButton);
        }
      if(sparam=="btn_dec_y")
        {
         ButtonPressed(ExtCoordDecYButton,COORD_BUTTON);
         y=(int)ObjectGetInteger(0,InpName,OBJPROP_YDISTANCE);
         //         y-=20;
         if(!inv_coord_corner_mode_y) y-=20; else y+=20;
         if(y<0) y=0;
         if(y>ExtChartHeight) y=(int)ExtChartHeight;
         res=ObjectSetInteger(0,InpName,OBJPROP_YDISTANCE,y);
         UnSelectButton(ExtCoordDecYButton);
        }

      //--- êíîïêè óïðàâëåíèÿ óãëîì ãðàôèêà äëÿ ïðèâÿçêè (OBJPROP_CORNER)
      if(sparam=="btn_corner_left_upper")
        {
         res=ObjectSetInteger(0,InpName,OBJPROP_CORNER,CORNER_LEFT_UPPER);
        }
      if(sparam=="btn_corner_left_lower")
        {
         res=ObjectSetInteger(0,InpName,OBJPROP_CORNER,CORNER_LEFT_LOWER);
        }
      if(sparam=="btn_corner_right_upper")
        {
         res=ObjectSetInteger(0,InpName,OBJPROP_CORNER,CORNER_RIGHT_UPPER);
        }
      if(sparam=="btn_corner_right_lower")
        {
         res=ObjectSetInteger(0,InpName,OBJPROP_CORNER,CORNER_RIGHT_LOWER);
        }

      if(!res)
         Print("Íå óäàëîñü èçìåíèòü ïàðàìåòð! Êîä îøèáêè = ",GetLastError());
      else
        {
         ShowInfo(0,InpName);
         ChartRedraw();
        }
     }
  }
//+------------------------------------------------------------------+
//| Ñîçäàåò îáúåêò "Ïîëå ââîäà"                                      |
//+------------------------------------------------------------------+
bool EditCreate(const long             chart_ID=0,               // ID ãðàôèêà
                const string           name="Edit",              // èìÿ îáúåêòà
                const int              sub_window=0,             // íîìåð ïîäîêíà
                const int              x=0,                      // êîîðäèíàòà ïî îñè X
                const int              y=0,                      // êîîðäèíàòà ïî îñè Y
                const int              width=50,                 // øèðèíà
                const int              height=18,                // âûñîòà
                const string           text="Text",              // òåêñò
                const string           font="Arial",             // øðèôò
                const int              font_size=10,             // ðàçìåð øðèôòà
                const ENUM_ALIGN_MODE  align=ALIGN_CENTER,       // ñïîñîá âûðàâíèâàíèÿ
                const bool             read_only=false,          // âîçìîæíîñòü ðåäàêòèðîâàòü
                const ENUM_BASE_CORNER corner=CORNER_LEFT_UPPER, // óãîë ãðàôèêà äëÿ ïðèâÿçêè
                const color            clr=clrBlack,             // öâåò òåêñòà
                const color            back_clr=clrWhite,        // öâåò ôîíà
                const color            border_clr=clrNONE,       // öâåò ãðàíèöû
                const bool             back=false,               // íà çàäíåì ïëàíå
                const bool             selection=false,          // âûäåëèòü äëÿ ïåðåìåùåíèé
                const bool             hidden=true,              // ñêðûò â ñïèñêå îáúåêòîâ
                const long             z_order=0)                // ïðèîðèòåò íà íàæàòèå ìûøüþ
  {
//--- ñáðîñèì çíà÷åíèå îøèáêè
   ResetLastError();
//--- ñîçäàäèì ïîëå ââîäà
   if(!ObjectCreate(chart_ID,name,OBJ_EDIT,sub_window,0,0))
     {
      Print(__FUNCTION__,
            ": íå óäàëîñü ñîçäàòü îáúåêò \"Ïîëå ââîäà\"! Êîä îøèáêè = ",GetLastError());
      return(false);
     }
//--- óñòàíîâèì êîîðäèíàòû îáúåêòà
   ObjectSetInteger(chart_ID,name,OBJPROP_XDISTANCE,x);
   ObjectSetInteger(chart_ID,name,OBJPROP_YDISTANCE,y);
//--- óñòàíîâèì ðàçìåðû îáúåêòà
   ObjectSetInteger(chart_ID,name,OBJPROP_XSIZE,width);
   ObjectSetInteger(chart_ID,name,OBJPROP_YSIZE,height);
//--- óñòàíîâèì òåêñò
   ObjectSetString(chart_ID,name,OBJPROP_TEXT,text);
//--- óñòàíîâèì øðèôò òåêñòà
   ObjectSetString(chart_ID,name,OBJPROP_FONT,font);
//--- óñòàíîâèì ðàçìåð øðèôòà
   ObjectSetInteger(chart_ID,name,OBJPROP_FONTSIZE,font_size);
//--- óñòàíîâèì ñïîñîá âûðàâíèâàíèÿ òåêñòà â îáúåêòå
   ObjectSetInteger(chart_ID,name,OBJPROP_ALIGN,align);
//--- óñòàíîâèì (true) èëè îòìåíèì (false) ðåæèì òîëüêî äëÿ ÷òåíèÿ
   ObjectSetInteger(chart_ID,name,OBJPROP_READONLY,read_only);
//--- óñòàíîâèì óãîë ãðàôèêà, îòíîñèòåëüíî êîòîðîãî áóäóò îïðåäåëÿòüñÿ êîîðäèíàòû îáúåêòà
   ObjectSetInteger(chart_ID,name,OBJPROP_CORNER,corner);
//--- óñòàíîâèì öâåò òåêñòà
   ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr);
//--- óñòàíîâèì öâåò ôîíà
   ObjectSetInteger(chart_ID,name,OBJPROP_BGCOLOR,back_clr);
//--- óñòàíîâèì öâåò ãðàíèöû
   ObjectSetInteger(chart_ID,name,OBJPROP_BORDER_COLOR,border_clr);
//--- îòîáðàçèì íà ïåðåäíåì (false) èëè çàäíåì (true) ïëàíå
   ObjectSetInteger(chart_ID,name,OBJPROP_BACK,back);
//--- âêëþ÷èì (true) èëè îòêëþ÷èì (false) ðåæèì ïåðåìåùåíèÿ ìåòêè ìûøüþ
   ObjectSetInteger(chart_ID,name,OBJPROP_SELECTABLE,selection);
   ObjectSetInteger(chart_ID,name,OBJPROP_SELECTED,selection);
//--- ñêðîåì (true) èëè îòîáðàçèì (false) èìÿ ãðàôè÷åñêîãî îáúåêòà â ñïèñêå îáúåêòîâ
   ObjectSetInteger(chart_ID,name,OBJPROP_HIDDEN,hidden);
//--- óñòàíîâèì ïðèîðèòåò íà ïîëó÷åíèå ñîáûòèÿ íàæàòèÿ ìûøè íà ãðàôèêå
   ObjectSetInteger(chart_ID,name,OBJPROP_ZORDER,z_order);
//--- óñïåøíîå âûïîëíåíèå
   return(true);
  }
//+------------------------------------------------------------------+
//| Ñîçäàåò êíîïêè                                                   |
//+------------------------------------------------------------------+
void PrepareButtons()
  {
//---
   int x0=0;
   int y0=0;
//---
   CreateEdit("xcoord",ExtXCoordinateInfo,x0+8,y0+34,70,20);
   CreateEdit("ycoord",ExtYCoordinateInfo,x0+78,y0+34,70,20);
   CreateEdit("corner",ExtCornerInfo,x0+8,y0+54,140,20);
   CreateEdit("align",ExtAlignInfo,x0+8,y0+74,140,20);

   CreateEdit("read_only",ExtReadOnlyInfo,x0+8+140,y0+54,100,20);
   CreateEdit("selectable",ExtSelectableInfo,x0+8+140,y0+74,100,20);

   CreateButton("read_only",ExtReadOnlyButton,x0+250,y0+55,80,20);
   CreateButton("selectable",ExtSelectableButton,x0+250,y0+75,80,20);
//---
   CreateButton("corner_left_upper",ExtCornerLUButton,x0+10,y0+100,150,20);
   CreateButton("corner_left_lower",ExtCornerLLButton,x0+10,y0+123,150,20);
   CreateButton("corner_right_upper",ExtCornerRUButton,x0+163,y0+100,150,20);
   CreateButton("corner_right_lower",ExtCornerRLButton,x0+163,y0+123,150,20);
//---   
   CreateButton("align_left",ExtAlignLButton,x0+10,y0+150,150,20);
   CreateButton("align_center",ExtAlignCButton,x0+163,y0+150,150,20);
   CreateButton("align_right",ExtAlignRButton,+x0+16+2*150,y0+150,150,20);
//---
   CreateButton("dec_y",ExtCoordDecYButton,x0+413,y0+36,25,25);
   CreateButton("inc_y",ExtCoordIncYButton,x0+413,y0+92,25,25);
   CreateButton("inc_x",ExtCoordIncXButton,x0+441,y0+64,25,25);
   CreateButton("dec_x",ExtCoordDecXButton,x0+385,y0+64,25,25);
//---
   ExtCoordIncXButton.FontSize(15);
   ExtCoordDecXButton.FontSize(15);
   ExtCoordIncYButton.FontSize(15);
   ExtCoordDecYButton.FontSize(15);
//---
   ExtCoordIncXButton.Font("Wingdings");
   ExtCoordDecXButton.Font("Wingdings");
   ExtCoordIncYButton.Font("Wingdings");
   ExtCoordDecYButton.Font("Wingdings");
//---
   ExtCoordIncXButton.Description(CharToString(240));
   ExtCoordDecXButton.Description(CharToString(239));
   ExtCoordIncYButton.Description(CharToString(242));
   ExtCoordDecYButton.Description(CharToString(241));
//--- ïîêàçûâàåì òåêóùèå ñâîéñòâà ñ èìåíåì InpName
   ShowInfo(0,InpName);
  }
//+------------------------------------------------------------------+
//| Ïîêàçûâàåò èíôîðìàöèþ î êîîðäèíàòàõ è ñâîéñòâàõ ïðèâÿçêè         |
//+------------------------------------------------------------------+
void ShowInfo(const long chart_ID,const string name)
  {
   int current_corner=(int)ObjectGetInteger(chart_ID,name,OBJPROP_CORNER);
   int current_align=(int)ObjectGetInteger(chart_ID,name,OBJPROP_ALIGN);
   bool read_only=(bool)ObjectGetInteger(chart_ID,name,OBJPROP_READONLY);
   bool selectable=(bool)ObjectGetInteger(chart_ID,name,OBJPROP_SELECTABLE);
//---
   string sel="selectable=";
   if(selectable) sel+="true"; else sel+="false";
   ExtSelectableButton.State(selectable);
   ExtSelectableInfo.Description(sel);
//---
   string ro="read_only=";
   if(read_only) ro+="true"; else ro+="false";
   ExtReadOnlyButton.State(read_only);
   ExtReadOnlyInfo.Description(ro);
//---
   switch(current_corner)
     {
      case CORNER_LEFT_UPPER:  ButtonPressed(ExtCornerLUButton,CORNER_BUTTON); break;
      case CORNER_LEFT_LOWER:  ButtonPressed(ExtCornerLLButton,CORNER_BUTTON); break;
      case CORNER_RIGHT_LOWER: ButtonPressed(ExtCornerRLButton,CORNER_BUTTON); break;
      case CORNER_RIGHT_UPPER: ButtonPressed(ExtCornerRUButton,CORNER_BUTTON); break;
     }
//---
   switch(current_align)
     {
      case ALIGN_LEFT:        ButtonPressed(ExtAlignLButton,ALIGN_BUTTON); break;
      case ALIGN_CENTER:      ButtonPressed(ExtAlignCButton,ALIGN_BUTTON); break;
      case ALIGN_RIGHT:       ButtonPressed(ExtAlignRButton,ALIGN_BUTTON); break;
     }
//---
   int x=(int)ObjectGetInteger(chart_ID,name,OBJPROP_XDISTANCE);
   int y=(int)ObjectGetInteger(chart_ID,name,OBJPROP_YDISTANCE);
//---
   ExtXCoordinateInfo.Description(IntegerToString(x));
   ExtYCoordinateInfo.Description(IntegerToString(y));
//---
   ExtCornerInfo.Description(EnumToString(ENUM_BASE_CORNER(current_corner)));
   ExtAlignInfo.Description(EnumToString(ENUM_ALIGN_MODE(current_align)));
  }
//+------------------------------------------------------------------+
//| UnSelectButton                                                   |
//+------------------------------------------------------------------+
void UnSelectButton(CChartObjectButton &btn)
  {
   btn.State(false);
   btn.BackColor(clrAliceBlue);
  }
//+------------------------------------------------------------------+
//| Cîçäàåò êíîïêó (îáúåêò òèïà CChartObjectButton)                  |
//+------------------------------------------------------------------+
bool CreateButton(string text,CChartObjectButton &btn,int x0,int y0,int width,int height)
  {
   if(!btn.Create(0,"btn_"+text,0,x0,y0,width,height))
      return(false);
   btn.Font("Verdana");
   btn.FontSize(7);
   StringToUpper(text);
   btn.Description(text);
   btn.State(false);
   UnSelectButton(btn);
//---
   return(true);
  }
//+------------------------------------------------------------------+
//| Cîçäàåò îáúåêò òèïà CChartObjectEdit                             |
//+------------------------------------------------------------------+
bool CreateEdit(string name,CChartObjectEdit &edit,int x0,int y0,int width,int height)
  {
   if(!edit.Create(0,"edt_"+name,0,x0,y0,width,height))
      return(false);
   edit.Font("Verdana");
   edit.FontSize(7);
   edit.BackColor(clrIvory);
   edit.Description("");
   edit.ReadOnly(true);
//---
   return(true);
  }
//+------------------------------------------------------------------+
//| UnselectButtons                                                  |
//+------------------------------------------------------------------+
void UnselectButtons(ENUM_BUTTON_TYPE buttontype)
  {
   switch(buttontype)
     {
      case ALIGN_BUTTON:
        {
         UnSelectButton(ExtAlignLButton);
         UnSelectButton(ExtAlignCButton);
         UnSelectButton(ExtAlignRButton);
         break;
        }
      case CORNER_BUTTON:
        {
         UnSelectButton(ExtCornerLUButton);
         UnSelectButton(ExtCornerLLButton);
         UnSelectButton(ExtCornerRUButton);
         UnSelectButton(ExtCornerRLButton);
         break;
        }
      case COORD_BUTTON:
        {
         UnSelectButton(ExtCoordIncXButton);
         UnSelectButton(ExtCoordDecXButton);
         UnSelectButton(ExtCoordIncYButton);
         UnSelectButton(ExtCoordDecYButton);
         break;
        }
     }
  }
//+------------------------------------------------------------------+
//| ButtonPressed                                                    |
//+------------------------------------------------------------------+
bool ButtonPressed(CChartObjectButton &btn,ENUM_BUTTON_TYPE buttontype)
  {
   UnselectButtons(buttontype);
//---
   bool state=!btn.State();
   btn.State(state);
   if(state)
      btn.BackColor(clrHoneydew);
   else
      btn.BackColor(clrAliceBlue);
//---     
   return(true);
  }
//+------------------------------------------------------------------+

Comments

Markdown supported. Formatting help

Markdown Formatting Guide

Element Markdown Syntax
Heading # H1
## H2
### H3
Bold **bold text**
Italic *italicized text*
Link [title](https://www.example.com)
Image ![alt text](image.jpg)
Code `code`
Code Block ```
code block
```
Quote > blockquote
Unordered List - Item 1
- Item 2
Ordered List 1. First item
2. Second item
Horizontal Rule ---