Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi TVirtualStringTree, erste Zeile (nicht Node !) markieren (https://www.delphipraxis.net/132301-tvirtualstringtree-erste-zeile-nicht-node-markieren.html)

hoika 9. Apr 2009 11:03


TVirtualStringTree, erste Zeile (nicht Node !) markieren
 
Hallo #,

ich benutze den TVirtualStringTree als ListView-Ersatz,
es gibt also nur RootNodes.

Wie kann ich jetzt die 1. Zeile per Code markieren.

LV_WorkSteps ist der TVirtualStringTree.

Mit
Delphi-Quellcode:
LV_WorkSteps.FocusedNode:= LV_WorkSteps.GetFirst;
wird nur die 1. Spalte markiert, aber auch nicht richtig.


Ich hole mir jetzt das Data des 1. Nodes,
dahintersteckt mein eigene Klasse,
und suche die mich praktisch noch mal selbst

Delphi-Quellcode:
 DataItem:= TDateItem(LV_WorkSteps.GetNodeData(LV_WorkSteps.WorkSteps.GetFirst)^);
    SelectTreeItem(LV_WorkSteps, DataItem.Id); // IterateSubTree NIL
Das klappt auch,
aber das muss doch einfacher gehen ... oder nicht ?


Danke


Heiko

mirage228 9. Apr 2009 11:09

Re: TVirtualStringTree, erste Zeile (nicht Node !) markieren
 
Wie die erste Zeile, also auch alle Columns der ersten Zeile und nicht nur den Node der ersten Column der ersten Zeile?

Evtl. reicht es Dir ja die Option "toFullRowSelect" in den SelectionOptions der TreeOptions zu aktivieren, damit wird immer die gesamte Zeile ausgewählt...

Viele Grüße

hoika 9. Apr 2009 11:22

Re: TVirtualStringTree, erste Zeile (nicht Node !) markieren
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo,

die Option ist gesetzt.
Ich habe das mal angehängt.

Sobald ich den FocusedNode per IterateSubTree noch mal suche,
Wird die komplette Zeile korrekt markiert.


Heiko

mirage228 9. Apr 2009 11:30

Re: TVirtualStringTree, erste Zeile (nicht Node !) markieren
 
Versuch es mal mit der "Selected[]"-Property des VST für diesen Node.

Viele Grüße

hoika 9. Apr 2009 11:58

Re: TVirtualStringTree, erste Zeile (nicht Node !) markieren
 
Ha !!!

Delphi-Quellcode:
LV_WorkSteps.FocusedNode:= LV_WorkSteps.GetFirst;
LV_WorkSteps.Selected[LV_WorkSteps.GetFirst]:= True;
Genau das war es.
Ich hatte Selected auch schon in der Mangel,
liess sich aber nicht compilieren,
weil ich es falsch benutzt habe.

Ich denke halt immer noch wie beim normalen TTreeView.

Das FocusedNode muss übrigens drinbleiben, weil ich auf OnFocusChanged reagieren muss.


Danke !!!


Heiko

himitsu 9. Apr 2009 12:07

Re: TVirtualStringTree, erste Zeile (nicht Node !) markieren
 
auch wenn es nicht ganz zum Problem paßt, aber es wäre etwas besser, wenn du bei einer Typkonvertierung die Reinfolge änderst.
Code:
[color=#000080]// statt[/color]
DataItem := [color=#ff0000][b]T[/b][/color]DateItem(LV_WorkSteps.GetNodeData(...)[color=#ff0000][b]^[/b][/color]);

[color=#000080]// lieber[/color]
DataItem := [color=#ff0000][b]P[/b][/color]DateItem(LV_WorkSteps.GetNodeData(...))[color=#ff0000][b]^[/b][/color];
wenn GetNodeData hier einen typisierten Zeiger liefern würde,
und somit die Typen nicht kompatibel wären, könnte es sonst Probleme geben
oder es schmiggelt

hoika 11. Apr 2009 09:03

Re: TVirtualStringTree, erste Zeile (nicht Node !) markieren
 
Hallo,

ne ;)

Das wird nie ein typisierter Pointer sein.
Ist ja Sinn der Sache, dass jeder seine eigene Klasse benutzt.

Ausserdem bräuchte ich da ja einen Pointer auf meine Klasse,
das will ich nicht.
Delphi macht das ja fein im Hintergrund.


Heiko


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