Avatar billede Slettet bruger
29. december 2002 - 20:49 Der er 7 kommentarer og
1 løsning

Ejer af Popupmenu

Hej

Et lille hurtigt spørgsmål. Jeg sidder med nogle paneler og som alle har den samme popupmenu, popupmenu1. Hvordan kan jeg se hvilket af panelerne der har udløst popupmenuen, når en kommando i popupmenu1 trykkes på ?

/Mikkel
Avatar billede zerohero Nybegynder
29. december 2002 - 23:04 #1
Prøv dette... Jeg har to TPanels, en TPopupMenu og en procedure "Popup(Sender: TObject)":

type
  TForm1 = class(TForm)
    Panel1: TPanel;
    Panel2: TPanel;
    PopupMenu1: TPopupMenu;
    Test1: TMenuItem;
    procedure Panel1MouseUp(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure Panel2MouseUP(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure Popup(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.Panel1MouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  if Button = mbRight then
  Popup(TWinControl(Sender));
end;

procedure TForm1.Panel2MouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  if Button = mbRight then
  Popup(TWinControl(Sender));
end;


procedure TForm1.Popup(Sender: TObject);
var
  P : TPoint;
begin
  GetCursorPos(P);
  with P do
  PopupMenu1.Popup(X,Y);
  with TWincontrol(Sender) do
  ShowMessage(Name);
end;

ZeroHero
Avatar billede zerohero Nybegynder
29. december 2002 - 23:07 #2
PS: Min TPopupMenu har en TMenuItem (bare lige så du kan se når popupmenu bliver "udløst")...
Avatar billede Slettet bruger
29. december 2002 - 23:12 #3
tak for koden. Men mit problem er at jeg ikke kan definere onMouseUp-events for panelet eftersom jeg creater panelet i runtime :-( Så hvordan kan jeg så gøre det ?
Avatar billede zerohero Nybegynder
29. december 2002 - 23:17 #4
Men det er meget let...

bare skriv koden jeg har vist og derefter skriv følgende i din TForm's OnCreatre event:

Panel1.OnMouseUp := Panel1MouseUp;
Panel2.OnMouseUp := Panel2MouseUp;

og så skulle den være hjemme...
Avatar billede Slettet bruger
29. december 2002 - 23:43 #5
Jeg har ændret lidt på koden, og den ser nu sådan her ud:

procedure TMDIChild.Panel1MouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  if (Button = mbRight) and (TWinControl = TPanel)then
  Popup(TWinControl(Sender));
end;

Problemet er bare at den heller ikke passere "if (...) then" selvom TWinControl, altså der hvorfra man åbner popuppen, ER et panel. Hvorfor ?
Avatar billede zerohero Nybegynder
29. december 2002 - 23:49 #6
Prøv dette i stedet...

procedure TMDIChild.Panel1MouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
if (Button = mbRight) and (TWinControl(Sender).ClassType = TPanel) then
  Popup(TWinControl(Sender));
end;
Avatar billede Slettet bruger
29. december 2002 - 23:51 #7
Glem det... Jeg tænkte mig ikke lige om.
Avatar billede Slettet bruger
29. december 2002 - 23:52 #8
nå, ok. Tak.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester