Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

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.


Наверх

Титульная страница Поиск, карта сайта Написать письмо