Hello everyone,
I am not sure how to achieve this ,but should be possible.
Are we supposed to just guess what you want to do here?
Are we supposed to just guess what you want to do here?
Hello again,
I am trying to do something like this. The code works, but the line only will only draw about half way across the first object.
The line is supposed to stop at the boundary of SecondControl.
void ControlPanel() { string FirstControl="PA0",SecondControl="PA1",HLINE="line",VLINE="vline"; string LITELINE="_________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________"; if(ObjectFind(0,FirstControl)<0) { int PA0_Distance_X=0 ,PA0_Distance_Y=0 ,PA0_Size_X=935 ,PA0_Size_Y=980; int PA1_Distance_X=935 ,PA1_Distance_Y=0 ,PA1_Size_X=935 ,PA1_Size_Y=980; int Hline_X=0 ,Hline_Y=100 ,Hline_Size_X=1870 ,Hline_Size_Y=1; ObjectCreate (0,FirstControl,OBJ_RECTANGLE_LABEL,0,0,0); ObjectSetInteger(0,FirstControl,OBJPROP_XDISTANCE,PA0_Distance_X);ObjectSetInteger(0,FirstControl,OBJPROP_YDISTANCE,PA0_Distance_Y); ObjectSetInteger(0,FirstControl,OBJPROP_XSIZE,PA0_Size_X) ;ObjectSetInteger(0,FirstControl,OBJPROP_YSIZE,PA0_Size_Y); ObjectSetInteger(0,FirstControl,OBJPROP_BORDER_TYPE,BORDER_FLAT) ;ObjectSetInteger(0,FirstControl,OBJPROP_BGCOLOR,clrBlack); ObjectSetInteger(0,FirstControl,OBJPROP_COLOR,clrWhite) ;ObjectSetInteger(0,FirstControl,OBJPROP_SELECTABLE,false); ObjectCreate (0,SecondControl,OBJ_RECTANGLE_LABEL,0,0,0); ObjectSetInteger(0,SecondControl,OBJPROP_XDISTANCE,PA1_Distance_X);ObjectSetInteger(0,SecondControl,OBJPROP_YDISTANCE,PA1_Distance_Y); ObjectSetInteger(0,SecondControl,OBJPROP_XSIZE,PA1_Size_X) ;ObjectSetInteger(0,SecondControl,OBJPROP_YSIZE,PA1_Size_Y); ObjectSetInteger(0,SecondControl,OBJPROP_BORDER_TYPE,BORDER_FLAT) ;ObjectSetInteger(0,SecondControl,OBJPROP_BGCOLOR,clrBlack); ObjectSetInteger(0,SecondControl,OBJPROP_COLOR,clrWhite) ;ObjectSetInteger(0,SecondControl,OBJPROP_SELECTABLE,false); ObjectCreate (0,HLINE,OBJ_LABEL,0,0,0); ObjectSetInteger(0,HLINE,OBJPROP_XDISTANCE,Hline_X) ;ObjectSetInteger(0,HLINE,OBJPROP_YDISTANCE,Hline_Y ); ObjectSetInteger(0,HLINE,OBJPROP_XSIZE,Hline_Size_X) ;ObjectSetInteger(0,HLINE,OBJPROP_YSIZE,Hline_Size_Y ); ObjectSetInteger(0,HLINE,OBJPROP_BORDER_TYPE,BORDER_FLAT) ;ObjectSetInteger(0,HLINE,OBJPROP_BGCOLOR,clrWhite); ObjectSetInteger(0,HLINE,OBJPROP_SELECTABLE,false) ;ObjectSetText (HLINE,LITELINE,10,"",clrWhite); } ChartRedraw(0); }
Hello again
Updated code working.
void ControlPanel() { string FirstControl="PA0",SecondControl="PA1",HLINE="line",VLINE="vline"; string LITELINE="______________________________________________________________"; string LITELINE1="|"; if(ObjectFind(0,FirstControl)<0) { int PA0_Distance_X=0 ,PA0_Distance_Y=0 ,PA0_Size_X=935 ,PA0_Size_Y=980; int PA1_Distance_X=935 ,PA1_Distance_Y=0 ,PA1_Size_X=935 ,PA1_Size_Y=980; int Hline_X=3 ,Hline_Y=10 ,Hline_Size_X=0 ,Hline_Size_Y=1; int Vline_X=300 ,Vline_Y=0 ,Vline_Size_X=0 ,Vline_Size_Y=1; ObjectCreate(0,FirstControl,OBJ_RECTANGLE_LABEL,0,0,0); ObjectSetInteger(0,FirstControl,OBJPROP_XDISTANCE,PA0_Distance_X);ObjectSetInteger(0,FirstControl,OBJPROP_YDISTANCE,PA0_Distance_Y); ObjectSetInteger(0,FirstControl,OBJPROP_XSIZE,PA0_Size_X);ObjectSetInteger(0,FirstControl,OBJPROP_YSIZE,PA0_Size_Y); ObjectSetInteger(0,FirstControl,OBJPROP_BORDER_TYPE,BORDER_FLAT);ObjectSetInteger(0,FirstControl,OBJPROP_BGCOLOR,clrBlack); ObjectSetInteger(0,FirstControl,OBJPROP_COLOR,clrWhite);ObjectSetInteger(0,FirstControl,OBJPROP_SELECTABLE,false); ObjectCreate(0,SecondControl,OBJ_RECTANGLE_LABEL,0,0,0); ObjectSetInteger(0,SecondControl,OBJPROP_XDISTANCE,PA1_Distance_X);ObjectSetInteger(0,SecondControl,OBJPROP_YDISTANCE,PA1_Distance_Y); ObjectSetInteger(0,SecondControl,OBJPROP_XSIZE,PA1_Size_X);ObjectSetInteger(0,SecondControl,OBJPROP_YSIZE,PA1_Size_Y); ObjectSetInteger(0,SecondControl,OBJPROP_BORDER_TYPE,BORDER_FLAT);ObjectSetInteger(0,SecondControl,OBJPROP_BGCOLOR,clrBlack); ObjectSetInteger(0,SecondControl,OBJPROP_COLOR,clrWhite);ObjectSetInteger(0,SecondControl,OBJPROP_SELECTABLE,false); ObjectCreate(0,HLINE,OBJ_LABEL,0,0,0);ObjectSetInteger(0,HLINE,OBJPROP_XDISTANCE,Hline_X); ObjectSetInteger(0,HLINE,OBJPROP_YDISTANCE,Hline_Y);ObjectSetText(HLINE,LITELINE,20,"",clrWhite); ObjectCreate(0,VLINE,OBJ_LABEL,0,0,0);ObjectSetInteger(0,VLINE,OBJPROP_XDISTANCE,Vline_X); ObjectSetInteger(0,VLINE,OBJPROP_YDISTANCE,Vline_Y);ObjectSetText(VLINE,LITELINE1,20,"",clrWhite); } ChartRedraw(0); } //+------------------------------------------------------------------+
Hello again
I realize now, sometimes you think it works, after testing your solutions. Debug(variable,emun,etc) create more drama than at times or, expected.
Hello again,
I am trying now to create multiple objects from the one function. I didn't really like my first attempt, and to be honest I thought it was crap.
I would like to know if this approach is possible?
void build() { string Build="Build";int next = 0; // Global variable // OBJPROP_XDISTANCE,OBJPROP_YDISTANCE,OBJPROP_XSIZE,OBJPROP_YSIZE int I[]={10,20,30,40,01,50,60,70,80,02,90,100,110,120,130,03}; // End for Create object int Finish[]={01,02,03,04,05,06,07,08,09}; for(int SHIFT=0; SHIFT<100; SHIFT++) { if(I[SHIFT]==Finish[0]) break; Alert(I[SHIFT]); ObjectCreate(0,Build,OBJ_RECTANGLE_LABEL,0,0,0); ObjectSetInteger(0,Build,OBJPROP_XDISTANCE,DistanceX[0]); ObjectSetInteger(0,Build,OBJPROP_YDISTANCE,DistanceY[0]); ObjectSetInteger(0,Build,OBJPROP_XSIZE,SizeX[10]); ObjectSetInteger(0,Build,OBJPROP_YSIZE,SizeY[10]); ObjectSetInteger(0,Build,OBJPROP_BORDER_TYPE,BORDER_FLAT); ObjectSetInteger(0,Build,OBJPROP_BGCOLOR,clrBlack); ObjectSetInteger(0,Build,OBJPROP_COLOR,clrWhite); ObjectSetInteger(0,Build,OBJPROP_SELECTABLE,false); next++; } }
Hello again,
I got it to a stage now that I can work with.
void ObjectBuild() { string Build[]= { "Build0","Build1","Build2", "Build3","Build4","Build4", "Build6","Build7","Build8" }; int NewPanel=0; int next=0; int Finish[]={01,02,03,04,05,06,07,08,09}; // OBJPROP_XDISTANCE,OBJPROP_YDISTANCE,OBJPROP_XSIZE,OBJPROP_YSIZE,Finish int I[]= { 10,20,30,40,01, 50,60,70,80,02, 90,100,110,120,03, 140,150,160,170,04, 180,190,200,210,05 }; for(int SHIFT=0; SHIFT<24; SHIFT++) { if(I[SHIFT] || Finish[next]) next++; if(next>=24) break; NewPanel++; if(NewPanel>=9) break; ObjectCreate(0,Build[NewPanel],OBJ_RECTANGLE_LABEL,0,0,0); ObjectSetInteger(0,Build[NewPanel],OBJPROP_XDISTANCE,I[SHIFT]); ObjectSetInteger(0,Build[NewPanel],OBJPROP_YDISTANCE,I[SHIFT]); ObjectSetInteger(0,Build[NewPanel],OBJPROP_XSIZE,I[SHIFT]); ObjectSetInteger(0,Build[NewPanel],OBJPROP_YSIZE,I[SHIFT]); ObjectSetInteger(0,Build[NewPanel],OBJPROP_BORDER_TYPE,BORDER_FLAT); ObjectSetInteger(0,Build[NewPanel],OBJPROP_BGCOLOR,clrBlack); ObjectSetInteger(0,Build[NewPanel],OBJPROP_COLOR,clrWhite); ObjectSetInteger(0,Build[NewPanel],OBJPROP_SELECTABLE,false); } }
Hello again,
I got it to a stage now that I can work with.
You're probably going get a whole bunch of errors with that... You can only create one object per string_name and you're calling the create function 24 times with only 9 unique names. It's not real clear what you're trying to accomplish with this, but I assume it's just for learning so here's an similar example for creating a dynamic (random) number of rect-label objects on the chart.
#property indicator_chart_window #include <ChartObjects\ChartObjectsTxtControls.mqh> #include <Arrays\List.mqh> class MyLabelLeftUpper : public CChartObjectRectLabel { protected: static int m_instances; int m_instance; public: MyLabelLeftUpper(){ m_instance= ++m_instances; } virtual bool Create() { string n = "__rect__"+string(m_instance); if(!CChartObjectRectLabel::Create(0,n,0,0,0,125,125)) return false; int xy = m_instance * 15; X_Distance(xy); Y_Distance(xy); BorderType(BORDER_FLAT); BackColor(clrDarkOrange); FontSize(50); Style(STYLE_SOLID); return true; } }; int MyLabelLeftUpper::m_instances=0; class MyLabelRightUpper : public MyLabelLeftUpper { public: virtual bool Create() override { if(!MyLabelLeftUpper::Create()) return false; Corner(CORNER_RIGHT_UPPER); return true; } }; CList list; //+------------------------------------------------------------------+ int OnInit() { srand(_RandomSeed); for(int i=rand()%30+1;i>=0;i--) { MyLabelLeftUpper *rect = new MyLabelLeftUpper; rect.Create(); list.Add(rect); rect = new MyLabelRightUpper; rect.Create(); list.Add(rect); } return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ int start(){ return(0);}
You're probably going get a whole bunch of errors with that... You can only create one object per string_name and you're calling the create function 24 times with only 9 unique names. It's not real clear what you're trying to accomplish with this, but I assume it's just for learning so here's an similar example for creating a dynamic (random) number of rect-label objects on the chart.
Hello again,
Your totally right, the exercise is for learning. I changed the code around, due to the fact the objects being created are all squares. My new attempt below.
Code isn't completed, I am just happy that I have managed to progress a little more.
BTW: I got no errors, just code didn't do the tasks I wanted.
void ObjectBuild() { string Build[]= { "Build0","Build1","Build2", "Build3","Build4","Build4", "Build6","Build7","Build8" }; int NewPanel=0; int D_X[]={0,100,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; int D_Y[]={0,100,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; int X[] ={10,100,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; int Y[] ={10,50,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; for(int SHIFT=0; SHIFT<300; SHIFT++) { if(D_Y[SHIFT]==D_Y[SHIFT]) if(D_X[SHIFT]==D_X[SHIFT]) if(X[SHIFT]==X[SHIFT]) if(Y[SHIFT]==Y[SHIFT]) NewPanel++; if(NewPanel>=9) break; ObjectCreate(0,Build[NewPanel],OBJ_RECTANGLE_LABEL,0,0,0); ObjectSetInteger(0,Build[NewPanel],OBJPROP_XDISTANCE,D_X[SHIFT]); ObjectSetInteger(0,Build[NewPanel],OBJPROP_YDISTANCE,D_Y[SHIFT]); ObjectSetInteger(0,Build[NewPanel],OBJPROP_XSIZE,X[SHIFT]); ObjectSetInteger(0,Build[NewPanel],OBJPROP_YSIZE,Y[SHIFT]); ObjectSetInteger(0,Build[NewPanel],OBJPROP_BORDER_TYPE,BORDER_FLAT); ObjectSetInteger(0,Build[NewPanel],OBJPROP_BGCOLOR,clrBlack); ObjectSetInteger(0,Build[NewPanel],OBJPROP_COLOR,clrWhite); ObjectSetInteger(0,Build[NewPanel],OBJPROP_SELECTABLE,false); } }
Hello again,
These lines of code have nothing to with object create. It has taken me a couple days to figure that out.
if(D_Y[SHIFT]==D_Y[SHIFT]) if(D_X[SHIFT]==D_X[SHIFT]) if(X[SHIFT]==X[SHIFT]) if(Y[SHIFT]==Y[SHIFT])
Hello again,
This code has preformed a bit better than the others, still not functioning correctly.
void ObjectBuild() { string Build[]= { "Build0","Build1","Build2", "Build3","Build4","Build4", "Build6","Build7","Build8" }; int NewPanel=0; int D_X[]={0,623,1242,0,623,1242,0,623,1242}; int D_Y[]={0,0,0,343,343,343,623,623,623}; int X[] ={623,623,623,623,623,623,623,623,623}; int Y[] ={343,343,343,343,343,343,343,343,343}; for(int SHIFT=0; SHIFT<300; SHIFT++) { NewPanel++; if(NewPanel>=9) break; ObjectCreate(0,Build[NewPanel],OBJ_RECTANGLE_LABEL,0,0,0); ObjectSetInteger(0,Build[NewPanel],OBJPROP_XDISTANCE,D_X[SHIFT]); ObjectSetInteger(0,Build[NewPanel],OBJPROP_YDISTANCE,D_Y[SHIFT]); ObjectSetInteger(0,Build[NewPanel],OBJPROP_XSIZE,X[SHIFT]); ObjectSetInteger(0,Build[NewPanel],OBJPROP_YSIZE,Y[SHIFT]); ObjectSetInteger(0,Build[NewPanel],OBJPROP_BORDER_TYPE,BORDER_FLAT); ObjectSetInteger(0,Build[NewPanel],OBJPROP_BGCOLOR,clrBlack); ObjectSetInteger(0,Build[NewPanel],OBJPROP_COLOR,clrWhite); ObjectSetInteger(0,Build[NewPanel],OBJPROP_SELECTABLE,false); } }
- Free trading apps
- Over 8,000 signals for copying
- Economic news for exploring financial markets
You agree to website policy and terms of use
Hello everyone,
I am not sure how to achieve this ,but should be possible.