Привет всем!
По событию нажатия кнопки нужно отобразить форму как выпадающий listbox у combobox'а, т. е. без деактивации главного окна.
Использую компонент EhLib DBEditEh с кнопкой.
Собственно за основу взят тот же механизм что и у TCustonDBComboBoxEh.
Форма выводится, как и нужно поверх родителей, но при этом всё, что на форме недоступно (кнопки не кликаются, в текстовые поля курсор не ставится).
Это код всплывающей формы:
Код:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 | 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 ;
|
А это процедура кнопки:
Код:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | 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;
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 ;
|