007wan |
Отправлено: 24 Ноября, 2019 - 08:53:54
|
Эксперт
Покинул форум
Сообщений всего: 1837
Дата рег-ции: Март 2017
Репутация: -2
|
Как сделать, что бы при двойном щелчке мыши по строчкам ListBox получает её текст?
PS: красное можно опустить, я знаю как получить, достаточно будет и messagebox просто как для примера)
У меня в коде был старый код типа:
Код (Отобразить)CODE:function getmessage(0, WM_COMMAND)
{
if(message.lparam == Object_Listbox1 && hiword(message.wparam) == 2)
{
sendmessage(LB_GETTEXT, sendmessage(LB_GETCURSEL, 0, 0, formatiw(Object_Listbox1)), address(#text[0]), formatiw(Object_Listbox1));
regexreplace(1, #Text1, format(#text[0]), "^[\[\]\d:\s\-]+", "");
regexreplace(1, #Text2, Text1, "\s*в координат.*", "");
for (int z=0; z<=3; z++)
{
if (Text1 == "Не удается найти Image_"+format(z)+".bmp" || Text2 == "Обнаружена Image_"+format(z)+".bmp")
{
start(temp_fold+"Image_"+format(z)+".bmp");
}
}
}
}
//Фрагмент кода... Но не знаю. может какие-то есть более лучшие варианты или современные, чем WM_COMMAND? |
|
|
Zireael |
Отправлено: 24 Ноября, 2019 - 11:17:13
|
Эксперт
Покинул форум
Сообщений всего: 4464
Дата рег-ции: Нояб. 2017
Репутация: 585
|
Цитата: при двойном щелчке мыши по строчкам ListBox
code (Отобразить)CODE:#define WS_CHILD 1073741824
#define WS_VISIBLE 268435456
#define WS_BORDER 8388608
#define LB_ADDSTRING 384
#define LBS_NOTIFY 1
#define LBN_DBLCLK 2
external(INT, "CreateWindow", "CreateWindowExA", "User32.dll" );
int list, dbl_click=0;
char c[999];
createdialog(0);
showdialog(0, "Диалог",300, 170, 300, 200, 1, 1);
loop()
{
textout(0, 300, 120, "Двойных кликов по списку: "+format(dbl_click), 1);
sleep(10);
}
function getmessage(0, WM_CREATE)
{
list=CreateWindow(0, "LISTBOX", "", LBS_NOTIFY | WS_BORDER | WS_CHILD | WS_VISIBLE, 10, 10, 150, 150, gethwnd(0), 0, 0, 0);
// добавить строки в список
strcpy(#c[0], "Строка1");
sendmessage(LB_ADDSTRING, 0, address(#c[0]), formatiw(list));
strcpy(#c[0], "Строка2");
sendmessage(LB_ADDSTRING, 0, address(#c[0]), formatiw(list));
strcpy(#c[0], "Строка3");
sendmessage(LB_ADDSTRING, 0, address(#c[0]), formatiw(list));
}
function getmessage(0, WM_COMMAND)
{
if(message.lparam==list) // если был клик по списку
{
if(hiword(message.wparam)==LBN_DBLCLK) // если двойной клик
{
dbl_click++;
}
return;
}
} |
|
|
Nikanr |
Отправлено: 24 Ноября, 2019 - 19:36:43
|
Специалист
Покинул форум
Сообщений всего: 231
Дата рег-ции: Март 2019
Репутация: 5
|
Подскажите что не так, заменяет пункт меню на полоску вместо галки
CODE:external (INT, "ModifyMenu", "ModifyMenuA", "user32.dll" );
external (INT, "AppendMenu", "AppendMenuA", "User32.dll" );
external (INT, "CreateMenu", "CreateMenu", "User32.dll" );
external (INT, "SetMenuInfo", "SetMenuInfo", "User32.dll" );
external (INT, "SetMenu", "SetMenu", "User32.dll" );
external (INT, "ModifyMenu", "ModifyMenuA", "user32.dll" );
#define MF_CHECKED 8
#define MF_UNCHECKED 0
#define MF_BYPOSITION 1024
int MENUINFO[7]={28, 16, 134217728, 0, 0, 0, 0},HMENU,HMENU2;
HMENU2=CreateMenu();
AppendMenu(HMENU2, 0, 1, "qwe");
AppendMenu(HMENU2, 0, 2, "rty");
HMENU=CreateMenu();
AppendMenu(HMENU, 16, HMENU2, "Менюха");
createdialog(0);
showdialog(0, "Диалог", 835, 390, 250, 300, 1, 1);
loop() sleep(10);
function getmessage(0, WM_CREATE){
SetMenuInfo(HMENU, address(#MENUINFO[0]));
SetMenu(gethwnd(0), HMENU);
ModifyMenu(HMENU2, 0, MF_CHECKED | MF_BYPOSITION, 0, 0);
}
|
|
|
Zireael |
Отправлено: 24 Ноября, 2019 - 19:51:24
|
Эксперт
Покинул форум
Сообщений всего: 4464
Дата рег-ции: Нояб. 2017
Репутация: 585
|
Цитата: ModifyMenu(HMENU2, 0, MF_CHECKED | MF_BYPOSITION, 0, 0);
CODE:ModifyMenu(HMENU2, 0, MF_CHECKED | MF_BYPOSITION, 0, "qwe"); |
|
|
|