Вопрос, как сделать так, чтобы список подстраивался под размер окна, сейчас оно меняется, но список идёт на уменьшение.
В коде изменил размер списка:
//+------------------------------------------------------------------+//| Create the "ListView" element |//+------------------------------------------------------------------+bool CControlsDialog::CreateListView()
{
//--- coordinatesint x1=0;
int y1=0;
int x2=ClientAreaWidth();
int y2=ClientAreaHeight();//--- createif(!m_list_view.Create(m_chart_id,m_name+"ListView",m_subwin,x1,y1,x2,y2))
return(false);
if(!Add(m_list_view))
return(false);
//--- fill out with stringsfor(int i=0; i<16; i++)
if(!m_list_view.AddItem("Item "+IntegerToString(i)))
return(false);
//--- succeedreturn(true);
}
-------------
В код добавил:
voidOnChartEvent(constint id, // event IDconstlong& lparam, // event parameter of the long typeconstdouble& dparam, // event parameter of the double typeconststring& sparam) // event parameter of the string type
{
ExtDialog.ChartEvent(id,lparam,dparam,sparam);
//--- keypressif(id==CHARTEVENT_KEYDOWN)
{
switch((int)lparam)
{
case KEY_NUMPAD_5:
Print("Pressed KEY_NUMPAD_5");
ExtDialog.Resize();
break;
default:
Print("Pressed unlisted key");
}
}
/*//--- left-clicking on a chart
if(id==CHARTEVENT_CLICK)
ExtDialog.Resize();*/if(id==CHARTEVENT_CHART_CHANGE)
{
if(ExtDialog.Height()>40) // Если окно не свёрнуто
{
ExtDialog.Height((int)ChartGetInteger(0,CHART_HEIGHT_IN_PIXELS)-50); // Изменим высоту диалог-окна
ExtDialog.Resize();
}
}
}
----
Осталось только сделать перерисовку контента по высоте, исходя из количества элементов. Эту задачу осилить не могу.
Попробуйте изменённый мной код, там совсем малость.
----
Осталось только сделать перерисовку контента по высоте, исходя из количества элементов. Эту задачу осилить не могу.
Может не нужно динамический? сделать 5 типоразмеров панели, и в зависимости от размера панели менять величину шрифта контента. Здесь вроде относительные проценты по ширине / высоте не работают, а шрифты задаются явно.
Может не нужно динамический? сделать 5 типоразмеров панели, и в зависимости от размера панели менять величину шрифта контента. Здесь вроде относительные проценты по ширине / высоте не работают, а шрифты задаются явно.
Это не то. Не могу сказать за других, но мне в крупный шрифт смотреть тяжело - не читабельно совсем. При этом, если увеличивать шрифт, то строка растянется по длине, а это так-же не нормально.
Что нужно конкретно от панели:
Есть 5 открытых позиций, высота графика 400. Каждая строка забирает 20, итого 5*20=100
Высота окна графика 400, значит выводим в диалог-окне 5 позиций без скролла, то есть - все будут видимые.
Открылись ещё 15 позиций+5 текущих, итого нужна ширина 20*20=400.
У нас ширина графика 400, места нужно 400, значит выводим все без скролла - видимые.
Открылось ещё 5 позиций: 25*20=500. Но места у нас всего 400, значит остальные 5 прячем за скроллом.
Если меняем окно графика в большую сторону, то показываем столько, сколько возможно, если окно графика по высоте стянули до 100, то показываем 100/20=5, то есть 5 позиций, остальные за скроллом.
Задача не сложная вроде, но как реализовать вывод позиций. Само окно менять по высоте возможно, что показано в коде
if(id==CHARTEVENT_CHART_CHANGE)
{
if(ExtDialog.Height()>40) // Если окно не свёрнуто
{
ExtDialog.Height((int)ChartGetInteger(0,CHART_HEIGHT_IN_PIXELS)-50); // Изменим высоту диалог-окна// ExtDialog.Resize();
}
}
}
Не корректно задал вопрос.
Вопрос, как сделать так, чтобы список подстраивался под размер окна, сейчас оно меняется, но список идёт на уменьшение.
В коде изменил размер списка:
-------------
В код добавил:
Не знаю, по моему панели - они вообще не динамические.
Не знаю, по моему панели - они вообще не динамические.
Попробуйте изменённый мной код, там совсем малость.
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
Советники: All information about the symbol 2
Vitaly Muzichenko, 2021.02.23 13:06
Не корректно задал вопрос.
Вопрос, как сделать так, чтобы список подстраивался под размер окна, сейчас оно меняется, но список идёт на уменьшение.
В коде изменил размер списка:
-------------
В код добавил:
----
Осталось только сделать перерисовку контента по высоте, исходя из количества элементов. Эту задачу осилить не могу.
Попробуйте изменённый мной код, там совсем малость.
----
Осталось только сделать перерисовку контента по высоте, исходя из количества элементов. Эту задачу осилить не могу.
Может не нужно динамический? сделать 5 типоразмеров панели, и в зависимости от размера панели менять величину шрифта контента. Здесь вроде относительные проценты по ширине / высоте не работают, а шрифты задаются явно.
Может не нужно динамический? сделать 5 типоразмеров панели, и в зависимости от размера панели менять величину шрифта контента. Здесь вроде относительные проценты по ширине / высоте не работают, а шрифты задаются явно.
Это не то. Не могу сказать за других, но мне в крупный шрифт смотреть тяжело - не читабельно совсем. При этом, если увеличивать шрифт, то строка растянется по длине, а это так-же не нормально.
Что нужно конкретно от панели:
Есть 5 открытых позиций, высота графика 400. Каждая строка забирает 20, итого 5*20=100
Высота окна графика 400, значит выводим в диалог-окне 5 позиций без скролла, то есть - все будут видимые.
Открылись ещё 15 позиций+5 текущих, итого нужна ширина 20*20=400.
У нас ширина графика 400, места нужно 400, значит выводим все без скролла - видимые.
Открылось ещё 5 позиций: 25*20=500. Но места у нас всего 400, значит остальные 5 прячем за скроллом.
Если меняем окно графика в большую сторону, то показываем столько, сколько возможно, если окно графика по высоте стянули до 100, то показываем 100/20=5, то есть 5 позиций, остальные за скроллом.
Задача не сложная вроде, но как реализовать вывод позиций. Само окно менять по высоте возможно, что показано в коде
---
Осталось изменить вывод содержимого
Ваш код крутил по-разному - ничего не получилось (
Очень надеюсь на ответ!
Запустите индикатор, потом растяните график по высоте и смените таймфрейм, строки заполнятся "как нужно"
После этого сожмите график и снова переключите таймфрейм - всё станет "как нужно"
Теперь вопрос: Что добавить в код, чтобы работало по событию CHARTEVENT_CHART_CHANGE, а не по смене таймфрейма?
Код прилагаю:
Решил то, что хотел, немного кривое решение, но работает как предполагалось.
В панель можно подставлять любые данные, сейчас вывод спреда по первым 20 инструментам с общего списка MarketWatch
---
Если есть более ровное решение, буду рад его принять.
Всем спасибо!
Смена таймфрейма - это полное пересоздание. И похоже пока самое надежное, о чем я говорил в самом начале.
Ну другой способ не нашёл, чтобы работало как хочется.
Конечно, то что панель уходит на первоначальное место, а не стоит куда поставили - нехорошо, но увы.
---
P.S. Подскажите, где выставить значение, чтобы при сворачивании она была ниже, а то сейчас "лезет" под кнопки
В раскрытом виде нормальное позиционирование:
В свёрнутом сильно высоко - нужно чем-то опустить:
Ну другой способ не нашёл, чтобы работало как хочется.
Конечно, то что панель уходит на первоначальное место, а не стоит куда поставили - нехорошо, но увы.
---
P.S. Подскажите, где выставить значение, чтобы при сворачивании она была ниже, а то сейчас "лезет" под кнопки
В раскрытом виде нормальное позиционирование:
В свёрнутом сильно высоко - нужно чем-то опустить:
Вот здесь что-то было:
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
Советники: Open Close Panel 2 Reverse
Vladimir Karputov, 2020.05.26 16:17
Панель версии 2.002 - благодаря статье
Как создать графическую панель любой сложности и как это работает теперь при запуске и при сворачивании не закрывается кнопками быстрой торговли
Вот эти строки: