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 Deselektion von ListView-Items bei Rechtsklick vermeiden? (https://www.delphipraxis.net/172376-deselektion-von-listview-items-bei-rechtsklick-vermeiden.html)

PeterPanino 29. Dez 2012 16:10

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?

Popov 29. Dez 2012 16:18

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.

PeterPanino 29. Dez 2012 17:16

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.

Bummi 29. Dez 2012 17:46

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.

PeterPanino 29. Dez 2012 18:16

AW: Deselektion von ListView-Items bei Rechtsklick vermeiden?
 
Zitat:

Zitat von Bummi (Beitrag 1197080)
Delphi-Quellcode:
type
  TListView=Class(ComCtrls.TListView)
     Procedure MyRightMouse(Var msg:TWMRButtonDown);message WM_RButtonDown;
  End;

procedure TListView.MyRightMouse(var msg: TWMRButtonDown);
var
 p:TPoint;
begin
   p := ClientToScreen( Point(msg.XPos,msg.YPos));
   Form1.Popupmenu1.Popup(p.x,p.y);
   msg.Result := -1;
end;

Phantastisch, es funktioniert! Du bist ein Genie, vielen Dank!

Bummi 29. Dez 2012 18:46

AW: Deselektion von ListView-Items bei Rechtsklick vermeiden?
 
das
Delphi-Quellcode:
Form1.Popupmenu1.Popup(p.x,p.y);
ist nicht so hübsch, ich war etwas huddelig

Delphi-Quellcode:
If Assigend(Popupmenu) then
  Popupmenu.Popup(p.x,p.y);
ist geschmeidiger

PeterPanino 29. Dez 2012 20:20

AW: Deselektion von ListView-Items bei Rechtsklick vermeiden?
 
Zitat:

Zitat von Bummi (Beitrag 1197088)
das
Delphi-Quellcode:
Form1.Popupmenu1.Popup(p.x,p.y);
ist nicht so hübsch, ich war etwas huddelig
Delphi-Quellcode:
If Assigend(Popupmenu) then
  Popupmenu.Popup(p.x,p.y);
ist geschmeidiger


Wieso, das Popupmenü wird doch zusammen mit der Form erzeugt? Wieso sollte die Nachricht erfolgen, bevor das Formular erzeugt wird?

Bummi 29. Dez 2012 23:30

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 21:50 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