Is this IMPOSSIBLE to solve???

To add comments, please log in or register
Deanda_Amaral
17
Deanda_Amaral  

Can someone teach me how to solve it to me please?? it is "simple"

I created this code so you guys can test it.

I just want to know why my OnChartEvent() stops working when i drag the "Box".

if you guys check the buttons, you can notice that they stop doing their OnChartEvent() function.


int framex=(int)ObjectGet("Box",OBJPROP_XDISTANCE);
int framey=(int)ObjectGet("Box",OBJPROP_YDISTANCE);
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   Panel(); 
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
ObjectDelete("BUTTON2");
ObjectDelete("BUTTON");
ObjectDelete("Box"); 
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  { }
//+------------------------------------------------------------------+
//| ChartEvent function                                              |
//+------------------------------------------------------------------+
void OnChartEvent(const int id,
                  const long &lparam,
                  const double &dparam,
                  const string &sparam)
  {
//---
  if (CHARTEVENT_OBJECT_CLICK && sparam=="BUTTON")
  {
  ObjectSetInteger(0,"BUTTON2",OBJPROP_STATE,false);
  }
  
   if (CHARTEVENT_OBJECT_CLICK && sparam=="BUTTON2")
  {
  ObjectSetInteger(0,"BUTTON",OBJPROP_STATE,false);
  }

   TrackMove(); 
  }
//+------------------------------------------------------------------+

void Panel()
   {
   if (ObjectCreate(0,"Box",OBJ_RECTANGLE_LABEL,0,0,0))
     {
   ObjectSetInteger(0,"Box",OBJPROP_XDISTANCE,5); 
   ObjectSetInteger(0,"Box",OBJPROP_YDISTANCE,315); 
   ObjectSetInteger(0,"Box",OBJPROP_XSIZE,160); 
   ObjectSetInteger(0,"Box",OBJPROP_YSIZE,270); 
   ObjectSetInteger(0,"Box",OBJPROP_BGCOLOR,clrWhiteSmoke); 
   ObjectSetInteger(0,"Box",OBJPROP_BORDER_TYPE,BORDER_FLAT); 
   ObjectSetInteger(0,"Box",OBJPROP_CORNER,CORNER_LEFT_LOWER); 
   ObjectSetInteger(0,"Box",OBJPROP_COLOR,clrBlack); 
   ObjectSetInteger(0,"Box",OBJPROP_STYLE,STYLE_SOLID);  
   ObjectSetInteger(0,"Box",OBJPROP_BACK,false); 
   ObjectSetInteger(0,"Box",OBJPROP_SELECTABLE,true); 
   ObjectSetInteger(0,"Box",OBJPROP_SELECTED,false); 
   ObjectSetInteger(0,"Box",OBJPROP_HIDDEN,true); 
   ObjectSetInteger(0,"Box",OBJPROP_ZORDER,0);
      }
   
   if (ObjectCreate(0,"BUTTON",OBJ_BUTTON,0,0,0))
      {
   ObjectSetInteger(0,"BUTTON",OBJPROP_XDISTANCE,10); 
   ObjectSetInteger(0,"BUTTON",OBJPROP_YDISTANCE,215); 
   ObjectSetInteger(0,"BUTTON",OBJPROP_XSIZE,70); 
   ObjectSetInteger(0,"BUTTON",OBJPROP_YSIZE,70); 
   ObjectSetInteger(0,"BUTTON",OBJPROP_CORNER,CORNER_LEFT_LOWER); ////
   ObjectSetString(0,"BUTTON",OBJPROP_TEXT,"BUTTON"); 
   ObjectSetString(0,"BUTTON",OBJPROP_FONT,"Arial Bold");  
   ObjectSetInteger(0,"BUTTON",OBJPROP_FONTSIZE,10); 
   ObjectSetInteger(0,"BUTTON",OBJPROP_COLOR,clrBlack); 
   ObjectSetInteger(0,"BUTTON",OBJPROP_BGCOLOR,clrGray);  
   ObjectSetInteger(0,"BUTTON",OBJPROP_BORDER_COLOR,clrBlack);  
   ObjectSetInteger(0,"BUTTON",OBJPROP_BACK,false); //////////////////
   ObjectSetInteger(0,"BUTTON",OBJPROP_STATE,true); /////////////////
   ObjectSetInteger(0,"BUTTON",OBJPROP_SELECTABLE,false); ////////////
   ObjectSetInteger(0,"BUTTON",OBJPROP_SELECTED,false); //////////////
   ObjectSetInteger(0,"BUTTON",OBJPROP_HIDDEN,true); /////////////////
   ObjectSetInteger(0,"BUTTON",OBJPROP_ZORDER,0);/////////////////////
      }
   
   if (ObjectCreate(0,"BUTTON2",OBJ_BUTTON,0,0,0))
      {
   ObjectSetInteger(0,"BUTTON2",OBJPROP_XDISTANCE,90); 
   ObjectSetInteger(0,"BUTTON2",OBJPROP_YDISTANCE,215); 
   ObjectSetInteger(0,"BUTTON2",OBJPROP_XSIZE,70); 
   ObjectSetInteger(0,"BUTTON2",OBJPROP_YSIZE,70); 
   ObjectSetInteger(0,"BUTTON2",OBJPROP_CORNER,CORNER_LEFT_LOWER); ////
   ObjectSetString(0,"BUTTON2",OBJPROP_TEXT,"BUTTON2"); 
   ObjectSetString(0,"BUTTON2",OBJPROP_FONT,"Arial Bold");  
   ObjectSetInteger(0,"BUTTON2",OBJPROP_FONTSIZE,10); 
   ObjectSetInteger(0,"BUTTON2",OBJPROP_COLOR,clrBlack); 
   ObjectSetInteger(0,"BUTTON2",OBJPROP_BGCOLOR,clrGray);  
   ObjectSetInteger(0,"BUTTON2",OBJPROP_BORDER_COLOR,clrBlack);  
   ObjectSetInteger(0,"BUTTON2",OBJPROP_BACK,false); //////////////////
   ObjectSetInteger(0,"BUTTON2",OBJPROP_STATE,false); /////////////////
   ObjectSetInteger(0,"BUTTON2",OBJPROP_SELECTABLE,false); ////////////
   ObjectSetInteger(0,"BUTTON2",OBJPROP_SELECTED,false); //////////////
   ObjectSetInteger(0,"BUTTON2",OBJPROP_HIDDEN,true); /////////////////
   ObjectSetInteger(0,"BUTTON2",OBJPROP_ZORDER,0);/////////////////////
      }
   }

 void TrackMove()
 {
     while(ObjectGetInteger(0,"Box",OBJPROP_SELECTED))
    {
      if(framex!=(int)ObjectGet("Box",OBJPROP_XDISTANCE) || framey!=(int)ObjectGet("Box",OBJPROP_YDISTANCE))
      { 
         framex=(int)ObjectGet("Box",OBJPROP_XDISTANCE);
         framey=(int)ObjectGet("Box",OBJPROP_YDISTANCE);
         
         ObjectSet("BUTTON",OBJPROP_XDISTANCE,5+framex); 
         ObjectSet("BUTTON",OBJPROP_YDISTANCE,-100+framey);
         
         ObjectSet("BUTTON2",OBJPROP_XDISTANCE,85+framex); 
         ObjectSet("BUTTON2",OBJPROP_YDISTANCE,-100+framey);
      }
     Sleep(0);
    }
 }    
