Как получить handle to device context? Есть ли ф-ция, позволяющая получить хэндл для графического устройства (битмэпа), подобно тому как мы получаем хэндл окна через WindowHandle().
- о работе функции iCustom или как скопировать буфер индикатора!
- OBJPROP_XDISTANCE, OBJPROP_YDISTANCE - края экрана
- Операции с файлами.
А Вы пробовали API GetDC ?
Вот скрипт который вроде напрямую рисует линию в окне.
Вот скрипт который вроде напрямую рисует линию в окне.
//+------------------------------------------------------------------+ //| HDC.mq4 | //| Jhonny | //| mailto: jhonnyfx@mail.ru | //+------------------------------------------------------------------+ #property copyright "Jhonny" #property link "mailto: jhonnyfx@mail.ru" #import "user32.dll" int GetDC(int HWND); int ReleaseDC(int hWnd,int hDC ); #import "gdi32.dll" bool LineTo(int hdc, int nXEnd, int nYEnd ); int start() { int ScreenDC; ScreenDC= GetDC(WindowHandle(Symbol(),Period())); LineTo(ScreenDC, 100, 200); ReleaseDC(0, ScreenDC); return(0); }
Джонни, спасибо за помощь, все работает.
Джонни, уважаемый, посмотри, пожалуйста, почему у меня линию рисует, а текста не видно?
#import "gdi32.dll"
bool LineTo(int hdc, int x, int y);
bool TextOut(int hdc, int x, int y, string S, int n);
int start() {
int DC, x, y; string S;
DC= GetDC(WindowHandle(Symbol(),Period()));
x= 100; y= 100;
LineTo(DC, x, y);
S= "Ох и попечатаем!";
TextOut(DC, x, y, S, StringLen(S) );
ReleaseDC(0, DC);
bool LineTo(int hdc, int x, int y);
bool TextOut(int hdc, int x, int y, string S, int n);
int start() {
int DC, x, y; string S;
DC= GetDC(WindowHandle(Symbol(),Period()));
x= 100; y= 100;
LineTo(DC, x, y);
S= "Ох и попечатаем!";
TextOut(DC, x, y, S, StringLen(S) );
ReleaseDC(0, DC);
Похоже не получится решить проблемму, дело в том что функция
Если не найдется другой айпи функции(а похоже все они требуют ссылку на строку) способной решить вашу проблему, придется вам самим длл делать, и свои функции писать, тем более и так вы импортируете функции так что еще одна длл погоды не сделает.
BOOL TextOut( HDC hdc, // handle of device context int nXStart, // x-coordinate of starting position int nYStart, // y-coordinate of starting position LPCTSTR lpString, // address of string int cbString // number of characters in string );
Имеет параметр LPCTSTR lpString, // address of string
а это не строка а ссылка на нее, с одной стороны в MQL4 есть возможность оперировать с ссылками, но для библиотечных функций такая возможность не предусмотрена, по крайней мере так написано в справке
Существует возможность передавать параметры по ссылке. В этом случае модификация таких параметров отразится на соответствующих переменных в вызываемой функции, переданных по ссылке. Нельзя передавать по ссылке элементы массивов. Параметры по ссылке можно передавать только в пределах одного модуля, для библиотечных функций такая возможность не предусмотрена. Для того чтобы указать, что параметр передается по ссылке, после типа данных необходимо поставить модификатор &.
Если не найдется другой айпи функции(а похоже все они требуют ссылку на строку) способной решить вашу проблему, придется вам самим длл делать, и свои функции писать, тем более и так вы импортируете функции так что еще одна длл погоды не сделает.
В данном случае для вывода (там где // address of string ) правильно определять параметр string. Передаётся именно ссылка. Посмотрите в ExpertSample.dll пример функции, принимающей строку.
Тут, похоже, другая ошибка. Надо объявлять функцию TextOutA, которая принимает простую строку (в отличие от TextOutW, которая принимает уникодную строку)
Тут, похоже, другая ошибка. Надо объявлять функцию TextOutA, которая принимает простую строку (в отличие от TextOutW, которая принимает уникодную строку)
Всетаки есть значит апи функция принимающая строку, просто в моем описании апи небыло описания расширенных функций только TextOut.
Вот скрип все рисует.
Вот скрип все рисует.
//+------------------------------------------------------------------+ //| HDC.mq4 | //| Jhonny | //| mailto: jhonnyfx@mail.ru | //+------------------------------------------------------------------+ #property copyright "Jhonny" #property link "mailto: jhonnyfx@mail.ru" #import "user32.dll" int GetDC(int HWND); int ReleaseDC(int hWnd,int hDC ); #import "gdi32.dll" bool LineTo(int hdc, int nXEnd, int nYEnd ); bool TextOutA( int hdc, int nXStart,int nYStart,string lpString, int cbString ); int start() { int ScreenDC; ScreenDC= GetDC(WindowHandle(Symbol(),Period())); string Text="TestString"; TextOutA(ScreenDC, 100, 200,Text,StringLen(Text)); ReleaseDC(0, ScreenDC); return(0); }
Да, я заметил, что в логе выскакивает ошибка,
но разбираться не пришлось - проснулся а тут ваши ответы.
Спасибо.
USDJPYm,H4: cannot call function 'TextOut' from dll 'gdi32.dll' (error 127)
но разбираться не пришлось - проснулся а тут ваши ответы.
Спасибо.
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь