![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Edit+выпадающий список [Delphi, Windows]
Ajax © (2004-01-29 09:46:00)Как можно приделать к Edit выпадающий список от ComboBox? ComboBox я использовать не могу, потому что у него нет нескольких нужных мне свойств.
Ajax (2004-02-07 18:58:00) [1]>Ты б ещё спросил, можно ли самому кнопку Пуск нажимать.
Хорошо, сформулирую по-другому. Как это сделать?
SPeller (2004-02-07 18:30:00) [2]
> А можно ли такое реализовать самому?
Ты б ещё спросил, можно ли самому кнопку Пуск нажимать.
Ajax (2004-02-07 09:28:00) [3]>Vladimir Kladov (03.02.04 19:05) [17]
А можно ли такое реализовать самому?
Vladimir Kladov (2004-02-03 19:05:00) [4]Стилем окна WS_POPUP.
Ajax (2004-02-02 15:22:00) [5]>Кстати, убрать кнопку можно установив свойство csSimple в True
У меня в этот момент кнопка исчезает, но вместо нее образуется постоянно присутствующий список, что есть не очень хорошо.
Мне уже стало просто теоретически интересно каким образом реализуется поведение выпадающего списка. И как он отображается без формы под ним???
SPeller (2004-02-02 08:05:00) [6]Кстати, заметил только что. Если установлено свойство coSimple, то среди детей есть ComboLBox, а если не установлено, то его среди детей нет.
SPeller (2004-02-02 07:52:00) [7]Кстати, убрать кнопку можно установив свойство csSimple в True. А в остальном... Ну неужели так принципиально выравнивание?
Ajax (2004-02-01 16:14:00) [8]И все-таки, как получить выпадающий список без эдита???
Ajax (2004-02-01 16:12:00) [9]У Edit'ов выравнивание текста можно выставить только 1 раз - во время создания.
function EnumChildProc(Wnd: hWnd; SL: String): BOOL; stdcall;
begin
Result := Wnd <> 0;
if Result then
begin
SetWindowLong(wnd,GWL_STYLE,GetWindowLong(wnd,GWL_STYLE) or ES_Right);
EnumChildWindows(Wnd, @EnumChildProc, 0);
end;
end;
EnumChildWindows(combobox1.Handle, @EnumChildProc, 0);
Если изменять не ES_Right, а скажем ES_UPPERCASE, то все нормально. Для ES_Right не может работать.
SPeller (2004-02-01 10:07:00) [10]
> вообще-то два, еще listbox, который собственно и выпадает.
EnumChildWindows показывает только одно. Да и понятно, как мне кажется, потому что этот список является окном верхнего уровня (EnumWindows его видит), и потому что этот список не ограничен клиентской частью главного окна листбокса, а все дети окна ограничиваются. Я думал что кнопочка - это тоже окно, но оказалось что она рисуется самим комбобоксом на своём же окне.
Vladimir Kladov (2004-01-31 10:40:00) [11]вообще-то два, еще listbox, который собственно и выпадает.
SPeller (2004-01-30 15:54:00) [12]Дык, комбо это и есть комбо!!! А у него в детях есть одно единственное окно - самый обычный едит! Сделай EnumChildWindows и сам увидишь. Берёшь этот хендл и делай с этим едитом всё что угодно.
Ajax (2004-01-30 13:27:00) [13]Для Edit'ов я делаю так:
ComboBox1 := NewComboBox( Form, [ coNoIntegralHeight ] ).SetPosition( 48, 40 ).SetSize( 185, 0 );
ComboBox1.TextAlign:=taRight;
ComboBox1.Show;
Потому как после создания выравнивание уже не изменишь.
Но для Combo такой вариант не работает.
SetWindowLong(combobox1.Handle,GWL_STYLE,ES_RIGHT);
Тоже никакого эффекта не дает.
SPeller (2004-01-30 12:42:00) [14]Слушай, выравнивание текста можно и в ран-тайм, через SetWindowLong. В КОЛ так и сделано - выравнивание задаётся после создания контрола.
Ajax (2004-01-30 11:59:00) [15]Дело в том, что для выпадения этому списку не нужна форма, то есть я имею ввиду, что он с легкостью может выпадать в пустоту (за пределы формы родителя), что мне собственно и надо.
Была мысль PopUp меню использовать, но так не слишком красиво получается...
SPeller (2004-01-30 10:35:00) [16]
> Выпадающий список от комбо - это вообще кто???
Это отдельный класс окна. Видимо, типа наследника от листбокса или что-то вроде.
Ajax (2004-01-30 08:08:00) [17]В частности мне нужна возможность изменения выравнивания текста. Для Edit это можно сделать только во время создания, поэтому не представляю как можно сделать это для ComboBox. Попробывал так же как и для Edit - не получилось. Потом совершенно не нужна стрелка, открывающая список. Ну и так по мелочи, то, что действительно сделать не сложно.
Выпадающий список от комбо - это вообще кто???
SPeller (2004-01-30 06:19:00) [18]Лучше не прикручивать такой список. Больше возни будет чем добавить свойства к встроенному edit-у. Какие свойства теюе нужны, может их просто сделать?
Ajax (2004-01-29 21:26:00) [19]Да уж больно возни много будет я так чувствую... А вот выпадающий список без Edit в природе встречается??? Или что вообще можно использовать вместо такового???
SPeller (2004-01-29 09:57:00) [20]Ну так реализуйте их. Внутри такого комбобокса просто лежит обыкновенный edit. Только, подобираться к нему придётся через WinApi.