![]() |
Deselektion von ListView-Items bei Rechtsklick vermeiden?
Hallo! Wie kann man in einer Listview beim Rechtsklick auf eine leere Stelle verhindern, dass selektierte Items deselektiert werden? Der Grund: Mit dem Rechtsklick wird ein Popupmenü aufgerufen, mit dem die selektierten Items bearbeitet werden sollen.
Eine Möglichkeit wäre, dass man sich die selektierten Items im OnChange-Eventhandler etwa in einer Liste merkt und nach dem Rechtsklick die Selektionen wiederherstellt. Das ist aber sehr umständlich und möglicherweise auch ziemlich fehleranfällig. Kennt jemand eine andere, einfachere Möglichkeit? |
AW: Deselektion von ListView-Items bei Rechtsklick vermeiden?
Eigentlich sollte es nicht deselektiert werden. LV verliert zwar den Fokus, die Items sollten aber selektiert bleiben.
//Edit: Evtl. war ich zu vorschnell mit der Aussage. Ich teste mal was. Anscheinend habe ich das mit HideSections durcheinander gebracht. |
AW: Deselektion von ListView-Items bei Rechtsklick vermeiden?
Mhm, ein Workaround wäre, dass man statt selektierte Items einfach Checkboxes verwendet. Die können beim Rechtsklick nicht demarkiert werden.
Aber es wäre andererseits schon schön, wenn man das Deselektieren beim Rechtsklick optional vermeiden könnte. |
AW: Deselektion von ListView-Items bei Rechtsklick vermeiden?
Delphi-Quellcode:
unit Unit1;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, Menus, ComCtrls; type TListView=Class(ComCtrls.TListView) Procedure MyRightMouse(Var msg:TWMRButtonDown);message WM_RButtonDown; End; TForm1 = class(TForm) ListView1: TListView; PopupMenu1: TPopupMenu; mn1: TMenuItem; private { Private-Deklarationen } public { Public-Deklarationen } end; var Form1: TForm1; implementation {$R *.dfm} { TListView } procedure TListView.MyRightMouse(var msg: TWMRButtonDown); var p:TPoint; begin p := ClientToScreen( Point(msg.XPos,msg.YPos)); if assigned(Popupmenu) then Popupmenu.Popup(p.x,p.y); msg.Result := -1; end; end. |
AW: Deselektion von ListView-Items bei Rechtsklick vermeiden?
Zitat:
|
AW: Deselektion von ListView-Items bei Rechtsklick vermeiden?
das
Delphi-Quellcode:
ist nicht so hübsch, ich war etwas huddelig
Form1.Popupmenu1.Popup(p.x,p.y);
Delphi-Quellcode:
ist geschmeidiger
If Assigend(Popupmenu) then
Popupmenu.Popup(p.x,p.y); |
AW: Deselektion von ListView-Items bei Rechtsklick vermeiden?
Zitat:
Wieso, das Popupmenü wird doch zusammen mit der Form erzeugt? Wieso sollte die Nachricht erfolgen, bevor das Formular erzeugt wird? |
AW: Deselektion von ListView-Items bei Rechtsklick vermeiden?
Das Popupmenü könnte dynamisch ausgetauscht/entfernt werden, TForm1 könnte dynamisch erzeugt werden, ohne dass die "Variable" Form1 verwendet wird etc. Ist wahrscheinlich für Deine Anwendung alles sehr hypothetisch. Mit dem Bezug auf die Property Popupmenu sind die externen harten Referenzen vom Tisch und man könnte es so ähnlich auch in einer Komponente verwenden. (gegf. mit einem inherited bei nicht zugewiesenem Popupmenu o.ä.)
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:40 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