Zireael |
Отправлено: 29 Января, 2023 - 12:22:45
|
Эксперт
Покинул форум
Сообщений всего: 4461
Дата рег-ции: Нояб. 2017
Репутация: 585
|
Цитата: как подстроить ширину раскрывающейся части списка combobox
CODE:#define WS_VISIBLE 0x10000000
#define WS_CHILD 0x40000000
#define CBS_DROPDOWNLIST 0x0003
#define CB_ADDSTRING 0x0143
#define CB_GETCURSEL 0x0147
#define CB_SETDROPPEDWIDTH 0x160
external(INT, "GetTextExtentPoint32", "GetTextExtentPoint32A", "Gdi32.dll");
external(INT, "GetDC", "GetDC", "User32.dll");
external(INT, "CreateWindow", "CreateWindowExA", "User32.dll");
int combo, hdc, max_length=0;
createdialog(0);
showdialog(0, "Диалог", 300, 300, 500, 300, 1, 1);
loop()sleep(10);
function getmessage(0, WM_CREATE)
{
combo=CreateWindow(0, "COMBOBOX", "", CBS_DROPDOWNLIST | WS_VISIBLE | WS_CHILD, 10, 10, 140, 160, gethwnd(0), 0, 0, 0);
hdc=GetDC(combo);
// добавление строк в комбо
add_combo("123");
add_combo("zzzzzzzzzzzzzzzzzzzzzzzzzzzzz 999");
add_combo("456");
}
function add_combo(string s)
{
int SIZE[2];
char c[999]; strcpy(#c[0], s);
GetTextExtentPoint32(hdc, address(#c[0]), size(#c[0]), address(#SIZE[0])); // узнать длину текста в пикселях
if(max_length<SIZE[0])
{
max_length=SIZE[0]; // запомнить максимальную длину строки
sendmessage(CB_SETDROPPEDWIDTH, SIZE[0]+10, 0, formatiw(combo)); // установить ширину для combo
}
sendmessage(CB_ADDSTRING, 0, address(#c[0]), formatiw(combo));
} |
|
|
neba2101 |
Отправлено: 12 Февраля, 2023 - 21:18:21
|
Мастер
Покинул форум
Сообщений всего: 154
Дата рег-ции: Февр. 2017
Репутация: 4
|
Приветствую, как изменить текст в combobox? Спасибо!
Код (Отобразить)CODE:#define WS_VISIBLE 0x10000000
#define WS_CHILD 0x40000000
#define WS_BORDER 0x00800000
#define BS_MULTILINE 0x00002000
#define CBS_DROPDOWNLIST 0x0003
#define CB_ADDSTRING 0x0143
#define CB_GETCURSEL 0x0147
#define CB_SETCURSEL 0x014E
#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 combobox0[1];
int flag_combobox0[1] = { 0 };
string text_combobox0[1][5];
int count_rows_combobox0[1] = { 5 };
text_combobox0[0][0] = "1"; text_combobox0[0][1] = "2"; text_combobox0[0][2] = "3"; text_combobox0[0][3] = "4"; text_combobox0[0][4] = "5";
createdialog(0);
showdialog(0, "Диалог0", dialogPosX_0, dialogPosY_0, 320, 301, 4, 1);
string new_name;
loop()
{
if(flag_button0[0]){
flag_button0[0]=0;
new_name=input("Введи новое название.");
text_combobox0[0][flag_combobox0[0]] = new_name;
//Как обновить значение в combobox0[0] ???????????????????????
}
sleep(10);
}
end_0:;
function getmessage(0, WM_CREATE)
{
int i;
int j;
char c_text_combobox[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, 112, 8, 80, 20, gethwnd(0), 0, 0, 0);
combobox0[0] = CreateWindow(0, "COMBOBOX", "", WS_VISIBLE | WS_CHILD | WS_BORDER | CBS_DROPDOWNLIST, 8, 8, 100, 108, gethwnd(0), 0, 0, 0);
for(i=0; i<1; i++)
{
for(j=0; j<count_rows_combobox0[i]; j++)
{
strcpy(#c_text_combobox[0], text_combobox0[i][j]);
sendmessage(CB_ADDSTRING, 0, address(#c_text_combobox[0]), formatiw(combobox0[i]));
}
}
for(i=0; i<1; i++)sendmessage(CB_SETCURSEL, flag_combobox0[i], 0, formatiw(combobox0[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(combobox0[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++) // обработка нажатий на список combobox
{
if(message.lparam == combobox0[i])
{
flag_combobox0[i] = sendmessage(CB_GETCURSEL, 0, 0, formatiw(combobox0[i]));
return;
}
}
}
function getmessage(0, WM_CLOSE)
{
DeleteObject(h_font);
goto global end_0; // переход в метке
// close(); // закрыть кибор
}
|
|
|
Zireael |
Отправлено: 12 Февраля, 2023 - 21:41:00
|
Эксперт
Покинул форум
Сообщений всего: 4461
Дата рег-ции: Нояб. 2017
Репутация: 585
|
Цитата: как изменить текст в combobox?
Удалить значение, вставить новое.
CODE:#define CB_DELETESTRING 0x0144
#define CB_INSERTSTRING 0x014A |
|
|
|