Edit випадає

Edit + випадає

Як можна приробити до Edit випадає від ComboBox? ComboBox я використовувати не можу, тому що у нього немає стількох мені властивостей.

Ну так реалізуйте їх. Усередині такого комбобокса просто лежить звичайний edit. Тільки, подобіраться до нього доведеться через WinApi.

Да уж больно метушні багато буде я так відчуваю. А ось, що випадає без Edit в природі зустрічається. Або що взагалі можна використовувати замість такого.

Краще не прикручувати такий список. Більше метушні буде чим додати властивості до вбудованого edit-у. Які властивості теюе потрібні, може їх просто зробити?

Зокрема мені потрібна можливість зміни вирівнювання тексту. Для Edit це можна зробити тільки під час створення, тому не уявляю як можна зробити це для ComboBox. Спробувати так само як і для Edit - не вийшло. Потім абсолютно не потрібна стрілка, що відкриває список. Ну і так по дрібниці, то, що дійсно зробити не складно.

Список, що випадає від комбо - це взагалі хто.


> Список, що випадає від комбо - це взагалі хто.

Це окремий клас вікна. Мабуть, типу спадкоємця від лістбокса або щось на зразок.

Справа в тому, що для випадання цього списку не потрібна форма, тобто я маю на увазі, що він з легкістю може випадати в порожнечу (за межі форми батька), що мені власне і треба.

Була думка PopUp меню використовувати, але так не надто гарно виходить.

Слухай, вирівнювання тексту можна і в ран-тайм, через SetWindowLong. В КОЛ так і зроблено - вирівнювання задається після створення контрола.

Для Edit "ов я роблю так:
ComboBox1: = NewComboBox (Form, [coNoIntegralHeight]) .SetPosition (48, 40) .SetSize (185, 0);
ComboBox1.TextAlign: = taRight;
ComboBox1.Show;
Тому як після створення вирівнювання вже не зміниш.
Але для Combo такий варіант не працює.

SetWindowLong (combobox1.Handle, GWL_STYLE, ES_RIGHT);
Теж ніякого ефекту не дає.

Дик, комбо це і є комбо. А у нього в дітях є одне єдине вікно - самий звичайний Едіт! Зроби EnumChildWindows і сам побачиш. Береш цей хендл і роби з цим Едіт все що завгодно.

взагалі-то два, ще listbox, який власне і випадає.


> Взагалі-то два, ще listbox, який власне і випадає.

EnumChildWindows показує тільки одне. Та й зрозуміло, як мені здається, тому що цей список є вікном верхнього рівня (EnumWindows його бачить), і тому що цей список не обмежений клієнтською частиною головного вікна лістбокса, а всі діти вікна обмежуються. Я думав що кнопочка - це теж вікно, але виявилося що вона малюється самим комбобоксом на своєму ж вікні.

У Edit "ов вирівнювання тексту можна виставити тільки 1 раз - під час створення.

function EnumChildProc (Wnd: hWnd; SL: String): BOOL; stdcall;
begin
# XA0; Result: = Wnd <> 0;
# XA0; if Result then
# XA0; begin
# XA0; # XA0; SetWindowLong (wnd, GWL_STYLE, GetWindowLong (wnd, GWL_STYLE) or ES_Right);
# XA0; # XA0; EnumChildWindows (Wnd, @EnumChildProc, 0);
# XA0; end;
end;

EnumChildWindows (combobox1.Handle, @EnumChildProc, 0);

Якщо змінюються не ES_Right, а скажімо ES_UPPERCASE, то все нормально. Для ES_Right не може працювати.

І все-таки, як отримати список, що випадає без едіта.

До речі, прибрати кнопку можна встановивши властивість csSimple в True. А в іншому. Ну невже так принципово вирівнювання?

До речі, помітив тільки що. Якщо встановлено властивість coSimple, то серед дітей є ComboLBox, а якщо не встановлено, то його серед дітей немає.

> До речі, прибрати кнопку можна встановивши властивість csSimple в True
У мене в цей момент кнопка зникає, але замість неї утворюється постійно присутній список, що є не дуже добре.

Мені вже стало просто теоретично цікаво яким чином реалізується поведінка списку. І як він відображається без форми під ним.

Стилем вікна WS_POPUP.

> Vladimir Kladov (03.02.04 19:05) [17]
А чи можна таке реалізувати самому?


> А чи можна таке реалізувати самому?

Ти б ще запитав, чи можна самому кнопку Пуск натискати.

> Ти б ще запитав, чи можна самому кнопку Пуск натискати.
Добре, сформулюю по-іншому. Як це зробити?

Схожі статті