Have you considered ObjectSetInteger() and the option OBJPROP_BACK (bool) = Object in the background?
Thanks for the reply gooly. Unfortunately, it gives exactly the same result:
#property strict #property indicator_chart_window int OnInit() { string name="Rectangle Label"; ObjectCreate(0,name,OBJ_RECTANGLE_LABEL,0,0,0); ObjectSetInteger(0, name, OBJPROP_BGCOLOR, clrWhite); ObjectSetInteger(0, name, OBJPROP_XDISTANCE,100); ObjectSetInteger(0, name, OBJPROP_YDISTANCE,100); ObjectSetInteger(0, name, OBJPROP_XSIZE, 50); ObjectSetInteger(0, name, OBJPROP_YSIZE, 50); ObjectSetInteger(0, name, OBJPROP_ZORDER, 0); ObjectSetInteger(0, name, OBJPROP_BACK, true); name="Label"; ObjectCreate(0,name,OBJ_LABEL,0,0,0); ObjectSetInteger(0, name, OBJPROP_COLOR, clrMagenta); ObjectSetInteger(0, name, OBJPROP_XDISTANCE,80); ObjectSetInteger(0, name, OBJPROP_YDISTANCE,110); ObjectSetString (0, name, OBJPROP_TEXT, "Some Text"); ObjectSetInteger(0, name, OBJPROP_ZORDER, 100); ObjectSetInteger(0, name, OBJPROP_BACK, false); return(INIT_SUCCEEDED);} void OnDeinit(const int reason) { ObjectDelete(0,"Rectangle Label"); ObjectDelete(0,"Label");} int OnCalculate(const int rates_total, const int prev_calculated, const datetime &time[], const double &open[], const double &high[], const double &low[], const double &close[], const long &tick_volume[], const long &volume[], const int &spread[]) { return(rates_total);} void OnChartEvent(const int id, const long& lparam, const double& dparam, const string& sparam) { if(id==CHARTEVENT_OBJECT_CLICK) { long z=ObjectGetInteger(0,sparam,OBJPROP_ZORDER); printf("I am %s, my z-order is %i",sparam,z);}}
Thanks for the reply. That may be the case, but sadly I have not found anywhere in the documentation what the hierarchy of objects is.
Also, the zorder seems to be working between certain object types.
For example, Labels over Rectangle Labels, the rectangle label always wins.
Buttons over Rectangle Labels, the zorder system works correctly (even though they are different object types).
OBJPROP_ZORDER | Priority of a graphical object for receiving events of clicking on a chart (CHARTEVENT_CLICK). The default zero value is set when creating an object; the priority can be increased if necessary. When applying objects one over another, only one of them with the highest priority will receive the CHARTEVENT_CLICK event. | long |
Hi,
very interesting thread! Has anybody a solution for that Problem?
Hi,
very interesting thread! Has anybody a solution for that Problem?
It's a mql4 bug (tested with build 765). The same code works well with mql5.
Bugs have to be reported to ServiceDesk.
Still not solve this bug?
I am troubled by the same bug while I creating my Virtul Trade System.
It cost me 1 hour to try to find out WHY , untile I find this article.
I give up WHY and try to find HOW.Wana make a label with background? Just use two label with different ZOder,and a character string like this "█". Do not forget to set font to NULL.
Now I got every Order Label with background.
Hello please replace the OBJ_RECTANGLE with OBJ_BUTTON and set the OBJPROP_ZORDER lower priority then the button you want clickable.
Also first create the background and then the foreground so that the object you want to be clickable is created last so its stacked on top.
- Free trading apps
- Over 8,000 signals for copying
- Economic news for exploring financial markets
You agree to website policy and terms of use
I have noticed that Rectangle Labels receive click priority over Labels, irrespective to the z-order assignment. Is this behavior deliberate?
This can be seen by creating a rectangle label with z-order 0, which partially overlaps a label with z-order 100.
When clicking on the "So" text not over the rectangle label:
When clicking on the "e Text" text over the rectangle label:
So the higher z-order of the label is being ignored when it overlaps a rectangle label.