Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Herausfinden, welches ListView Popup aufruft (https://www.delphipraxis.net/25352-herausfinden-welches-listview-popup-aufruft.html)

seifman 5. Jul 2004 10:51


Herausfinden, welches ListView Popup aufruft
 
Hallo!

Ich habe eine Form, auf der mehrere ListViews liegen. An jedem hängt ein und dasselbe Popupmenu dran. Ich möchte nun herausbekommen in welchem der Listviews das Popup aufgerufen wurde.
Habe es schon fogendermaßen probiert :
Code:
procedure TfmMain.pmListViewsPopup(Sender : TObject);
begin
  fLastSender := Sender;
end;
Die Variable fLastSender habe ich global als TObject deklariert.

Sie wird ja auch gesetzt, jedoch ist es dann das PopUpMenu, welches hineingeschrieben wurde.

Was ist falsch. Was muss ich anders machen.

mfg seifman

alcaeus 5. Jul 2004 11:25

Re: Herausfinden, welches ListView Popup aufruft
 
Eine Möglichkeit wäre, das PopupMenu manuell zu öffnen.
Als einfaches Beispiel kann ich dir das hier bringen. Das PopupMenu brauchst du nicht mehr der Listview zuzuordnen.

Delphi-Quellcode:
procedure TForm1.ListView1MouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
var
  TrackButton: TMouseButton;
begin
  if PopupMenu1.TrackButton = tbRightButton then
    TrackButton := mbLeft
  else
    TrackButton := mbRight;
  fLastSender := Sender;
  if Button = TrackButton then
    PopupMenu1.Popup(Mouse.CursorPos.X, Mouse.CursorPos.Y);
end;
Hier wird das PopupMenu direkt in der OnClick-Routine definiert.
Willst du es lieber dynamisch halten, so kannst du folgende Routine verwenden:
Delphi-Quellcode:
procedure TForm1.ListViewMouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
var
  TrackButton: TMouseButton;
  PopupMenu: TPopupMenu;
begin
  PopupMenu := TPopupMenu(FindComponent('PopupMenu'+IntToStr(TListview(Sender).Tag)));
  if PopupMenu = nil then
  begin
    ShowMessage('Oooops...');
    Exit;
  end;
  if PopupMenu.TrackButton = tbRightButton then
    TrackButton := mbLeft
  else
    TrackButton := mbRight;
  fLastSender := Sender;
  if Button = TrackButton then
    PopupMenu.Popup(Mouse.CursorPos.X, Mouse.CursorPos.Y);
end;
Hier wird das PopupMenu über das Tag der Listview angesprochen. Die PopupMenus müssen den Namen 'PopupMenu#' haben, wobei # irgendeine Nummer ist. Diese Nummer wird dann im Tag angegeben. Wird kein PopupMenu gefunden, so wird z.Zt. eine Fehlermeldung ausgegeben, dies kannst du aber sehr einfach ändern. Der Code ist hoffentlich verständlich genug, ich habe ihn außerdem nicht getestet.


Greetz
alcaeus

seifman 5. Jul 2004 12:47

Re: Herausfinden, welches ListView Popup aufruft
 
Ist leider nicht das was ich wollte.
Ich habe vergessen zu erwähnen, daß ich die ListViews auf verschiedenen Tabs platziert habe.
Ich möchte daß PopUpMenu dazu verwenden, nur Aktionen mit dem ListView durchzuführen, von dem es aufgerufen worden ist.
Die einzelnen Items des ListView habe allesamt Checkboxen. Im PopupMenu habe ich die MenuItems "Select all" und "Deselect all", welche dann alle Checkboxen markieren bzw. demarkieren sollen.

sakura 5. Jul 2004 12:50

Re: Herausfinden, welches ListView Popup aufruft
 
Mit
Delphi-Quellcode:
(PopupMenu1.PopupComponent as TListView)...
kommst Du an die auslösende ListView ran ;)

...:cat:...

seifman 5. Jul 2004 12:54

Re: Herausfinden, welches ListView Popup aufruft
 
Dankeshön an euch beide.


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:27 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz