Hola Neeruu.
Una forma de hacer lo que buscas podría ser esta:
Form que invoca:
Código Delphi
[-]
...
implementation
uses Unit2;
procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
if Button = mbRight then TForm2.PopUp(ActiveControl.Left,ActiveControl.Top); end;
procedure TForm1.FormClick(Sender: TObject);
begin
if Assigned(Form2) then
Form2.Close; end;
Form contextual:
Código Delphi
[-]
...
implementation
class procedure TForm2.PopUp(ALeft,ATop: Integer);
begin
if not Assigned(Form2) then
begin
Form2:= TForm2.Create(nil);
with Form2 do
begin
FormStyle:= fsNormal;
BorderIcons:=[];
BorderStyle:= bsSingle;
end;
Form2.Left:= Form2.Left + ALeft;
Form2.Top:= Form2.Top + ATop;
end;
Form2.Show;
end;
....
procedure TForm2.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Action:= caFree;
end;
procedure TForm2.FormDestroy(Sender: TObject);
begin
Form2:= nil;
end;
Pero no se comporta como un
TPopupMenu ya que no se puede asignar a un control determinado y sólo responde a los eventos
OnMouseDown y
OnClick
del form invocante...
Tal vez te sirva de base para elaborar alguna otra idea...
Saludos.