Files:
Box.mq4 12 kb
William Roeder
20233
William Roeder  
Deanda_Amaral: I just want to know why my OnChartEvent() stops working when i drag the "Box".

Your OnChartEvent calls TrackMove which never returns.

My GUI EA (for MT4) just waits for the box move to complete (CHARTEVENT_OBJECT_DRAG) and then moves the rest of the GUI
          Indicators: 'Money Manager Graphic Tool' indicator by 'takycard' Forum - Page 6

Deanda_Amaral
17
Deanda_Amaral  
whroeder1:

Your OnChartEvent calls TrackMove which never returns.

My GUI EA (for MT4) just waits for the box move to complete (CHARTEVENT_OBJECT_DRAG) and then moves the rest of the GUI
          Indicators: 'Money Manager Graphic Tool' indicator by 'takycard' Forum - Page 6

I tried to reverse engineer your GUI to apply this that you've  told me on my EA... but i failed miserably.

I'm sorry if I sound ignorant, but i didn't figure out how to do it that you told me to make the TrackMove returns.

I'm a begginer in MQL coding and I'm struggling trying to do it, could you please code it for me (the return code) if it is not to ask too much? Or maybe give me another hint on how to do it...

William Roeder
20233
William Roeder  
I have no trackmove in the code. What part of
   else  if(id == CHARTEVENT_OBJECT_DRAG){
      if(      sparam == "MMGT_RecMov"){
         orgX  = (int) ObjectGet("MMGT_RecMov", OBJPROP_XDISTANCE);
         orgY  = (int) ObjectGet("MMGT_RecMov", OBJPROP_YDISTANCE);
         create_gui();
      }
is unclear. If the selected rectangle is moved, redraw the GUI at the new location.
Deanda_Amaral
17
Deanda_Amaral  

whroeder1:
I have no trackmove in the code. What part of is unclear. If the selected rectangle is moved, redraw the GUI at the new location.

Yeah i get it, your EA does it great, but is it possible to move everything together at the same time and not just later?? Just like the Box does?

I feel like my code is so close to doing it right, but I don't know what is wrong and what can I do to Return TrackMove...

William Roeder
20233
William Roeder  
Deanda_Amaral: but is it possible to move everything together at the same time and not just later?? Just like the Box does?

Box doesn't per your post. There is no mouse down event only click and drag. So you can't see the drag in progress.

I was thinking, click select the object, follow the mouse until unselect. But click, move, click is not mouse down, drag, release.

kypa
1079
kypa  
int OnInit()
  {
   ChartSetInteger(0,CHART_EVENT_MOUSE_MOVE,true);
   Panel(); 
   return(INIT_SUCCEEDED);
  } 

void TrackMove()
 {
      if(framex!=(int)ObjectGet("Box",OBJPROP_XDISTANCE) || framey!=(int)ObjectGet("Box",OBJPROP_YDISTANCE))
      { 
         framex=(int)ObjectGet("Box",OBJPROP_XDISTANCE);
         framey=(int)ObjectGet("Box",OBJPROP_YDISTANCE);
         
         ObjectSet("BUTTON",OBJPROP_XDISTANCE,5+framex); 
         ObjectSet("BUTTON",OBJPROP_YDISTANCE,-100+framey);
         
         ObjectSet("BUTTON2",OBJPROP_XDISTANCE,85+framex); 
         ObjectSet("BUTTON2",OBJPROP_YDISTANCE,-100+framey);
         
         ChartRedraw();
      }
 }  

Treat yourself.

To add comments, please log in or register