Привлечь внимание пользователя миганием окна

 

Задача следующая: При возникновении какого-либо события, индикатор должен привлечь внимание пользователя к окну с инструментом на котором он загружен (Оранжевая стрелка показывыает на заголовок окна который должен мигать).


Заголовки окон

Думаю решить таким образом:

//+----------------------------------------------------------------------------------------------+
//|                                                                                              |
//|                                                           Copyright © 2008, Князь Игорь |
//|                                                                                              |
//+----------------------------------------------------------------------------------------------+
#property copyright "Copyright © 2008, Князь Игорь"
#property indicator_chart_window

#import "user32.dll"
   int      FlashWindow(int hWnd,int dwFlags /*bInvert*/);
#import
    
//+----------------------------------------------------------------------------------------------+
//| Функция инициализации                                                              |
//+----------------------------------------------------------------------------------------------+
int init()
  {
  } // init



//+----------------------------------------------------------------------------------------------+
//| Функция завершения                                                                   |
//+----------------------------------------------------------------------------------------------+
int deinit()
  {
  }


//+----------------------------------------------------------------------------------------------+
//| Тело индикатора                                                                       |
//+----------------------------------------------------------------------------------------------+
int start()
  {
     // чего-то проверяется и если надо мигаем на этом тике.
     FlashWindow(WindowHandle(Symbol(), Period()), 1);
  }
  

Все вроде бы должно работать и компилируется без ошибок, но НЕ МИГАЕТ! В чем проблема, помогите разобраться.

 
Ребята, ну может кто поможет?
 

Заголовок показанный стрелочкой не является заголовком окна и указатель полученный через WindowHandle() не имеет к нему никакого отношения

 
Integer >>:

Заголовок показанный стрелочкой не является заголовком окна и указатель полученный через WindowHandle() не имеет к нему никакого отношения

1. А как тогда получить доступ к этой вкладке?

2. Как получить handle окна с нужным инструментом, для вывода его на передний план.

 
////////////////////////////////////////////////////////
//= инициализация
int Set_Init()
{
  if(g_bInit) return (0);
  int pn=0;
  bool pbTesting= false;
  
  //--проверка на тестирование----------------------------------------------
  
  int hTerminalWnd, hMDIClientWnd, hMDIActiveWnd, nMaxCount;
  string sActiveChartName = "определяем системный дескриптор основного окна терминала определяем системный дескриптор основного окна терминала";
  //---- определяем системный дескриптор основного окна терминала
  hTerminalWnd = GetAncestor(WindowHandle(Symbol(), Period()), 2);
  //---- определяем системный дескриптор активного окна
  hMDIClientWnd = GetDlgItem(hTerminalWnd, 0xE900);
  hMDIActiveWnd = SendMessageA(hMDIClientWnd, 0x0229, 0, 0);
  //---- считываем текст из заголовка активного окна
  nMaxCount = GetWindowTextLengthA(hMDIActiveWnd);
  if(nMaxCount>1)
  {
    pn=GetWindowTextA(hMDIActiveWnd, sActiveChartName, nMaxCount+1);
    if(pn>1)
    {
      int pPos=0;
      int pPos2= StringFind(sActiveChartName,"visual",0);
      if(pPos2 > -1) pbTesting= true;
    }
  }
  //тестирование
  g_bTesting= pbTesting;
  
  g_bInit= true;
  return (pn);
} //------------------------------------------------
мож GetDlgItem нужно использовать!? али ещё что!?
 
KI-trader >>:

2. Как получить handle окна с нужным инструментом, для вывода его на передний план.

Посмотрите здесь.

Возможно это то, что Вам нужно.

 
Спасибо, ребята. Буду пробовать...
 
результаты черкни!
 

И так, чего получилось...

Добрался до handle окона с нужной парой, однако мигать вкладки не получилось. Видимо они имеют другой handle. Трудность в поиске по заголовку окна - вкладки и окна имеют одинаковые заголовки. Функция FlashWindow() молча проглатила отданный ей handle и промолчала.

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

Теперь к настройкам:

1. Больше - булевое значение. True - индикатор сработает при цене выше линии индикатора. False - при цене ниже линии индикатора.

2. ОтображатьГрафик - булевое значение. True - индикатор отобразит окно графика где он сработал. False - не будет отображать. Для работы этого параметра необходимо включить в настройках терминала возможность подключения внешних DLL.

3. ЗвуковойФайл - строка, содержащая имя файла, который проиграет инжикатор при срабатывании. Имя файла указывается без разширения (hark = hark.wav).

4. ЦветЛинии - цвет линии индикатора.
5. ИмяИндикатора - прибавка к именам глобальных переменных служит для идентификации различных индикаторов. Однако, требуется только при количестве от трех штук на одном графике. Как правило хватает двух индикаторов для формирования коридора, при выходе из которого необходимо привлечь внимание пользователя. При пустом поле ИмяИндикатора его значение принимается в зависимости от параметра Больше.

Примечание: Замечательно было бы включить в настройках графика отображение описания объектов, тогда линии индикатора будут подписаны для наглядности.


Файлы:
Причина обращения: