Фишка: получение временного масштаба графика (ширина бара в пикселях)

 

Может понадобиться для управления видом/размером объектов на чарте.

int getTimeScalePx()
{
  int h = WindowHandle(Symbol(), Period());
  int rect[4];
  GetWindowRect(h, rect);
  int wW = rect[2] - rect[0]; // ширина окна
  return(MathFloor((wW-48)/WindowBarsPerChart()));
}
Файлы:
 

а если включено смещение графика - оно  не учитывается?

а минус 48 - размер скроллбара? или толщина окна? оно от размера шрифта или чего еще в системе не зависит?

 

А у меня такая "фишка" уже есть :-))

Надо, на всякий случай, проверять на ноль функцию "WindowBarsPerChart()".

 
TedBeer писал(а) >>

а если включено смещение графика - оно не учитывается?

а минус 48 - размер скроллбара? или толщина окна? оно от размера шрифта или чего еще в системе не зависит?

смещение не влияет на результат

-48 - это 5 пикселей которые слева от рамки в окне + 43 пкс, что справа. Наверно можно использовать GetClientRect и не делать поправку.

 
Zhunko писал(а) >>

А у меня такая "фишка" уже есть :-))

Надо, на всякий случай, проверять на ноль функцию "WindowBarsPerChart()".

:-)
Да, Вадим, строго говоря надо.

Не проверяю только потому что в описании WindowBarsPerChart() нет возможного нуля или -1 при ошибке.

Наверно потому, что окно нельзя сжать до нуля.

 
Erics >>:

:-)
Да, Вадим, строго говоря надо.

Не проверяю только потому что в описании WindowBarsPerChart() нет возможного нуля или -1 при ошибке.

Наверно потому, что окно нельзя сжать до нуля.

Проверил, не получается до нуля баров сжать.

 

Вот спасибо!

Этак наверное и автомасштаб для граф.обьектов реализовать можно?

 
Erics >>:

:-)
Да, Вадим, строго говоря надо.

Не проверяю только потому что в описании WindowBarsPerChart() нет возможного нуля или -1 при ошибке.

Наверно потому, что окно нельзя сжать до нуля.

Функция WindowBarsPerChart() однократно возвращает ноль при смене профиля.

 
Ilnur >>:

Функция WindowBarsPerChart() однократно возвращает ноль при смене профиля.

Вот по этому делаю return() в самом начале start() по условию возврата нуля WindowBarsPerChart().

Иначе, у меня всё зацикливается.

 
Ilnur писал(а) >>

Функция WindowBarsPerChart() однократно возвращает ноль при смене профиля.

Во как оказывается.

Перезалил с проверкой на ноль.

 

Чем отличаются эти функции:

#import "user32.dll"
  bool GetWindowRect(int hWnd, int& lpRect[4]);
  int  GetClientRect (int hWnd, int& lpRect[4]);
#import

?

Или это одна и та же?

Причина обращения: