Похоже, вам нужна форма, которая выглядит как всплывающее меню, но содержит компоненты.
Проще, если у вас есть компонент, у которого есть событие OnMouseDown, такое как TPanel, показанный в этом примере, и вы просто всплываете вторую форму, которая содержит элементы управления, которые вы хотите открыть:
procedure TForm3.JvPanel1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
if Button=mbRight then
FDown := true
else
FDown := false;
end;
procedure TForm3.JvPanel1MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
var
pt:TPoint;
begin
if Button=mbRight then begin
FDown := true;
pt.X := jvPanel1.Left;
pt.Y := jvPanel1.Top+jvPanel1.Height;
pt := ClientToScreen(pt);
Form4.Position := poDesigned;
Form4.BorderStyle := bsNone;
Form4.Left := pt.X;
Form4.Top := pt.Y;
Form4.Show;
end;
end;
Это обрабатывает форму, показывая себя и позиционируя себя как всплывающее окно.
вторая форма, скрывающая себя, тоже легка:
procedure TForm4.FormDeactivate(Sender: TObject);
begin
Hide;
end;
альтернативный текст http://img718.imageshack.us/img718/8171/formlookslikepopup.png