neba2101 |
Отправлено: 07 Октября, 2023 - 14:37:21
|
Мастер
Покинул форум
Сообщений всего: 154
Дата рег-ции: Февр. 2017
Репутация: 4
|
Как отследить нажатие правой кнопки мыши по listbox-у и вывести всплывающее меню как в
этом посте? Как отследить двойное нажатие по пункту из списка? Спасибо!
На этом примере (Отобразить)CODE:#define WS_VISIBLE 0x10000000
#define WS_CHILD 0x40000000
#define WS_BORDER 0x00800000
#define BS_MULTILINE 0x00002000
#define LB_ADDSTRING 0x0180
#define LB_GETCURSEL 0x0188
#define LB_SETCURSEL 0x0186
#define LBS_NOTIFY 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 = 510, dialogPosY_0 = 428;
int button0[6];
int flag_button0[6] = { 0, 0, 0, 0, 0, 0 };
int listbox0[1];
int flag_listbox0[1] = { 0 };
string text_listbox0[1][5];
int count_rows_listbox0[1] = { 5 };
text_listbox0[0][0] = "0"; text_listbox0[0][1] = "1"; text_listbox0[0][2] = "2"; text_listbox0[0][3] = "3"; text_listbox0[0][4] = "4";
createdialog(0);
showdialog(0, "Диалог0", dialogPosX_0, dialogPosY_0, 262, 222, 4, 1);
loop()
{
// тут нужный код
sleep(10);
}
end_0:;
function getmessage(0, WM_CREATE)
{
int i;
int j;
char c_text_listbox[999];
h_font = CreateFont(-12, 0, 0, 0, 400, 0, 0, 0, RUSSIAN_CHARSET, 0, 0, 0, 0, "Arial");
button0[0] = CreateWindow(0, "BUTTON", "Button0", WS_VISIBLE | WS_CHILD, 4, 4, 80, 20, gethwnd(0), 0, 0, 0);
button0[1] = CreateWindow(0, "BUTTON", "Button1", WS_VISIBLE | WS_CHILD, 88, 4, 80, 20, gethwnd(0), 0, 0, 0);
button0[2] = CreateWindow(0, "BUTTON", "Button2", WS_VISIBLE | WS_CHILD, 172, 4, 80, 20, gethwnd(0), 0, 0, 0);
button0[3] = CreateWindow(0, "BUTTON", "Button3", WS_VISIBLE | WS_CHILD, 4, 168, 80, 20, gethwnd(0), 0, 0, 0);
button0[4] = CreateWindow(0, "BUTTON", "Button4", WS_VISIBLE | WS_CHILD, 88, 168, 80, 20, gethwnd(0), 0, 0, 0);
button0[5] = CreateWindow(0, "BUTTON", "Button5", WS_VISIBLE | WS_CHILD, 172, 168, 80, 20, gethwnd(0), 0, 0, 0);
listbox0[0] = CreateWindow(0, "LISTBOX", "", WS_VISIBLE | WS_CHILD | WS_BORDER | LBS_NOTIFY, 4, 28, 248, 144, gethwnd(0), 0, 0, 0);
for(i=0; i<1; i++)
{
for(j=0; j<count_rows_listbox0[i]; j++)
{
strcpy(#c_text_listbox[0], text_listbox0[i][j]);
sendmessage(LB_ADDSTRING, 0, address(#c_text_listbox[0]), formatiw(listbox0[i]));
}
}
for(i=0; i<1; i++)sendmessage(LB_SETCURSEL, flag_listbox0[i], 0, formatiw(listbox0[i]));
for(i=0; i<6; i++)sendmessage(WM_SETFONT, h_font, TRUE, formatiw(button0[i]));
for(i=0; i<1; i++)sendmessage(WM_SETFONT, h_font, TRUE, formatiw(listbox0[i]));
}
function getmessage(0, WM_COMMAND)
{
int i;
for(i=0; i<6; i++) // обработка нажатий кнопок
{
if(message.lparam == button0[i])
{
if(flag_button0[i])flag_button0[i] = 0;
else flag_button0[i] = 1;
return;
}
}
for(i=0; i<1; i++) // обработка нажатий на список listbox
{
if(message.lparam == listbox0[i])
{
flag_listbox0[i] = sendmessage(LB_GETCURSEL, 0, 0, formatiw(listbox0[i]));
return;
}
}
}
function getmessage(0, WM_CLOSE)
{
DeleteObject(h_font);
goto global end_0; // переход в метке
// close(); // закрыть кибор
}
|
|
|
Zireael |
Отправлено: 07 Октября, 2023 - 15:11:10
|
Эксперт
Покинул форум
Сообщений всего: 4465
Дата рег-ции: Нояб. 2017
Репутация: 585
|
Цитата: Как отследить нажатие правой кнопки мыши по listbox-у и вывести всплывающее меню
Как отследить двойное нажатие по пункту из списка?
Code (Отобразить)CODE:#define WS_VISIBLE 0x10000000
#define WS_CHILD 0x40000000
#define WS_BORDER 0x00800000
#define BS_MULTILINE 0x00002000
#define LB_ADDSTRING 0x0180
#define LB_GETCURSEL 0x0188
#define LB_SETCURSEL 0x0186
#define LBS_NOTIFY 0x0001
#define TRUE 1
#define WM_SETFONT 0x0030
#define RUSSIAN_CHARSET 204
#define LBN_DBLCLK 2
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, "CreatePopupMenu", "CreatePopupMenu", "User32.dll");
external(INT, "TrackPopupMenu", "TrackPopupMenu", "User32.dll");
external(INT, "AppendMenu", "AppendMenuA", "User32.dll");
int h_font;
string rn = formatic(13)+formatic(10);
int dialogPosX_0 = 510, dialogPosY_0 = 428;
int button0[6];
int flag_button0[6] = { 0, 0, 0, 0, 0, 0 };
int listbox0[1];
int flag_listbox0[1] = { 0 };
string text_listbox0[1][5];
int count_rows_listbox0[1] = { 5 };
text_listbox0[0][0] = "0"; text_listbox0[0][1] = "1"; text_listbox0[0][2] = "2"; text_listbox0[0][3] = "3"; text_listbox0[0][4] = "4";
win w;
int HMENU, HMENU2, result;
HMENU=CreatePopupMenu();
AppendMenu(HMENU, 0, 111, "MessageBox");
AppendMenu(HMENU, 0, 222, "Findimage");
HMENU2=CreatePopupMenu();
AppendMenu(HMENU2, 0, 333, "25");
AppendMenu(HMENU2, 0, 444, "50");
AppendMenu(HMENU2, 0, 555, "75");
AppendMenu(HMENU2, 0, 666, "100");
AppendMenu(HMENU, 16, HMENU2, "Прозрачность");
createdialog(0);
showdialog(0, "Диалог0", dialogPosX_0, dialogPosY_0, 262, 222, 4, 1);
loop()
{
// тут нужный код
sleep(10);
}
end_0:;
function getmessage(0, WM_CREATE)
{
int i;
int j;
char c_text_listbox[999];
h_font = CreateFont(-12, 0, 0, 0, 400, 0, 0, 0, RUSSIAN_CHARSET, 0, 0, 0, 0, "Arial");
button0[0] = CreateWindow(0, "BUTTON", "Button0", WS_VISIBLE | WS_CHILD, 4, 4, 80, 20, gethwnd(0), 0, 0, 0);
button0[1] = CreateWindow(0, "BUTTON", "Button1", WS_VISIBLE | WS_CHILD, 88, 4, 80, 20, gethwnd(0), 0, 0, 0);
button0[2] = CreateWindow(0, "BUTTON", "Button2", WS_VISIBLE | WS_CHILD, 172, 4, 80, 20, gethwnd(0), 0, 0, 0);
button0[3] = CreateWindow(0, "BUTTON", "Button3", WS_VISIBLE | WS_CHILD, 4, 168, 80, 20, gethwnd(0), 0, 0, 0);
button0[4] = CreateWindow(0, "BUTTON", "Button4", WS_VISIBLE | WS_CHILD, 88, 168, 80, 20, gethwnd(0), 0, 0, 0);
button0[5] = CreateWindow(0, "BUTTON", "Button5", WS_VISIBLE | WS_CHILD, 172, 168, 80, 20, gethwnd(0), 0, 0, 0);
listbox0[0] = CreateWindow(0, "LISTBOX", "", WS_VISIBLE | WS_CHILD | WS_BORDER | LBS_NOTIFY, 4, 28, 248, 144, gethwnd(0), 0, 0, 0);
for(i=0; i<1; i++)
{
for(j=0; j<count_rows_listbox0[i]; j++)
{
strcpy(#c_text_listbox[0], text_listbox0[i][j]);
sendmessage(LB_ADDSTRING, 0, address(#c_text_listbox[0]), formatiw(listbox0[i]));
}
}
for(i=0; i<1; i++)sendmessage(LB_SETCURSEL, flag_listbox0[i], 0, formatiw(listbox0[i]));
for(i=0; i<6; i++)sendmessage(WM_SETFONT, h_font, TRUE, formatiw(button0[i]));
for(i=0; i<1; i++)sendmessage(WM_SETFONT, h_font, TRUE, formatiw(listbox0[i]));
}
function getmessage(0, WM_COMMAND)
{
int i;
for(i=0; i<6; i++) // обработка нажатий кнопок
{
if(message.lparam == button0[i])
{
if(flag_button0[i])flag_button0[i] = 0;
else flag_button0[i] = 1;
return;
}
}
for(i=0; i<1; i++) // обработка нажатий на список listbox
{
if(message.lparam == listbox0[i] && hiword(message.wparam) == LBN_DBLCLK)
{
messagebox("Двойной клик");
return;
}
if(message.lparam == listbox0[i])
{
flag_listbox0[i] = sendmessage(LB_GETCURSEL, 0, 0, formatiw(listbox0[i]));
return;
}
}
}
function getmessage(0, WM_CLOSE)
{
DeleteObject(h_font);
goto global end_0; // переход в метке
// close(); // закрыть кибор
}
function getmessage(0, WM_CONTEXTMENU)
{
if(message.wparam == listbox0[0])
{
result=TrackPopupMenu(HMENU, 256, loword(message.lparam), hiword(message.lparam), 0, gethwnd(0), 0 ); // вывести меню
if(result==111)messagebox("Выбран пункт MessageBox" );
if(result==222)messagebox("Выбран пункт Findimage" );
if(result==333)transparency(25, formatiw(gethwnd(0)));
if(result==444)transparency(50, formatiw(gethwnd(0)));
if(result==555)transparency(75, formatiw(gethwnd(0)));
if(result==666)transparency(100, formatiw(gethwnd(0)));
}
}
function getmessage(0, WM_RBUTTONDOWN)
{
setwindowparam(w);
result=TrackPopupMenu(HMENU, 256, message.x+w.leftclient, message.y+w.topclient, 0, formatwi(w), 0 ); // вывести меню
if(result==111)messagebox("Выбран пункт MessageBox" );
if(result==222)messagebox("Выбран пункт Findimage" );
if(result==333)transparency(25, w);
if(result==444)transparency(50, w);
if(result==555)transparency(75, w);
if(result==666)transparency(100, w);
} |
|
|
neba2101 |
Отправлено: 09 Октября, 2023 - 21:41:38
|
Мастер
Покинул форум
Сообщений всего: 154
Дата рег-ции: Февр. 2017
Репутация: 4
|
Как сделать горизонтальную прокрутку в listbox-е? Спасибо!
Так работает только вертикальная прокрутка (Отобразить)CODE:#define WS_VISIBLE 0x10000000
#define WS_CHILD 0x40000000
#define WS_BORDER 0x00800000
#define WS_VSCROLL 0x00200000
#define WS_HSCROLL 0x00100000
#define BS_MULTILINE 0x00002000
#define LB_ADDSTRING 0x0180
#define LB_GETCURSEL 0x0188
#define LB_SETCURSEL 0x0186
#define LBS_NOTIFY 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 = 567, dialogPosY_0 = 245;
int button0[1];
int flag_button0[1] = { 0 };
int listbox0[1];
int flag_listbox0[1] = { 0 };
string text_listbox0[1][1];
int count_rows_listbox0[1] = { 0 };
char d[500];
createdialog(0);
showdialog(0, "Диалог0", dialogPosX_0, dialogPosY_0, 202, 247, 4, 1);
loop()
{
if(flag_button0[0]){
flag_button0[0]=0;
strcpy(#d[0], "aweaweaweaeaweaweaweaweaweaweaweawe");
sendmessage(LB_ADDSTRING, 0, address(#d[0]), formatiw(listbox0[0]));
}
sleep(10);
}
end_0:;
function getmessage(0, WM_CREATE)
{
int i;
int j;
char c_text_listbox[999];
h_font = CreateFont(-12, 0, 0, 0, 400, 0, 0, 0, RUSSIAN_CHARSET, 0, 0, 0, 0, "Arial");
button0[0] = CreateWindow(0, "BUTTON", "Добавить строку", WS_VISIBLE | WS_CHILD, 8, 8, 120, 20, gethwnd(0), 0, 0, 0);
listbox0[0] = CreateWindow(0, "LISTBOX", "", WS_VISIBLE | WS_CHILD | WS_BORDER | LBS_NOTIFY | WS_VSCROLL | WS_HSCROLL, 8, 32, 120, 79, gethwnd(0), 0, 0, 0);
for(i=0; i<1; i++)
{
for(j=0; j<count_rows_listbox0[i]; j++)
{
strcpy(#c_text_listbox[0], text_listbox0[i][j]);
sendmessage(LB_ADDSTRING, 0, address(#c_text_listbox[0]), formatiw(listbox0[i]));
}
}
for(i=0; i<1; i++)sendmessage(LB_SETCURSEL, flag_listbox0[i], 0, formatiw(listbox0[i]));
for(i=0; i<1; i++)sendmessage(WM_SETFONT, h_font, TRUE, formatiw(button0[i]));
for(i=0; i<1; i++)sendmessage(WM_SETFONT, h_font, TRUE, formatiw(listbox0[i]));
}
function getmessage(0, WM_COMMAND)
{
int i;
for(i=0; i<1; i++) // обработка нажатий кнопок
{
if(message.lparam == button0[i])
{
if(flag_button0[i])flag_button0[i] = 0;
else flag_button0[i] = 1;
return;
}
}
for(i=0; i<1; i++) // обработка нажатий на список listbox
{
if(message.lparam == listbox0[i])
{
flag_listbox0[i] = sendmessage(LB_GETCURSEL, 0, 0, formatiw(listbox0[i]));
return;
}
}
}
function getmessage(0, WM_CLOSE)
{
DeleteObject(h_font);
goto global end_0; // переход в метке
// close(); // закрыть кибор
} |
|
|
Zireael |
Отправлено: 10 Октября, 2023 - 02:43:39
|
Эксперт
Покинул форум
Сообщений всего: 4465
Дата рег-ции: Нояб. 2017
Репутация: 585
|
Цитата: Как сделать горизонтальную прокрутку в listbox-е?
Отправить сообщение LB_SETHORIZONTALEXTENT указав длину текста в пикселях.
CODE:#define LB_SETHORIZONTALEXTENT 0x0194 |
|
|
|