Как програмно перезагрузить чарт? - страница 2

 
IgRU4ek:
HELP! Как програмно из советника перезагрузить (удалить - восстановить) соседнее окно графика, тем самым произвести переинициализации группы индикаторов, находящихся в нём?

Так же необходимо переодически "передергивать затвор", но решение, мне кажется проще реализовать кратковременным, периодическим переключением ТФ, в нужном окне. Все индикаторы обновятся одним махом.

 
Zhunko:
Рефреш не обновляет окно. Она только котировки обновляет для эксперта или индикатора. Там есть особенность. Каждый эксперт работает со своей копией таймсерии... и т.д. В справке есть про это. 
Refresh вызывает также и start() индикатора.
 
RekkeR:
Так же необходимо переодически "передергивать затвор", но решение, мне кажется проще реализовать кратковременным, периодическим переключением ТФ, в нужном окне. 
Да, это оптимально для ПЕРЕИНИЦИАЛИЗАЦИИ.
 
Я про такой способ сам "догадался" и оставил его напоследок, так как эту перезагрузку через init() в start() нужно прописывать во всех индюках (их 7 штук). И мне показалось более изящным выполнить переинициализацию сразу всех индюков черезе удалить\восстановить чарт. Шаблон использовать не подойдёт, так как шаблон подразумевает конкретные настройки у индюков, а они приперезагрузке могут (не факт) поменяться.
Так как мне после удаления окна, выбрав его из списка удалённых, опять его восстановить???
 
hrenfx:
Да, это оптимально для ПЕРЕИНИЦИАЛИЗАЦИИ.
А как реализовать, чтобы с заданной в тиках или времени периодичностью, происходило переключение ТФ?
 
IgRU4ek:
Я про такой способ сам "догадался" и оставил его напоследок, так как эту перезагрузку через init() в start() нужно прописывать во всех индюках (их 7 штук). И мне показалось более изящным выполнить переинициализацию сразу всех индюков черезе удалить\восстановить чарт. Шаблон использовать не подойдёт, так как шаблон подразумевает конкретные настройки у индюков, а они приперезагрузке могут (не факт) поменяться.
Так как мне после удаления окна, выбрав его из списка удалённых, опять его восстановить???
Как раз, более изящно прописать инит в старте. Всего 7 раз. И после этого ничего не надо.
 

Переключение TF тоже не совсем корректно, потому, что в каждом из упомянутых индикаторов стоит проверка на наличие файла, из которого эти индюки получают информацию, а такого файла на соседнем TF нет... :(

А эта проверка вызовет кучу Alert()! что тоже отключаемо, но может всё-таки лучше через удалить\восстановить? Или такого решения нет?

 
hrenfx:
Да, это оптимально для ПЕРЕИНИЦИАЛИЗАЦИИ.
100%
 
IgRU4ek:
Так как мне после удаления окна, выбрав его из списка удалённых, опять его восстановить???
#import "user32.dll"
 int PostMessageA( int hWnd, int Msg, int wParam, int lParam );
 int GetAncestor( int hWnd, int gaFlags );
#import

#define WM_COMMAND 0x0111
#define GA_ROOT 2

// Открывает окно удаленного графика с номером NumChart (нумерация с нуля)
void OpenDeletedChart( int NumChart )
{
  int hwnd = WindowHandle(Symbol(), Period());
 
  hwnd = GetAncestor(hwnd, GA_ROOT);
  
  NumChart += 35000;
  
  PostMessageA(hwnd, WM_COMMAND, NumChart, 0);
  
  return;
}
 

Для решения озвученного мной вопроса, с учётом дополнительных ограничений, влияющих на удобство пользования тем, что должно получитсься, всё-таки вероятны ДВА варианта:
1) это при наступлении определённых условий каждому индикатору самому по очереди произвести init() из start(). Что-то мне подсказывает, что это не самый лучший вариант.
2) это, всё-таки, командой из советника, стоящего на соседнем чарте, произвеcти програмную операцию, состоящую из двух частей: сначала удалить график с индикаторами, а затем, выбрав его из списка удалённых, восстановить это окно с индикаторами. Чтобы добиться принудительной ПЕРЕИНИЦИАЛИЗАЦИИ сразу всех индюков на этом чарте.

Удаление графика я уже организовал с помощью функции Вадима:

// 3. Функция закрывает указанное окно графика. В случае успеха функция возвращает TRUE, иначе - FALSE.
bool ServiceCloseChart(int hChart); // Системный дескриптор закрываемого окна графика.
Кто-нибудь подскажет как осуществить вторую часть опрерации - восстановить удалённое окно???
Причина обращения: