Zireael |
Отправлено: 23 Марта, 2019 - 01:20:05
|
Эксперт
Покинул форум
Сообщений всего: 4464
Дата рег-ции: Нояб. 2017
Репутация: 585
|
Цитата: StatusCombobox1 = sendmessage(CB_GETCURSEL, 0, 0, formatiw(Combobox1));
messagebox(format(StatusCombobox1));
У меня будь выбрана или нет строка выдает всегда 0
Узнать какая строка выбрана в combobox (Отобразить)CODE:#define WS_CHILD 1073741824
#define WS_VISIBLE 268435456
#define WS_BORDER 8388608
#define CBS_DROPDOWNLIST 3
#define CB_ADDSTRING 323
#define CB_GETCURSEL 327
external(INT, "CreateWindow", "CreateWindowExA", "User32.dll" );
int combo1;
char c[255];
string combo_text[4]={"qwe", "rty", "asd", "123"}; // список строк для комбо
createdialog(0);
showdialog(0, "Диалог", 100, 100, 250, 300, 1, 1);
loop()
{
int StatusCombobox1=sendmessage(CB_GETCURSEL, 0, 0, formatiw(combo1));
textbkcolor(255, 65280);
textout(0, 150, 250, "Выбранная строка: "+format(StatusCombobox1), 1);
sleep(10);
}
function getmessage(0, WM_CREATE)
{
combo1=CreateWindow(0, "COMBOBOX", "", CBS_DROPDOWNLIST | WS_CHILD | WS_VISIBLE | WS_BORDER, 10, 10, 110, 120, gethwnd(0), 0, 0, 0);
// добавление строк в комбо из массива
for(int i=0; i<sizearray(combo_text); i++)
{
strcpy(#c[0], combo_text[i]);
sendmessage(CB_ADDSTRING, 0, address(#c[0]), formatiw(combo1));
}
}
Цитата: WM_MOUSEWHEEL
CODE:int x=0;
createdialog(0);
showdialog(0, "Диалог", 100, 100, 350, 200, 1, 1);
textbkcolor(255, 65280);
loop()
{
textout(0, 120, 220, "Крутим колёсико вверх или вниз: "+format(x), 1);
sleep(10);
}
function getmessage(0, WM_MOUSEWHEEL)
{
if(message.wparam>0)x++;
else x--;
} |
|
|
007wan |
Отправлено: 23 Марта, 2019 - 09:29:22
|
Эксперт
Покинул форум
Сообщений всего: 1837
Дата рег-ции: Март 2017
Репутация: -2
|
Zireael пишет:
Узнать какая строка выбрана в combobox (Скрыть) Печально, но не работает в моем коде. Всегда показывает единицу, я даже прибег к таким мерам как: удаление из своего кода все, что связанное с комбо и переменные и вставил то, что выше и куда надо как тут, так и там в коде у меня.В лупе показывает текстаут, что комбо строка выбрана всегда 0. Может это как-то связанно с тем, что у меня открыто 2 диалога? У меня комбо находится в "настройках"
(Добавление)
Zireael пишет: код1 (Отобразить)CODE:int x=0;
createdialog(0);
showdialog(0, "Диалог", 100, 100, 350, 200, 1, 1);
textbkcolor(255, 65280);
loop()
{
textout(0, 120, 220, "Крутим колёсико вверх или вниз: "+format(x), 1);
sleep(10);
}
function getmessage(0, WM_MOUSEWHEEL)
{
if(message.wparam>0)x++;
else x--;
} За это конечно. Отдельное спасибо.
(Добавление)
код2 (Отобразить)CODE:#define WS_CHILD 1073741824
#define WS_VISIBLE 268435456
#define WS_BORDER 8388608
#define CBS_DROPDOWNLIST 3
#define CB_ADDSTRING 323
#define CB_GETCURSEL 327
#define MNS_NOTIFYBYPOS 134217728
#define MIM_STYLE 16
#define MF_POPUP 16
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" );
int combo1;
char c[255];
string combo_text[4]={"qwe", "rty", "asd", "123"}; // ñïèñîê ñòðîê äëÿ êîìáî
int MENUINFO[7]={28, MIM_STYLE, MNS_NOTIFYBYPOS, 0, 0, 0, 0};
int HMENU, HMENU2=CreatePopupMenu();
AppendMenu(HMENU2, MF_POPUP, 1, "Îòêðûòü" );
HMENU=CreateMenu();
AppendMenu(HMENU, MF_POPUP, HMENU2, "Íàñòðîéêè" );
win Setting;
createdialog(0);
createdialog(1);
showdialog(0, "Äèàëîã",100, 100, 300, 300, 1, 1);
function getmessage(0, WM_CREATE)
{
SetMenuInfo(HMENU, address(#MENUINFO[0]));
SetMenu(gethwnd(0), HMENU);
}
function getmessage(0, WM_MENUCOMMAND) //Îòëàâëèâàåì êëèê ïî ïóíêòó ìåíþ
{
if (message.lparam==HMENU2)
{
showdialog(1, "Äèàëîã2",500, 100, 200, 200, 0, 1);
Setting = window ("Äèàëîã2");
combo1=CreateWindow(0, "COMBOBOX", "", CBS_DROPDOWNLIST | WS_CHILD | WS_VISIBLE | WS_BORDER, 10, 10, 110, 120, formatwi(Setting), 0, 0, 0);
// äîáàâëåíèå ñòðîê â êîìáî èç ìàññèâà
for(int i=0; i<sizearray(combo_text); i++)
{
strcpy(#c[0], combo_text[i]);
sendmessage(CB_ADDSTRING, 0, address(#c[0]), formatiw(combo1));
}
}
}
loop()
{
int StatusCombobox1=sendmessage(CB_GETCURSEL, 0, 0, formatiw(combo1));
textbkcolor(255, 65280);
textout(0, 150, 250, "Âûáðàííàÿ ñòðîêà: "+format(StatusCombobox1), 1);
sleep(10);
}
Сдесь странно, но работает и только 1 раз после повторного открытия настроек не работает
(Добавление)
Извиняюсь за раскладку(Отредактировано автором: 23 Марта, 2019 - 09:44:59) |
|
|
Zireael |
Отправлено: 23 Марта, 2019 - 11:21:36
|
Эксперт
Покинул форум
Сообщений всего: 4464
Дата рег-ции: Нояб. 2017
Репутация: 585
|
Цитата: Сдесь странно, но работает и только 1 раз после повторного открытия настроек не работает
Здесь.
Нужно создавать комбо 1 раз в момент создания окна, а не при каждом вызове меню.
code (Отобразить)CODE:#define WS_CHILD 1073741824
#define WS_VISIBLE 268435456
#define WS_BORDER 8388608
#define CBS_DROPDOWNLIST 3
#define CB_ADDSTRING 323
#define CB_GETCURSEL 327
#define MNS_NOTIFYBYPOS 134217728
#define MIM_STYLE 16
#define MF_POPUP 16
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" );
int combo1;
char c[255];
string combo_text[4]={"qwe", "rty", "asd", "123"}; // список строк для комбо
int MENUINFO[7]={28, MIM_STYLE, MNS_NOTIFYBYPOS, 0, 0, 0, 0};
int HMENU, HMENU2=CreatePopupMenu();
AppendMenu(HMENU2, MF_POPUP, 1, "Открыть" );
HMENU=CreateMenu();
AppendMenu(HMENU, MF_POPUP, HMENU2, "Настройки" );
createdialog(0);
createdialog(1);
showdialog(0, "Диалог",100, 100, 300, 300, 1, 1);
function getmessage(0, WM_CREATE)
{
SetMenuInfo(HMENU, address(#MENUINFO[0]));
SetMenu(gethwnd(0), HMENU);
}
function getmessage(1, WM_CREATE)
{
combo1=CreateWindow(0, "COMBOBOX", "", CBS_DROPDOWNLIST | WS_CHILD | WS_VISIBLE | WS_BORDER, 10, 10, 110, 120, gethwnd(1), 0, 0, 0);
for(int i=0; i<sizearray(combo_text); i++)
{
strcpy(#c[0], combo_text[i]);
sendmessage(CB_ADDSTRING, 0, address(#c[0]), formatiw(combo1));
}
}
function getmessage(0, WM_MENUCOMMAND)
{
if (message.lparam==HMENU2)showdialog(1, "Диалог2",500, 100, 200, 200, 0, 1);
}
loop()
{
int StatusCombobox1=sendmessage(CB_GETCURSEL, 0, 0, formatiw(combo1));
textbkcolor(255, 65280);
textout(0, 150, 250, "Выбранная строка: "+format(StatusCombobox1), 1);
sleep(10);
} |
|
|
|