Martin |
Отправлено: 23 Апреля, 2023 - 19:23:13
|
Мастер
Покинул форум
Сообщений всего: 121
Дата рег-ции: Июнь 2022
Репутация: 1
|
Kibor пишет: Кстати если строка
for(i=0; i<4; i++)sendmessage(BM_SETCHECK, flag_check0[i], 0, formatiw(check0[i]));
то в ней ошибка.
Правильно
for(i=0; i<4; i++)sendmessage(BM_SETCHECK, 0, flag_check0[i], formatiw(check0[i]));
Это генератор диалогового окна от Zireael такой код сгенерировал.
А как сделать чтобы чек бокс flag_check0[0] изначально был без галочки? При этом остальные были неактивные?
CODE:sendmessage(BM_SETCHECK, 0, flag_check0[0], formatiw(check0[0]));
flag_check0[0] = 0;
При таком варианте окно открывается с активными чекбоксами, и уже поле того как снимешь и поставишь галочку всё работает как надо. |
|
|
Kibor |
Отправлено: 23 Апреля, 2023 - 19:29:12
|
Эксперт
Покинул форум
Сообщений всего: 8098
Дата рег-ции: Март 2013
Откуда: Одесса
Репутация: 355
|
Martin пишет: При таком варианте окно открывается с активными чекбоксами
Разберитесь в отличиях.
CODE:#define WS_VISIBLE 0x10000000
#define WS_CHILD 0x40000000
#define WS_BORDER 0x00800000
#define BS_MULTILINE 0x00002000
#define BS_AUTOCHECKBOX 0x00000003
#define BS_AUTORADIOBUTTON 0x00000009
#define BM_SETCHECK 0x00F1
#define BST_UNCHECKED 0x0000
#define BST_CHECKED 0x0001
#define TRUE 1
#define WM_SETFONT 0x0030
#define RUSSIAN_CHARSET 204
external(INT, "CreateWindow", "CreateWindowExA", "User32.dll");
external(INT, "GetWindowText", "GetWindowTextA", "User32.dll");
external(INT, "SetWindowText", "SetWindowTextA", "User32.dll");
external(INT, "CreateFont", "CreateFontA", "Gdi32.dll");
external(INT, "GetWindowRect", "GetWindowRect", "User32.dll");
external(INT, "DeleteObject", "DeleteObject", "Gdi32.dll");
external(INT, "DeleteFile", "DeleteFileA", "kernel32.dll");
external(INT, "EnableWindow", "EnableWindow", "User32.dll");
int h_font;
string rn = formatic(13)+formatic(10);
int dialogPosX_0 = 567, dialogPosY_0 = 245;
int check0[4];
int flag_check0[4] = { 0, 0, 0, 0 };
createdialog(0);
showdialog(0, "Диалог0", dialogPosX_0, dialogPosY_0, 776, 520, 4, 1);
loop()
{
// тут нужный код
sleep(10);
}
end_0:;
function getmessage(0, WM_CREATE)
{
int i;
h_font = CreateFont(-12, 0, 0, 0, 400, 0, 0, 0, RUSSIAN_CHARSET, 0, 0, 0, 0, "Arial");
check0[0] = CreateWindow(0, "BUTTON", "Check0", BS_AUTOCHECKBOX | WS_VISIBLE | WS_CHILD, 8, 8, 80, 20, gethwnd(0), 0, 0, 0);
check0[1] = CreateWindow(0, "BUTTON", "Check1", BS_AUTOCHECKBOX | WS_VISIBLE | WS_CHILD, 8, 32, 80, 20, gethwnd(0), 0, 0, 0);
check0[2] = CreateWindow(0, "BUTTON", "Check2", BS_AUTOCHECKBOX | WS_VISIBLE | WS_CHILD, 8, 56, 80, 20, gethwnd(0), 0, 0, 0);
check0[3] = CreateWindow(0, "BUTTON", "Check3", BS_AUTOCHECKBOX | WS_VISIBLE | WS_CHILD, 8, 80, 80, 20, gethwnd(0), 0, 0, 0);
for(i=0; i<4; i++)sendmessage(BM_SETCHECK, flag_check0[i], 0, formatiw(check0[i]));
for(i=0; i<4; i++)sendmessage(WM_SETFONT, h_font, TRUE, formatiw(check0[i]));
for(i=1; i<4; i++)EnableWindow(check0[i], 0);//Все кроме первого
}
function getmessage(0, WM_COMMAND)
{
int i;
for(i=0; i<4; i++) // обработка нажатий галок
{
if(message.lparam == check0[i])
{
if(flag_check0[i])flag_check0[i] = 0;
else flag_check0[i] = 1;
}
if (flag_check0[0]==1){for(i=1; i<4; i++)EnableWindow(check0[i], 1);}//Все кроме первого
else {for(i=1; i<4; i++)EnableWindow(check0[i], 0);}//Все кроме первого
}
}
function getmessage(0, WM_CLOSE)
{
DeleteObject(h_font);
goto global end_0; // переход в метке
// close(); // закрыть кибор
}
|
|
|
Martin |
Отправлено: 23 Апреля, 2023 - 21:42:28
|
Мастер
Покинул форум
Сообщений всего: 121
Дата рег-ции: Июнь 2022
Репутация: 1
|
Kibor пишет: Разберитесь в отличиях.
Спасибо вроде с этим разобрался.
Ещё появились вопросы по окнам
Как сделать окно на которое можно добавить данные, а именно координаты на которые нажимать.
Код окна (Отобразить)CODE:#define WS_VISIBLE 0x10000000
#define WS_CHILD 0x40000000
#define WS_BORDER 0x00800000
#define BS_MULTILINE 0x00002000
#define SS_EDITCONTROL 0x00002000
#define TRUE 1
#define WM_SETFONT 0x0030
#define RUSSIAN_CHARSET 204
external(INT, "CreateWindow", "CreateWindowExA", "User32.dll");
external(INT, "GetWindowText", "GetWindowTextA", "User32.dll");
external(INT, "SetWindowText", "SetWindowTextA", "User32.dll");
external(INT, "CreateFont", "CreateFontA", "Gdi32.dll");
external(INT, "GetWindowRect", "GetWindowRect", "User32.dll");
external(INT, "DeleteObject", "DeleteObject", "Gdi32.dll");
external(INT, "DeleteFile", "DeleteFileA", "kernel32.dll");
int h_font;
string rn = formatic(13)+formatic(10);
int dialogPosX_0 = 779, dialogPosY_0 = 290;
int button0[5];
int flag_button0[5] = { 0, 0, 0, 0, 0 };
int static0[12];
createdialog(0);
showdialog(0, "Диалог0", dialogPosX_0, dialogPosY_0, 313, 296, 4, 1);
loop()
{
// тут нужный код
sleep(10);
}
end_0:;
function getmessage(0, WM_CREATE)
{
int i;
h_font = CreateFont(-15, 0, 0, 0, 400, 0, 0, 0, RUSSIAN_CHARSET, 0, 0, 0, 0, "Arial");
button0[0] = CreateWindow(0, "BUTTON", "Координаты 1", WS_VISIBLE | WS_CHILD, 0, 32, 104, 20, gethwnd(0), 0, 0, 0);
button0[1] = CreateWindow(0, "BUTTON", "Координаты 2", WS_VISIBLE | WS_CHILD, 0, 56, 104, 20, gethwnd(0), 0, 0, 0);
button0[2] = CreateWindow(0, "BUTTON", "Координаты 3", WS_VISIBLE | WS_CHILD, 0, 80, 104, 20, gethwnd(0), 0, 0, 0);
button0[3] = CreateWindow(0, "BUTTON", "Координаты 4", WS_VISIBLE | WS_CHILD, 0, 104, 104, 20, gethwnd(0), 0, 0, 0);
button0[4] = CreateWindow(0, "BUTTON", "Координаты 5", WS_VISIBLE | WS_CHILD, 0, 128, 104, 20, gethwnd(0), 0, 0, 0);
static0[0] = CreateWindow(0, "STATIC", "empty", WS_VISIBLE | WS_CHILD, 112, 32, 80, 20, gethwnd(0), 0, 0, 0);
static0[1] = CreateWindow(0, "STATIC", "empty", WS_VISIBLE | WS_CHILD, 208, 32, 80, 20, gethwnd(0), 0, 0, 0);
static0[2] = CreateWindow(0, "STATIC", "empty", WS_VISIBLE | WS_CHILD, 112, 80, 80, 20, gethwnd(0), 0, 0, 0);
static0[3] = CreateWindow(0, "STATIC", "empty", WS_VISIBLE | WS_CHILD, 112, 56, 80, 20, gethwnd(0), 0, 0, 0);
static0[4] = CreateWindow(0, "STATIC", "empty", WS_VISIBLE | WS_CHILD, 208, 56, 80, 20, gethwnd(0), 0, 0, 0);
static0[5] = CreateWindow(0, "STATIC", "empty", WS_VISIBLE | WS_CHILD, 208, 80, 80, 20, gethwnd(0), 0, 0, 0);
static0[6] = CreateWindow(0, "STATIC", "X", WS_VISIBLE | WS_CHILD, 136, 8, 16, 20, gethwnd(0), 0, 0, 0);
static0[7] = CreateWindow(0, "STATIC", "Y", WS_VISIBLE | WS_CHILD, 232, 8, 16, 20, gethwnd(0), 0, 0, 0);
static0[8] = CreateWindow(0, "STATIC", "empty", WS_VISIBLE | WS_CHILD, 112, 104, 80, 20, gethwnd(0), 0, 0, 0);
static0[9] = CreateWindow(0, "STATIC", "empty", WS_VISIBLE | WS_CHILD, 112, 128, 80, 20, gethwnd(0), 0, 0, 0);
static0[10] = CreateWindow(0, "STATIC", "empty", WS_VISIBLE | WS_CHILD, 208, 104, 80, 20, gethwnd(0), 0, 0, 0);
static0[11] = CreateWindow(0, "STATIC", "empty", WS_VISIBLE | WS_CHILD, 208, 128, 80, 20, gethwnd(0), 0, 0, 0);
for(i=0; i<5; i++)sendmessage(WM_SETFONT, h_font, TRUE, formatiw(button0[i]));
for(i=0; i<12; i++)sendmessage(WM_SETFONT, h_font, TRUE, formatiw(static0[i]));
}
function getmessage(0, WM_COMMAND)
{
int i;
for(i=0; i<5; i++) // обработка нажатий кнопок
{
if(message.lparam == button0[i])
{
if(flag_button0[i])flag_button0[i] = 0;
else flag_button0[i] = 1;
return;
}
}
}
function getmessage(0, WM_CLOSE)
{
DeleteObject(h_font);
goto global end_0; // переход в метке
// close(); // закрыть кибор
}
|
|
|
Martin |
Отправлено: 27 Апреля, 2023 - 15:09:39
|
Мастер
Покинул форум
Сообщений всего: 121
Дата рег-ции: Июнь 2022
Репутация: 1
|
Kibor пишет: Тут была ошибка. Исправил код.
ошибку выдает при запуске "EnableWindow"
Zireael пишет: Вместо static использовать button.
Мне бы вот так реализовать(для просмотра ссылки Вам необходимо авторизоваться)
Нажимаю на кнопку координата 1 появляется прицел заместо курсора например, ну или как то по другому сообщение в текст аут выбрать координату, кликаю по нужной координате она добавляется в текстовый файл и сразу из этого файла и на диалоговом окне заместо empty появляются x,y координаты. |
|
|
Martin |
Отправлено: 27 Апреля, 2023 - 16:07:31
|
Мастер
Покинул форум
Сообщений всего: 121
Дата рег-ции: Июнь 2022
Репутация: 1
|
Zireael пишет: Нужно подключить функцию через external.
Спасибо добавил CODE:external(INT, "EnableWindow", "EnableWindow", "User32.dll" ); всё заработало, но раньше и без этой строки запускалось. |
|
|
Zireael |
Отправлено: 27 Апреля, 2023 - 17:03:44
|
Эксперт
Покинул форум
Сообщений всего: 4398
Дата рег-ции: Нояб. 2017
Репутация: 580
|
При нажатии клавиши Ё, координаты курсора появляются в статике.
Code (Отобразить)CODE:#define WS_VISIBLE 0x10000000
#define WS_CHILD 0x40000000
#define WS_BORDER 0x00800000
#define BS_MULTILINE 0x00002000
#define SS_EDITCONTROL 0x00002000
#define BS_AUTOCHECKBOX 0x00000003
#define BS_AUTORADIOBUTTON 0x00000009
#define BM_SETCHECK 0x00F1
#define BST_UNCHECKED 0x0000
#define BST_CHECKED 0x0001
#define TRUE 1
#define WM_SETFONT 0x0030
#define RUSSIAN_CHARSET 204
external(INT, "CreateWindow", "CreateWindowExA", "User32.dll");
external(INT, "GetWindowText", "GetWindowTextA", "User32.dll");
external(INT, "SetWindowText", "SetWindowTextA", "User32.dll");
external(INT, "CreateFont", "CreateFontA", "Gdi32.dll");
external(INT, "GetWindowRect", "GetWindowRect", "User32.dll");
external(INT, "DeleteObject", "DeleteObject", "Gdi32.dll");
external(INT, "DeleteFile", "DeleteFileA", "kernel32.dll");
int h_font;
string rn = formatic(13)+formatic(10);
int dialogPosX_0 = 547, dialogPosY_0 = 255;
int static0[10];
int autocheck0[5], flag_autocheck0 = 0;
int staticX, staticY;
int MousePosX, MousePosY;
createdialog(0);
showdialog(0, "Диалог0", dialogPosX_0, dialogPosY_0, 260, 187, 4, 1);
enabletimer(0);
textbkcolor(65280, 0);
textout(0, 50, 100, "Нажать Ё для получения координат курсора", 0);
loop()
{
// тут нужный код
sleep(10);
}
end_0:;
function getmessage(0, WM_CREATE)
{
int i;
h_font = CreateFont(-12, 0, 0, 0, 400, 0, 0, 0, RUSSIAN_CHARSET, 0, 0, 0, 0, "Arial");
staticX = CreateWindow(0, "STATIC", "X", WS_VISIBLE | WS_CHILD, 144, 8, 16, 20, gethwnd(0), 0, 0, 0);
staticY = CreateWindow(0, "STATIC", "Y", WS_VISIBLE | WS_CHILD, 208, 8, 16, 20, gethwnd(0), 0, 0, 0);
static0[0] = CreateWindow(0, "STATIC", "Empty", WS_VISIBLE | WS_CHILD, 128, 32, 48, 20, gethwnd(0), 0, 0, 0);
static0[1] = CreateWindow(0, "STATIC", "Empty", WS_VISIBLE | WS_CHILD, 128, 56, 48, 20, gethwnd(0), 0, 0, 0);
static0[2] = CreateWindow(0, "STATIC", "Empty", WS_VISIBLE | WS_CHILD, 128, 80, 48, 20, gethwnd(0), 0, 0, 0);
static0[3] = CreateWindow(0, "STATIC", "Empty", WS_VISIBLE | WS_CHILD, 128, 104, 48, 20, gethwnd(0), 0, 0, 0);
static0[4] = CreateWindow(0, "STATIC", "Empty", WS_VISIBLE | WS_CHILD, 128, 128, 48, 20, gethwnd(0), 0, 0, 0);
static0[5] = CreateWindow(0, "STATIC", "Empty", WS_VISIBLE | WS_CHILD, 192, 32, 48, 20, gethwnd(0), 0, 0, 0);
static0[6] = CreateWindow(0, "STATIC", "Empty", WS_VISIBLE | WS_CHILD, 192, 56, 48, 20, gethwnd(0), 0, 0, 0);
static0[7] = CreateWindow(0, "STATIC", "Empty", WS_VISIBLE | WS_CHILD, 192, 80, 48, 20, gethwnd(0), 0, 0, 0);
static0[8] = CreateWindow(0, "STATIC", "Empty", WS_VISIBLE | WS_CHILD, 192, 104, 48, 20, gethwnd(0), 0, 0, 0);
static0[9] = CreateWindow(0, "STATIC", "Empty", WS_VISIBLE | WS_CHILD, 192, 128, 48, 20, gethwnd(0), 0, 0, 0);
autocheck0[0] = CreateWindow(0, "BUTTON", "Координаты1", BS_AUTORADIOBUTTON | WS_VISIBLE | WS_CHILD, 8, 32, 100, 20, gethwnd(0), 0, 0, 0);
autocheck0[1] = CreateWindow(0, "BUTTON", "Координаты2", BS_AUTORADIOBUTTON | WS_VISIBLE | WS_CHILD, 8, 56, 100, 20, gethwnd(0), 0, 0, 0);
autocheck0[2] = CreateWindow(0, "BUTTON", "Координаты3", BS_AUTORADIOBUTTON | WS_VISIBLE | WS_CHILD, 8, 80, 100, 20, gethwnd(0), 0, 0, 0);
autocheck0[3] = CreateWindow(0, "BUTTON", "Координаты4", BS_AUTORADIOBUTTON | WS_VISIBLE | WS_CHILD, 8, 104, 100, 20, gethwnd(0), 0, 0, 0);
autocheck0[4] = CreateWindow(0, "BUTTON", "Координаты5", BS_AUTORADIOBUTTON | WS_VISIBLE | WS_CHILD, 8, 128, 100, 20, gethwnd(0), 0, 0, 0);
if(flag_autocheck0 > -1)sendmessage(BM_SETCHECK, BST_CHECKED, 0, formatiw(autocheck0[flag_autocheck0]));
for(i=0; i<10; i++)sendmessage(WM_SETFONT, h_font, TRUE, formatiw(static0[i]));
for(i=0; i<5; i++)sendmessage(WM_SETFONT, h_font, TRUE, formatiw(autocheck0[i]));
sendmessage(WM_SETFONT, h_font, TRUE, formatiw(staticX));
sendmessage(WM_SETFONT, h_font, TRUE, formatiw(staticY));
}
function getmessage(0, WM_COMMAND)
{
int i;
for(i=0; i<5; i++) // обработка нажатий галок переключателей
{
if(message.lparam == autocheck0[i])
{
flag_autocheck0 = i;
return;
}
}
}
function getmessage(0, WM_CLOSE)
{
DeleteObject(h_font);
goto global end_0; // переход в метке
// close(); // закрыть кибор
}
CREATE_TIMER(0, 50)
{
if(getkeystate(192))
{
while(getkeystate(192))sleep(10);
getmouse(MousePosX, MousePosY);
SetWindowText(static0[flag_autocheck0], format(MousePosX));
SetWindowText(static0[flag_autocheck0+5], format(MousePosY));
}
} |
|
|
|