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 [VST] Einträge mit beliebiger Taste markieren (https://www.delphipraxis.net/148126-%5Bvst%5D-eintraege-mit-beliebiger-taste-markieren.html)

TUX_der_Pinguin 23. Feb 2010 08:14


[VST] Einträge mit beliebiger Taste markieren
 
Hallo DPler/innen,

ich möchte in einem VirtualStringTree (VST) die Einträge durch drücken der Leertaste markieren, wie z.B. in einigen
Dateibrowsern (Total Commander). Jedoch klappt das ganze irgendwie noch nicht so ganz. Das Problem ist wenn ich einem
Eintrag versuche den Status "markiert" zugeben ist dieser ja bereits markiert, ich stehe ja auf dem Eintrag und somit
ist dieser ja bereits in gewisser weise markiert.

Das VST ist im Report Modus.

Mein erster Versuch sieht wie folgt aus nur bringt das Leider nichts und habe bisher auch keine Idee das umzusetzten.

Delphi-Quellcode:
procedure TfrmMain.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
var
  Node : PVirtualNode;

begin
  if Key = VK_SPACE then begin
    Node := vstScroller.FocusedNode;
    if Assigned(Node) then begin

      if not (vsSelected in Node.States) then
        Node.States := Node.States + [vsSelected]
      else
        Node.States := Node.States - [vsSelected];

    end;{if}
  end;{if}

end;
Es geht also darum beliebige Einträge mit der Leertaste zu markieren bzw. die
Markierung wieder aufzuheben wenn man erneut die Leertaste betätigt.

generic 23. Feb 2010 09:02

Re: [VST] Einträge mit beliebiger Taste markieren
 
Du solltest nicht auf die internen Strukturen direkt zugreifen.
Das kann Fehler verursachen!

Also auf Node.* zugreifen = schlecht!

Nutze lieber die VST Methode dafür.
Delphi-Quellcode:
VirtualStringTree1.Selected[node]:=true;
VirtualStringTree1.Selected[node]:=false;
Du wirst das Verhalten vom VST grundlegend ändern müssen.
Wenn du die Cursor Tasten bewegst, dann wird die aktuelle Selektion gelöscht.
Windowsstandard bei Listen.

Also musst du die "STRG"-Taste gedrückt halten, damit der VST sich so verhält wie du es wünscht.
Nur die Taste in den VST schicken ist nicht optimal.

Also eigene VST Klasse erstellen (vererbt von VST) und den Status intern setzen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:12 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