![]() |
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:
Die Variable fLastSender habe ich global als TObject deklariert.
procedure TfmMain.pmListViewsPopup(Sender : TObject);
begin fLastSender := Sender; end; Sie wird ja auch gesetzt, jedoch ist es dann das PopUpMenu, welches hineingeschrieben wurde. Was ist falsch. Was muss ich anders machen. mfg seifman |
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:
Hier wird das PopupMenu direkt in der OnClick-Routine definiert.
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; Willst du es lieber dynamisch halten, so kannst du folgende Routine verwenden:
Delphi-Quellcode:
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.
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; Greetz alcaeus |
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. |
Re: Herausfinden, welches ListView Popup aufruft
Mit
Delphi-Quellcode:
kommst Du an die auslösende ListView ran ;)
(PopupMenu1.PopupComponent as TListView)...
...:cat:... |
Re: Herausfinden, welches ListView Popup aufruft
Dankeshön an euch beide.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:54 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz