Есть недокументированная функция MessageBoxTimeout().
Она это может.
Есть недокументированная функция MessageBoxTimeout().
Она это может.
Где можно узнать о других недокументированных ф-ях?
Будь добр, покажи пример её использования.
Если не нажата ни-одна кнопка в течении Х секунд - код возврата функции = IDYES
Всё тоже, что с MessageBox(). Только последний параметр указывает сколько миллисекунд будет висеть окно.
Не так всё просто. Эту функцию из MQL4 не просто вызвать. Её нет в заголовочном файле user32.dll.
В С++, чтобы не возиться с динамической загрузкой DLL, я её дописал в инклюд стандартный. Что не рекомендуется.
Проще DLL свою написать с разными диалоговыми окнами, чем в MQL4 с этим возиться.
Хотя, попробуте дописать в инклюд winuser32.mqh эту функцию и вызвать. Интересно, получится ли... Пример у меня в С++:
// 1.3.1. Функция создаёт окно с сообщением и выводит в него любое число. Окно имеет значёк (i). Окно закрывается через указанное количество секунд. template <typename type> void MessageBoxInfo(const tstring &sWindowTitle, // Заголовок окна. const type tNumber, // Сообщение для вывода в окно. const DWORD dwSeconds = 0) // Количество секунд до закрытия окна. { tstringstream ssMessage; ssMessage << tNumber; ::MessageBoxTimeout(NULL, ssMessage.str().c_str(), sWindowTitle.c_str(), MB_OK|MB_ICONINFORMATION|MB_DEFBUTTON1|MB_TASKMODAL|MB_SETFOREGROUND|MB_TOPMOST, NULL, 1000 * dwSeconds); }
Где можно узнать о других недокументированных ф-ях?
Сейчас попробовал, в MQL4 эта недокументированная функция вызывается без проблем. Вот рабочий пример:
#include <WinUser32.mqh> #import "user32.dll" int MessageBoxTimeoutA(int hWnd, string lpText, string lpCaption, int uType, int wLanguageId, int dwMilliseconds); int start() { int result=MessageBoxTimeoutA(0,"Are you ok?","Caption",MB_YESNO,0,1000); Print(result); }
Отлично!
Добавил её в свой WinUser32.mqh. Выложу со следующими обновлениями своих программ в копилке.
Получается, что WinUser32.mqh для MQL4 является таким же заголовочным файлом, как winuser.h для С++. Напрямую в либу MQL4 направляет.
Сейчас попробовал, в MQL4 эта недокументированная функция вызывается без проблем. Вот рабочий пример:
Спасибо, работает. Только пришлось заменить MB_YESNO на 0x00000004 Набор других кнопок в справке по MessageBox они совпадают.
Дальше условие if(result != 6) Print("Кнопка да не нажата");
Какие-то загадки в МТ4, пробовал в отдельном советнике - результат выше.
Сейчас вставил в рабочий советник, работает и с флагами MB_YESNO|MB_ICONQUESTION и IDYES и даже если откомпилировать и перенести на другой комп то работает в таком варианте.
#include <WinUser32.mqh> #import "user32.dll" int start() { int result = MessageBoxTimeoutA(0, "Are you ok?", "Caption",MB_YESNO|MB_ICONQUESTION, 0, 10000); if(result != IDYES) Print("Кнопка да не нажата"); }Вобщем спасибо за помощь.
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Можно-ли и, если да то как, задать время ожидания нажатия кнопки?
Т.е. если пользователь не отреагировал на окно сообщений в течении Х секунд, то закрыть его. Естественно назначив при этом код возврата функции.