Приветствую, как подстроить ширину раскрывающейся части списка combobox под максимальную длину строки в нём? Нашёл ComboBox.DropDownWidth, но не понимаю можно ли его использовать и как.
В процессе работы скрипта длина строки в combobox может меняться.
51. neba2101 - 29 Января, 2023 - 03:36:56 - перейти к сообщению
52. Zireael - 29 Января, 2023 - 04:22:45 - перейти к сообщению
Цитата:
как подстроить ширину раскрывающейся части списка 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));
}
#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));
}
53. neba2101 - 12 Февраля, 2023 - 13:18:21 - перейти к сообщению
54. Zireael - 12 Февраля, 2023 - 13:41:00 - перейти к сообщению
Цитата:
как изменить текст в combobox?
Удалить значение, вставить новое.
CODE:
#define CB_DELETESTRING 0x0144
#define CB_INSERTSTRING 0x014A
#define CB_INSERTSTRING 0x014A
55. Kibor - 24 Апреля, 2023 - 02:07:07 - перейти к сообщению
Не внимательность моя..
Почистил тему от мусора.
Почистил тему от мусора.
56. Martin - 30 Апреля, 2023 - 08:06:48 - перейти к сообщению
А можно снять ограничение на 100 создаваемых статиков?
57. Zireael - 30 Апреля, 2023 - 08:16:03 - перейти к сообщению
Цитата:
А можно снять ограничение на 100 создаваемых статиков?
Можно. Но, лучше придумать более адекватный интерфейс.
58. konctantin777 - 20 Июня, 2023 - 02:53:03 - перейти к сообщению
Zireael пишет:
Но, лучше придумать более адекватный интерфейс.
Жаль, что нет вкладок- просто по ним раскидать )