Здравствуйте, я пытаюсь создать что-то типо информационной панели, но не знаю как укоротить код, т.е моя панель состоит из множества прямоугольников, и думаю глупо каждый описывать вот так:
может можно как то в строку или... не знаю, как то упростить, просто таких блоков у меня как минимум 25, и занимает тонны текста, или так все делают!? Спасибо
Для начала итак пойдет
Потом когда наберетесь опыта, можете вынести этот код в отдельную функцию. и вызывать ее с своими параметрами
например потом можно сделать так (из справки)
//+------------------------------------------------------------------+ //| Cоздает прямоугольник по заданным координатам | //+------------------------------------------------------------------+ bool RectangleCreate(const long chart_ID=0, // ID графика const string name="Rectangle", // имя прямоугольника const int sub_window=0, // номер подокна datetime time1=0, // время первой точки double price1=0, // цена первой точки datetime time2=0, // время второй точки double price2=0, // цена второй точки const color clr=clrRed, // цвет прямоугольника const ENUM_LINE_STYLE style=STYLE_SOLID, // стиль линий прямоугольника const int width=1, // толщина линий прямоугольника const bool fill=false, // заливка прямоугольника цветом const bool back=false, // на заднем плане const bool selection=true, // выделить для перемещений const bool hidden=true, // скрыт в списке объектов const long z_order=0) // приоритет на нажатие мышью { //--- установим координаты точек привязки, если они не заданы ChangeRectangleEmptyPoints(time1,price1,time2,price2); //--- сбросим значение ошибки ResetLastError(); //--- создадим прямоугольник по заданным координатам if(!ObjectCreate(chart_ID,name,OBJ_RECTANGLE,sub_window,time1,price1,time2,price2)) { Print(__FUNCTION__, ": не удалось создать прямоугольник! Код ошибки = ",GetLastError()); return(false); } //--- установим цвет прямоугольника ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr); //--- установим стиль линий прямоугольника ObjectSetInteger(chart_ID,name,OBJPROP_STYLE,style); //--- установим толщину линий прямоугольника ObjectSetInteger(chart_ID,name,OBJPROP_WIDTH,width); //--- включим (true) или отключим (false) режим заливки прямоугольника ObjectSetInteger(chart_ID,name,OBJPROP_FILL,fill); //--- отобразим на переднем (false) или заднем (true) плане ObjectSetInteger(chart_ID,name,OBJPROP_BACK,back); //--- включим (true) или отключим (false) режим выделения прямоугольника для перемещений //--- при создании графического объекта функцией ObjectCreate, по умолчанию объект //--- нельзя выделить и перемещать. Внутри же этого метода параметр selection //--- по умолчанию равен true, что позволяет выделять и перемещать этот объект 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); }
а потом вызов будет такой:
RectangleCreate(0,InpName,0,date[d1],price[p1],date[d2],price[p2],InpColor,InpStyle,InpWidth,InpFill,InpBack,InpSelection,InpHidden,InpZOrder);
Одной строкой.
Я бы вот так сделал, так как пишу для себя мне так удобнее.))) Хотя пример выше, правильнее и красивее, ну я колхоз мне можно))
for(int i=0;i<=24;i++) { string name=IntegerToString(i); int y = 60+i; ObjectCreate(0,name,OBJ_RECTANGLE_LABEL,0,0,0); ObjectSetInteger(0,name, OBJPROP_SELECTABLE, false); ObjectSetInteger(0,name,OBJPROP_XDISTANCE,23); ObjectSetInteger(0,name,OBJPROP_YDISTANCE,y); ObjectSetInteger(0,name,OBJPROP_WIDTH,0); ObjectSetInteger(0,name,OBJPROP_XSIZE,288); ObjectSetInteger(0,name,OBJPROP_YSIZE,30); ObjectSetInteger(0,name,OBJPROP_BGCOLOR,C'245,244,246'); ObjectSetInteger(0,name,OBJPROP_CORNER,0); ObjectSetInteger(0,name,OBJPROP_BACK,false); }
Я бы вот так сделал, так как пишу для себя мне так удобнее.))) Хотя пример выше, правильнее и красивее, ну я колхоз мне можно))
Спасибо, а если у меня размеры цвет разные?
Для начала итак пойдет
Потом когда наберетесь опыта, можете вынести этот код в отдельную функцию. и вызывать ее с своими параметрами
например потом можно сделать так (из справки)
а потом вызов будет такой:
Одной строкой.
Спасибо)
Спасибо, а если у меня размеры цвет разные?
ну если начал колхозить то колхозить до конца)) через if выставлю параметры какие мне надо.)))
for(int i=0;i<=24;i++) { string name=IntegerToString(i); int y = 60+i; color Colors;// = "clrRed"; int xsize,ysize; if(i==0) { Colors = clrRed; xsize=288; ysize=30; } if(i==1) { Colors = clrAqua; xsize=250; ysize=50; } ObjectCreate(0,name,OBJ_RECTANGLE_LABEL,0,0,0); ObjectSetInteger(0,name, OBJPROP_SELECTABLE, false); ObjectSetInteger(0,name,OBJPROP_XDISTANCE,23); ObjectSetInteger(0,name,OBJPROP_YDISTANCE,y); ObjectSetInteger(0,name,OBJPROP_WIDTH,0); ObjectSetInteger(0,name,OBJPROP_XSIZE,xsize); ObjectSetInteger(0,name,OBJPROP_YSIZE,ysize); ObjectSetInteger(0,name,OBJPROP_BGCOLOR,Colors); ObjectSetInteger(0,name,OBJPROP_CORNER,0); ObjectSetInteger(0,name,OBJPROP_BACK,false); }
Конечно я шучу - этот пример не куда не годится, это пример КАК НЕ НАДО ПИСАТЬ. Воспользуйтесь примером из справки, отдельную функцию, и вызывать с отдельными параметрами когда вам необходимо.
Здравствуйте, я пытаюсь создать что-то типо информационной панели, но не знаю как укоротить код, т.е моя панель состоит из множества прямоугольников, и думаю глупо каждый описывать вот так:
может можно как то в строку или... не знаю, как то упростить, просто таких блоков у меня как минимум 25, и занимает тонны текста, или так все делают!? Спасибо
Если хотите УПРОСТИТЬ, то ничего делать не надо, всё и так упрощено, ибо самый простой алгоритм - линейный! И если экран большой, а шрифт маленький, и времени на комментарии не жалко - то неудобства минимальны.
Если хотите УКОРОТИТЬ, например, чтобы легче понималась основная линия алгоритма, то второстепенные детали (и не обязательно даже повторяющиеся) нужно выносить в функции (процедуры).
При этом например алгоритм рисования района города будет выглядеть как:
Улица; Улица; Площадь; Улица;
А алгоритм рисования улицы, например:
Дом; Дом; Дорога; Дом; Дом;
И только алгоритмы рисования дома и дороги будут содержать в себе вызовы графических примитивов для рисования линий, прямоугольников и прочего.
Чем сложнее общий алгоритм, тем обычно большее количество уровней детализации приходится использовать, но обычно ограничиваются 2-4 уровнями.
не знаю, как то упростить, просто таких блоков у меня как минимум 25, и занимает тонны текста, или так все делают!?
Начните упрощение с постановки задачи: сейчас вам нужен функционал для рисования таблицы + возможность управлять ячейками в ней
Года 3 тому тоже хотел упростить это же самое. На сегодня упрощённый вариант содержит 400+ строк кода
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
может можно как то в строку или... не знаю, как то упростить, просто таких блоков у меня как минимум 25, и занимает тонны текста, или так все делают!? Спасибо