1. Библиотека.
// 4.2.10. Функция возвращает наличие активности окна графика по его системному дескриптору. В случае успеха функция возвращает TRUE, иначе - FALSE. bool ServiceIsChartActive(int hwndChart); // Системный дескриптор контроллируемого окна графика.2. На форуме было что-то такое. Надо поискать.
Вадим, как впечатление от новых билдов? В библиотеке много править придётся?
Радует то, что скорость нового кода куда выше. Но юникод, конечно, придётся конвертировать (чтоб старые DLL не поправлять).
--
Можно сохранить практически все старые наработки, сделав перекодировочные намордники на DLL-функции. Я пробовал, перекодируется всё за микросекунды, всё летает (учитывая что сам mql-код исполняется быстрей).
принцип прмерно такой:
#import "SoftFX.OneClickTrading.dll" // Creates instance of FDK information provider; // Returns provider guid; // accountServer - string; // input value - should contain the result of AccountServer() function; // Fix for bild 536 //int FdkCreate(int &isServerAllowed[], string accountServer, string terminalCompany, string accountCompany); // ЭТО СТАРАЯ ФУНКЦИЯ. С ANSI-СТРОКАМИ int FdkCreate(int &isServerAllowed[], uchar &accountServer[], uchar &terminalCompany[], uchar &accountCompany[]); // ЭТО Я ЕЁ ПЕРЕОПРЕДЕЛИЛ // Deletes instance of FDK information provider; // handle - int; // input value - should contain the result of FdkCreate function; void FdkDelete(int handle); // Subscribes to FDK level2; // handle - int; // input value - should contain the result of FdkCreate function; // symbol - string; // input value - should contain Symbol name in "CCY1CCY2" format; // depth - int; // input value - should contain a level2 depth to subscribe; // Fix for bild 536 // void FdkSubscribe(int handle, string symbol, int depth); И ТАК ЖЕ ПОСТУПАЮ СО ВСЕМИ ФУНКЦИЯМИ ГДЕ ЕСТЬ ANSI-СТРОКИ В ПАРАМЕТРАХ void FdkSubscribe(int handle, uchar &symbol[], int depth); // Unsubscribes to FDK level2; // handle - int; // input value - should contain the result of FdkCreate function; // symbol - string; // input value - should contain Symbol name in "CCY1CCY2" format; // Fix for bild 536 // void FdkUnsubscribe(int handle, string symbol); void FdkUnsubscribe(int handle, uchar &symbol[]); ...................................... ................. .......... #import
а потом ниже по коду их перегружаю :
int FdkCreate(int &isServerAllowed[], string accountServer, string terminalCompany, string accountCompany) // Вуаля. Теперь из вызывающего кода будет вызываться именно эта функция, { // которая сначала перекодирует строки, а потом уже вызовет старую DLL-функцию uchar aS[], tC[], aC[]; StringToCharArray(accountServer,aS); StringToCharArray(terminalCompany,tC); ///////// здесь перекодировка (однотипная) из юникода в ansi StringToCharArray(accountCompany,aC); ///////// она не сложная и везде одинаковая return FdkCreate(isServerAllowed, aS, tC, aC); // а это вызов функции из DLL } ///////// код получается вполне рабочий. данную DLL с этим самым намордником юзаю без проблем. void FdkSubscribe(int handle, string symbol, int depth) { uchar temp[]; StringToCharArray(symbol,temp); FdkSubscribe(handle, temp, depth); } void FdkUnsubscribe(int handle, string symbol) { uchar temp[]; StringToCharArray(symbol,temp); FdkUnsubscribe(handle, temp); } ///////////////////////////////////// И т.д. и т.п. void FdkGetQuotes(int handle, string symbol, int &SizeBids[], double &Bids[], double &BidVols[], int &SizeAsks[], double &Asks[], double &AskVols[]) { uchar temp[]; StringToCharArray(symbol,temp); FdkGetQuotes(handle, temp, SizeBids, Bids, BidVols, SizeAsks, Asks, AskVols); } void FdkGetBidQuotes(int handle, string symbol, int &SizeBids[], double &Bids[], double &BidVols[]) { uchar temp[]; StringToCharArray(symbol,temp); FdkGetBidQuotes(handle, temp, SizeBids, Bids, BidVols); }
в результате вызывающий код вообще НЕ НУЖДАЕТСЯ НИ В КАКОЙ МОДИФИКАЦИИ.
ПРОСТО КОМПИЛИРУЕТСЯ И РАБОТАЕТ БЫСТРЕЕ ЧЕМ РАНЬШЕ (поскольку сам выполняемый mql-код ускорился)
2. для работы с реестром
Нашел функцию:
#import "user32.dll" int GetParent(int h); int GetTopWindow(int h); int GetAncestor(int,int); int GetDlgItem(int,int); int SendMessageA(int,int,int,int); #import bool fIsWindowActive(){ int tWH=WindowHandle(Symbol(),Period()); int tTWnd=GetAncestor(tWH,2); int hMDICWnd=GetDlgItem(tTWnd,0xE900); int hMDIAWnd=SendMessageA(hMDICWnd,0x0229,0,0); int tWH2=GetDlgItem(hMDIAWnd, 0xE900); return(tWH==tWH2); }
Нашел функцию:
а можешь пояснить по строчно? + константы (у них ведь есть дефайн имена из winapi ?)
а можешь пояснить по строчно? + константы (у них ведь есть дефайн имена из winapi ?)
Бинго!
Бинго!
в смысле ты нашел код но не полностью знаешь его функционал?
----
чего я спрашиваю - думаю что пора бы сделать ветку, посвященную WInApi + Terminal.
и чтоб не копаться в MSDN по этим константам - надеялся на твой быстрый ответ.
1. в смысле ты нашел код но не полностью знаешь его функционал?
----
чего я спрашиваю - думаю что пора бы сделать ветку, посвященную WInApi + Terminal.
и чтоб не копаться в MSDN по этим константам - надеялся на твой быстрый ответ.
1. Да.
Все что на этом форуме сделано по этой теме сделано Ильнуром. Если какие вариации и были, то только после него и на основе его кода.
И еще у меня нет желания становиться мастером WIN API, слишком обширная тема. Если какие задачи возникают, решаются непосредственно по мере их возникновения (и тут же забываютя).
Вадим, как впечатление от новых билдов? В библиотеке много править придётся?
Радует то, что скорость нового кода куда выше. Но юникод, конечно, придётся конвертировать (чтоб старые DLL не поправлять).
--
Можно сохранить практически все старые наработки, сделав перекодировочные намордники на DLL-функции. Я пробовал, перекодируется всё за микросекунды, всё летает (учитывая что сам mql-код исполняется быстрей).
принцип прмерно такой:
а потом ниже по коду их перегружаю :
в результате вызывающий код вообще НЕ НУЖДАЕТСЯ НИ В КАКОЙ МОДИФИКАЦИИ.
ПРОСТО КОМПИЛИРУЕТСЯ И РАБОТАЕТ БЫСТРЕЕ ЧЕМ РАНЬШЕ (поскольку сам выполняемый mql-код ускорился)
Владимир, меня напрягает высокомерное отношение к пользователем. Остальное - ерунда. Справимся :-)
В библиотеках надо будет исправить передачу строковых массивов. И то, не знаю пока, надо ли. Метаквоты так и не объяснили, как им удалось запретить передачу массивов структур их строк :-)) Теперь, ведь, структуры будут.
Подожду релиза. Тогда буду исправлять. Сейчас свою оболочку (приложение, форма) для тестов советника пишу. Так надёжнее и быстрее. Универсальность не нужна. Только СА. А то, достали уже языками разными, глюками старыми и новыми. Вместо работы постоянные бета-тесты МТ4 :-)
Кстати, форма почему-то с каждым днём всё больше похожа на МТ4 :-))
С переходом на юникод проблем не вижу. Все функции со строками у меня в трёх экземплярах:
1. Текущая кодировка проекта. Для проектов С++.
2. ANSI для МТ4.
3. UNICODE для МТ5. Теперь можно будет в МТ4 использовать.
При этом кодировка самого проекта произвольная. Конечно, для юникода лучше в юникоде компилировать. Чтобы все символы можно было использовать.
Использую преобразование кодировки строковых параметров и возвращаемых значений:
1. Текущая кодировка проекта -> текущая кодировка проекта.
2. ANSI -> текущая кодировка проекта.
3. UNICODE -> текущая кодировка проекта.
Получается всё независимо. Т.е. в перспективе надо будет только инклюд исправить. "A" на "W" поменять.
1) если это надо для управления (обработка событий мыши), то я использую такую конструкцию :
//+------------------------------------------------------------------+ #import "user32.dll" int WindowFromPoint(int x,int y); bool GetCursorPos(int& Pos[2]); #import //+------------------------------------------------------------------+ bool IsActive(){int cursor[2]; GetCursorPos(cursor); return(WindowHandle(Symbol(),Period()) == WindowFromPoint(cursor[0],cursor[1])); } //+------------------------------------------------------------------+
если курсор над искомым окном - оно считается активным.
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
1. Здрасте.. вот ищу функцию, которая возвращает является ли график(подокно терминала) активным. Функция, естественно вызавается из MQL программы... может в стандартной Win32 есть, или, может кто подскажет..
2. Еще ищу для работы с реестром, запись, чтение и тд... (ну тут, думаю пояснять не стоит... Мог бы конечно и сам порыться, но раз уж на форум пришлось идти - заодно)
Заранее благодарю)