Привет всем!
По событию нажатия кнопки нужно отобразить форму как выпадающий 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;