007wan |
Отправлено: 23 Мая, 2019 - 11:10:32
|
Эксперт
Покинул форум
Сообщений всего: 1837
Дата рег-ции: Март 2017
Репутация: -2
|
007wan пишет: прямоугольник, стили штриховки,функция GetFocus,HiliteMenuItem. Как использовать? Прямоугольник имеется ввиду, что есть функция, которая рисует его, раньше стояла функция Line, но хочу заменить на эту. Хочу посмотреть на примере функции GetFocus, HiliteMenuItem(подсвечивает строчку), а так же стили штриховки. |
|
|
Zireael |
Отправлено: 23 Мая, 2019 - 12:08:39
|
Эксперт
Покинул форум
Сообщений всего: 4468
Дата рег-ции: Нояб. 2017
Репутация: 585
|
Цитата: на примере функции GetFocus
code (Отобразить)CODE:#define WS_VISIBLE 268435456
#define WS_CHILD 1073741824
#define WS_BORDER 8388608
#define WM_GETTEXT 13
external(INT, "CreateWindow", "CreateWindowExA", "User32.dll" );
external(INT, "GetFocus", "GetFocus", "User32.dll" );
int edit1, edit2, edit3, handle;
char buffer[999]; // буфер для текста из окна edit
createdialog(0);
showdialog(0, "Диалог",100, 100, 300, 300, 1, 1);
loop()sleep(10);
function getmessage(0, WM_CREATE)
{
edit1=CreateWindow(0, "EDIT", "111", WS_VISIBLE | WS_CHILD | WS_BORDER, 10, 20, 100, 20, gethwnd(0), 0, 0, 0);
edit2=CreateWindow(0, "EDIT", "22", WS_VISIBLE | WS_CHILD | WS_BORDER, 10, 50, 100, 20, gethwnd(0), 0, 0, 0);
edit3=CreateWindow(0, "EDIT", "3333", WS_VISIBLE | WS_CHILD | WS_BORDER, 10, 80, 100, 20, gethwnd(0), 0, 0, 0);
}
function getmessage(0, WM_COMMAND)
{
handle=GetFocus();
textout(0, 200, 300, "Хендл окна: "+format(handle), 1);
if(sendmessage(WM_GETTEXT, sizearray(buffer), address(#buffer[0]), formatiw(handle)))
textout(1, 200, 320, "Текст окна: "+format(#buffer[0]), 1);
}
Цитата: HiliteMenuItem(подсвечивает строчку)
code (Отобразить)CODE:#define MNS_NOTIFYBYPOS 134217728
#define MIM_STYLE 16
#define MF_POPUP 16
#define MF_HILITE 128
#define MF_BYPOSITION 1024
external(INT, "CreateMenu", "CreateMenu", "User32.dll" );
external(INT, "CreatePopupMenu", "CreatePopupMenu", "User32.dll" );
external(INT, "AppendMenu", "AppendMenuA", "User32.dll" );
external(INT, "SetMenuInfo", "SetMenuInfo", "User32.dll" );
external(INT, "SetMenu", "SetMenu", "User32.dll" );
external(INT, "CreateWindow", "CreateWindowExA", "User32.dll" );
external(INT, "HiliteMenuItem", "HiliteMenuItem", "User32.dll" );
//Создание меню
int MENUINFO[7]={28, MIM_STYLE, MNS_NOTIFYBYPOS, 0, 0, 0, 0};
int HMENU, HMENU2, HMENU3;
HMENU2=CreatePopupMenu();
AppendMenu(HMENU2, MF_POPUP, 1, "Новый" );
AppendMenu(HMENU2, MF_POPUP, 2, "Открыть" );
AppendMenu(HMENU2, MF_POPUP, 3, "Сохранить" );
AppendMenu(HMENU2, MF_POPUP, 4, "Сохранить как" );
HMENU3=CreatePopupMenu();
AppendMenu(HMENU3, MF_POPUP, 5, "Вырезать" );
AppendMenu(HMENU3, MF_POPUP, 6, "Копировать" );
HMENU=CreateMenu();
AppendMenu(HMENU, MF_POPUP, HMENU2, "Файл" );
AppendMenu(HMENU, MF_POPUP, HMENU3, "Правка" );
createdialog(0);
showdialog(0, "Диалог",100, 100, 300, 300, 1, 1);
HiliteMenuItem(gethwnd(0), HMENU, 1, MF_HILITE | MF_BYPOSITION); // выделить второй пункт меню
loop()sleep(1);
function getmessage(0, WM_CREATE)
{
SetMenuInfo(HMENU, address(#MENUINFO[0]));
SetMenu(gethwnd(0), HMENU);
}
function getmessage(0, WM_MENUCOMMAND)//Отлавливаем клик по пункту меню
{
if (message.lparam==HMENU2)//идентификатор меню "Файл"
{
if (message.wparam==0)messagebox ("Новый");
if (message.wparam==1)messagebox ("Открыть");
if (message.wparam==2)messagebox ("Сохранить");
if (message.wparam==3)messagebox ("Сохранить как");
}
if (message.lparam==HMENU3)//идентификатор меню "Правка"
{
if (message.wparam==0)messagebox ("Вырезать");
if (message.wparam==1)messagebox ("Копировать");
}
} |
|
|
Zireael |
Отправлено: 23 Мая, 2019 - 12:57:47
|
Эксперт
Покинул форум
Сообщений всего: 4468
Дата рег-ции: Нояб. 2017
Репутация: 585
|
Цитата: а прямоугольник можно нарисовать?
Всё что угодно.
code (Отобразить)CODE:#define WS_VISIBLE 268435456
#define WS_CHILD 1073741824
#define SS_NOTIFY 256
#define PS_SOLID 0
external(INT, "CreateWindow", "CreateWindowExA", "User32.dll" );
external(INT, "GetDC", "GetDC", "User32.dll");
external(INT, "CreatePen", "CreatePen", "Gdi32.dll");
external(INT, "CreateSolidBrush", "CreateSolidBrush", "Gdi32.dll");
external(INT, "SelectObject", "SelectObject", "Gdi32.dll");
external(INT, "Polyline", "Polyline", "Gdi32.dll");
external(INT, "Ellipse", "Ellipse", "Gdi32.dll");
external(INT, "Rectangle", "Rectangle", "Gdi32.dll");
int static;
int point[10]={95, 35, 220, 35, 220, 62, 95, 62, 95, 35} // точки, по которым будет нарисованна фигура
int point2[12]={20, 37, 44, 21, 66, 37, 57, 64, 29, 64, 20, 37} // точки, по которым будет нарисованна фигура
int hdc, pen1, pen2, pen3, pen4, brush1, brush2;
int old_pen, old_brush;
pen1=CreatePen("PS_SOLID", 3, 255); // тип линии, толщина и цвет
pen2=CreatePen("PS_SOLID", 5, 16000000); // тип линии, толщина и цвет
pen3=CreatePen("PS_SOLID", 4, 16017042); // тип линии, толщина и цвет
pen4=CreatePen("PS_SOLID", 2, 255); // тип линии, толщина и цвет
brush1=CreateSolidBrush(65280); // фон для круга
brush2=CreateSolidBrush(8605961); // фон для прямоугольника
createdialog(0);
showdialog(0, "Диалог",100, 100, 300, 300, 1, 1);
enabletimer(0);
loop()sleep(10);
function getmessage(0, WM_CREATE)
{
static=CreateWindow(0, "STATIC", "Статичный текст", SS_NOTIFY | WS_CHILD | WS_VISIBLE, 100, 40, 110, 18, gethwnd(0), 0, 0, 0);
hdc=GetDC(gethwnd(0));
}
CREATE_TIMER(0, 100)
{
// прямоугольник
old_pen=SelectObject(hdc, pen1); // выбрать ручку
Polyline(hdc, address(#point[0]), sizearray(point) / 2); // нарисовать фигуру
SelectObject(hdc, old_pen); // вернуть ручку
// звезда
old_pen=SelectObject(hdc, pen2);
Polyline(hdc, address(#point2[0]), sizearray(point2) / 2);
SelectObject(hdc, old_pen);
// эллипс, круг в данном случае
old_pen=SelectObject(hdc, pen3);
old_brush=SelectObject(hdc, brush1);
Ellipse(hdc, 20, 100, 120, 200);
SelectObject(hdc, old_pen);
SelectObject(hdc, old_brush);
// прямоугольник с фоном
old_pen=SelectObject(hdc, pen4);
old_brush=SelectObject(hdc, brush2);
Rectangle(hdc, 150, 100, 230, 200);
SelectObject(hdc, old_pen);
SelectObject(hdc, old_brush);
} |
|
|
007wan |
Отправлено: 23 Мая, 2019 - 13:00:26
|
Эксперт
Покинул форум
Сообщений всего: 1837
Дата рег-ции: Март 2017
Репутация: -2
|
А, понял.
(Добавление)
А можно ли использовать их отдельно?
Перед выполнением операции сразу
CODE:
external(INT, "DeleteFile", "DeleteFileA", "kernel32.dll");
DeleteFile("C:\ttt.txt");
ИЛи так:
CODE:
external(INT, "DeleteFile", "DeleteFileA", "kernel32.dll");//в самом начале кода
//.......
DeleteFile("C:\ttt.txt");//Ну очень далеко
Просто помню использовал MessageBox отдельно от external и у меня выдавало оибку. Так нежелательно?
CODE: external(INT, "my_message", "MessageBoxA", "user32.dll");//В начале
//,,,,,,,,,,,,,
int result_message1 = my_message(0, "", MB_YESNOCANCEL | MB_ICONQUESTION);//Очень далеко
(Добавление)
007wan пишет: external(INT, "my_message", "MessageBoxA", "user32.dll");//В начале
//,,,,,,,,,,,,,
int result_message1 = my_message(0, "", MB_YESNOCANCEL | MB_ICONQUESTION);//Очень далеко Не обращайте внимание там где-то ошибка. Я просто торопился и отрадактировал. Ошибка не в функции. |
|
|
Zireael |
Отправлено: 23 Мая, 2019 - 13:18:34
|
Эксперт
Покинул форум
Сообщений всего: 4468
Дата рег-ции: Нояб. 2017
Репутация: 585
|
Цитата: Просто помню использовал MessageBox отдельно от external и у меня выдавало оибку. Так нежелательно?
Вначале загрузить функцию, потом можно использовать в любом месте скрипта.
Если выдавало ошибку, значит неправильно передавались параметры в функцию.(Отредактировано автором: 23 Мая, 2019 - 13:19:18) |
|
|
|