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 VirtualStringTree Markierung aufheben (https://www.delphipraxis.net/142385-virtualstringtree-markierung-aufheben.html)

Alois 27. Okt 2009 08:05


VirtualStringTree Markierung aufheben
 
Hallo,

ich würde gerne die markierte(n) Zeile(n) aufheben, sobald ich mit der Maus neben den VST-Rahmen geklickt habe
z.B. auf den Rahmen des Fensters oder auf eine Schaltfläche.

Delphi-Quellcode:
vst.ClearSelection;
vst.FocusedNode:= nil;
Gruss Alois ;)

Hawkeye219 27. Okt 2009 08:26

Re: VirtualStringTree Markierung aufheben
 
Hallo Alois,

am einfachsten wäre es wohl, in der Eigenschaft TreeOptions.PaintOptions das Flag toHideSelection zu setzen. Auf diese Weise verlierst du nicht einmal die Auswahl, falls du später den Fokus an den VST zurückgeben möchtest.

Gruß Hawkeye

himitsu 27. Okt 2009 09:54

Re: VirtualStringTree Markierung aufheben
 
Dafür muß er aber den Fokus an ein anderes Control übergeben (bzw. er muß diesen dem VST wegnehmen)
und einfach nur irgendwo danebern hinzuklicken ändert daran nichts.

Also den Vorschlag von dir (Hawkeye219) zusammen mit Folgendem in OnClick der Form:
Delphi-Quellcode:
ActiveControl := nil;
Statt nil kann man auch ein anderes Control angeben (z.B. Edit1 odere was auch immer au deiner Form drauf ist).

Alois 27. Okt 2009 11:51

Re: VirtualStringTree Markierung aufheben
 
Muss ich das jetzt in jedes OnClick-Ereignis reinschreiben oder gibt es eine
andere (Programmweite/Systemweite) Möglichkeit die Markierung zu verlieren?

Delphi-Quellcode:
procedure TForm1.FormClick(Sender: TObject);
begin
  ActiveControl := nil;
  vst.TreeOptions.PaintOptions := [toHideSelection];
end;
Gruss Alois ;)

himitsu 27. Okt 2009 11:55

Re: VirtualStringTree Markierung aufheben
 
Zitat:

Zitat von Alois
Muss ich das jetzt in jedes OnClick-Ereignis reinschreiben oder gibt es einen
andere (Programmweite/Systemweite) Möglichkeit die Markierung zu verlieren?

Es kommt darauf an, wo du hinklicken willst, bzw. wo es alles verschwinden soll, wenn da hingeklickt wurde.

Wenn du eine andere Komponente anklickst, dann verschwindet der Fokus automatisch, da diese andere Komponente meisten diesen bekommt.

Wenn du einfach nur zwischen irgendwelche Komponenten direkt auf die Form klicken willst und es da auch verschwinden soll, dann mußt du der Form dieses sagen, also im OnClick.
Selbes gilt bei Komponenten, welche selber keinen Eingabefokus bekommen (können).


Delphi-Quellcode:
vst.TreeOptions.PaintOptions := [toHideSelection];
dieses nicht im Code, sondern einfach nur im OI umstellen :zwinker:

Alois 27. Okt 2009 12:15

Re: VirtualStringTree Markierung aufheben
 
[quote="himitsu"]
Zitat:

Zitat von Alois
Wenn du eine andere Komponente anklickst, dann verschwindet der Fokus automatisch, da diese andere Komponente meisten diesen bekommt.

Hallo himitsu,

das stimmt so nicht... zumindest ist es bei mir nicht so. Ich benutze VST in einer Tabellenansicht und habe folgende Eigenschaften gesetzt:
Delphi-Quellcode:
vst.TreeOptions.SelectionOptions := [toFullRowSelect, toMultiSelect];
vst.TreeOptions.MiscOptions := [toAccecptOLEDrop, toFullRowDrag];
Bei mir bleibt die Markierung immer gesetzt, egal wo ich hinklicke.

Gruess Alois ;)

himitsu 27. Okt 2009 12:20

Re: VirtualStringTree Markierung aufheben
 
ja und was glaubst du nun, wofür die Option toHideSelection nun gut sein könnte?

Alois 27. Okt 2009 12:46

Re: VirtualStringTree Markierung aufheben
 
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:

Zitat von himitsu
ja und was glaubst du nun, wofür die Option toHideSelection nun gut sein könnte?

Damit passiert auch nicht's. Ich werde noch verrückt.

Mit dem Code (vst.ClearSelection; vst.FocusedNode:= nil;) kann ich die Markierung löschen, mir fehlt nur das passende Ereignis
um egal-wo-ich-draufklicke die Markierung zu verlieren. Ausnahme soll nur der Klick innerhalb
der VST-Komponente sein.

Im Anhang ist eine Demo. Bilder sagen mehr als Worte. Und eine Demo um so mehr.

Gruss Alois ;)

Alois 30. Okt 2009 06:46

Re: VirtualStringTree Markierung aufheben
 
Ich habe nochmal ein Minimalprojekt erstellt (ohne Skins) und habe bemerkt das es wohl an den Speedbuttons liegt.
Bei einem Klick auf einen normalen Button verliere ich die Markierung.

Ich habe es jetzt so gelöst:

Delphi-Quellcode:
procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState;
  X, Y: integer);
begin
  vst.ClearSelection;
  vst.FocusedNode := nil;
end;
Damit verliere ich die Markierung wenn ich die Maus über den vst-Rahmen hinausbewege.

Gruss Alois ;)


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