|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Форма как Listbox у ComboBox
Привет всем!
По событию нажатия кнопки нужно отобразить форму как выпадающий listbox у combobox'а, т. е. без деактивации главного окна. Использую компонент EhLib DBEditEh с кнопкой. Собственно за основу взят тот же механизм что и у TCustonDBComboBoxEh. Форма выводится, как и нужно поверх родителей, но при этом всё, что на форме недоступно (кнопки не кликаются, в текстовые поля курсор не ставится). Это код всплывающей формы: Код:
constructor TForm2.create(Owner: TComponent); begin inherited create(Owner); BorderStyle:=bsNone; Color:=clRed; FSizeGrip:=TSizeGripEh.Create(Self); with Sizes do begin Height:=SelGroups.Height; Width:=SelGroups.width; end; if Height = 0 then Height:= 300; if Width = 0 then Width:= 400; with FSizeGrip do begin Parent:=Self; TriangleWindow:=True; end; end; procedure TForm2.createParams(var params: TCreateParams); begin inherited createParams(params); with params do begin Style := Style or WS_CLIPCHILDREN; ExStyle := (ExStyle or WS_EX_TOOLWINDOW or WS_EX_TOPMOST) and not WS_EX_CLIENTEDGE; end; end; procedure TForm2.createwnd; begin inherited createwnd; windows.SetParent(Handle, 0); CallWindowProc(DefWndProc, Handle, WM_SETFOCUS, 0, 0); end; Код:
procedure TForm1.DBEditEh1EditButtons0Click(Sender: TObject; var Handled: Boolean); var P: TPoint; begin if TComponent(Sender).Owner = DBEditEh1 then begin newfrm:=TForm2.create(DBEditEh1); with newfrm do begin Parent:=DBEditEh1;//указываем nil форма получает фокус, что деактивирует главное окно P:=AlignDropDownWindow(DBEditEh1, newfrm, daLeft); SetWindowPos(Handle, HWND_TOP, p.X, p.Y, 0, 0, SWP_NOSIZE or SWP_SHOWWINDOW); Show; OnMouseUp:=FormMouseUp; end; end; end; |