Delphi-PRAXiS
Seite 2 von 2     12   

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: Problem mit ImageIndex (https://www.delphipraxis.net/29873-virtualstringtree-problem-mit-imageindex.html)

kaaeton 9. Sep 2009 15:53

Re: VirtualStringTree: Problem mit ImageIndex
 
Zitat:

Zitat von generic
Der Beitrag ist von 2004.

Ja, und wo ist das Problem?
Der Beitrag ist im Forum und es können ihn auch heute noch alle lesen.
Es gab damals keine Erklärung und damit ist er genauso aktuell wie 2004, da es seit damals KEINE brauchbarere Beschreibung als die von Phillip und Sven gab und seit dem auch eine Weiterentwicklung erfolgte. Dem trage ich Rechnung und poste hier eben den aktuellen Stand.
Wenn du ein Spezialist auf dem Bereich des Virtual TreeView bist, dann trage doch was dazu bei, daß andere es leichter haben, diese tolle Komponente einzusetzen.
Deine konstruktiven Beiträge sind gerne willkommen.
mfg Wolfgang

Satty67 9. Sep 2009 16:08

Re: VirtualStringTree: Problem mit ImageIndex
 
Danke für den Hinweis, denn ich hatte bis vor ein paar Monaten noch Delphi5 und kein VirtualTreeView im Einsatz. Wollte jetzt mit D2007 schon längst mal die Komponente anschauen und das verschoben... was ich aber die Tage mit dem Tutorial mal nachholen werden.

generic 9. Sep 2009 17:01

Re: VirtualStringTree: Problem mit ImageIndex
 
Tutorials gibt es viele:

Bei uns hier als Video:
http://www.delphipraxis.net/videos#Stammtisch_2

oder im Delphi-Treff:
http://www.delphi-treff.de/no_cache/...eeview/page/1/

Im Entwickler Magazin:
  • Entwickler Magazin (Ausgabe: 02.08/13.02.2008) Artikel: Von Bäumen und Listen - Komponente VirtualStringTree im Detail
  • Entwickler Magazin (Ausgabe: 03.08/14.04.2008) Artikel: Von Bäumen und Listen Teil 2 - Komponente VirtualStringTree im Detail
  • Entwickler Magazin (Ausgabe: 04.08/12.06.2008) Artikel: Von Bäumen und Listen Teil 3 - Komponente VirtualStringTree im Detail

Dezipaitor 10. Sep 2009 12:38

Re: VirtualStringTree: Problem mit ImageIndex
 
Auch noch ein Tipp von mir

Delphi-Quellcode:
function AddChild(Parent: PVirtualNode; UserData: Pointer = nil): PVirtualNode;
Viele wissen nicht genau, was man mit UserData anfangen kann.
Es ist aber ganz nützlich, weil man damit Daten noch vor dem OnInitNode Event dem Knoten zuweisen kann.
Der Parameter UserData wird dabei direkt auf die ersten 4 Bytes des Records gesetzt.
D.h.

Delphi-Quellcode:
Type
  PMyNodeData = ^TMyNodeData;
  TMyNodeData = record
    MyData : Pointer; <-- UserData aus AddChild
    Rest ...
  end;
Da kommen die Daten rein. Dabei muss es sich nicht um ein Pointer handeln, auch eine Klasseninstanz oder Interface geht - also alles was 4 Byte beansprucht. Nur sollte im Record auch wirklich ein 4 Byte Typ stehen und nicht etwa weniger. Sonst kommt es gerne mal zu Nebenwirkungen.

Wenn man UserData benutzt, bekommt der Knoten einen State zugewiesen, so dass man dies in OnInitNode überprüfen kann :
Delphi-Quellcode:
if vsInitialUserData in Node.States then
Wichtig zu wissen ist dabei, dass der var Parameter InitialStates von OnInitNode nicht diesen Status enthält.

kaaeton 17. Sep 2009 19:53

Re: VirtualStringTree: Problem mit ImageIndex
 
Zitat:

Zitat von Dezipaitor
Auch noch ein Tipp von mir ...
Viele wissen nicht genau, was man mit UserData anfangen kann. ...
Wenn man UserData benutzt, bekommt der Knoten einen State zugewiesen, so dass man dies in OnInitNode überprüfen kann.

Danke, aber kannst du mir auch ein Anwendungsbeispiel nennen?
Ich kann mir momentan noch keine Vorstellung für einen sinnvollen Einsatz machen.

LG Wolfgang

Dezipaitor 17. Sep 2009 21:53

Re: VirtualStringTree: Problem mit ImageIndex
 
Naja,
wenn du deine Daten nin OnInitNode initialisieren willst, dann kannst du da gleich z.b. ein Objekt reinstecken, so dass du weitere Berechnungen eben in dieser Funktion machen kannst.

Dann gibt es noch das Problem, dass zwischen AddChild und ein folgendes GetNodeData viel passieren kann, so z.B. kann mit toAutoSort der Tree automatisch sortiert werden. Da werden dann nicht initialisierte Daten verglichen.

Codewalker 7. Mär 2010 09:47

Re: VirtualStringTree: Problem mit ImageIndex
 
Ich habe das genau entgegengesetzte Problem: Ich habe eine ImageList mit 4 Overlay-Icons und dahinter den normalen Icons. Im OnGetImageIndex weise ich passend den ImageIndex zu ... aber man sieht keine Overlay Icons. Muss man noch eine Option zuschalten oder was muss ich tun, damit er die Overlay-Icons auch zeichnet?

Dezipaitor 7. Mär 2010 10:30

Re: VirtualStringTree: Problem mit ImageIndex
 
Meistens sind es eher Fehler im entwickelten Quelltext.

kaaeton 7. Mär 2010 20:47

Re: VirtualStringTree: Problem mit ImageIndex
 
Zitat:

Zitat von Codewalker
Ich habe das ... Problem: ... ImageList mit 4 Overlay-Icons und dahinter den normalen Icons. Im OnGetImageIndex weise ich passend den ImageIndex zu ... aber man sieht keine Overlay Icons. Muss man noch eine Option zuschalten oder was muss ich tun, damit er die Overlay-Icons auch zeichnet?

Schau dir mal meinen 2.Teil des Tutorials an. Da hab ich mich mit den Icons beschäftigt. Für die OverlayIcons hab ich auch noch keine brauchbare Erklärung für die Verwendung. Ich kann mir auch noch nichts darunter vorstellen und wozu man das verwenden könne.
Tutorial: www.delphipraxis.net/topic166359,0,asc,0.html
Wenn du mir ein Beispiel geben könntest für die Verwendung (Notwendigkeit) von OverlayIcons, dann würde ich mir das mal näher ansehen.
LG Wolfgang

Hawkeye219 7. Mär 2010 21:43

Re: VirtualStringTree: Problem mit ImageIndex
 
Hallo,

um die Bilder als Overlay nutzen zu können, muss man sie einmalig anmelden:

Delphi-Quellcode:
procedure TForm1.FormCreate (Sender: TObject);
begin
  Tree.Images := ImageList1; // über OI zuweisen
 
  ImageList1.Overlay(21, 0); // Bild #21 wird Overlay-Icon #0
  ImageList1.Overlay(42, 1); // Bild #42 wird Overlay-Icon #1
end;

procedure TForm1.TreeGetImageIndex(Sender: TBaseVirtualTree; Node: PVirtualNode;
  Kind: TVTImageKind; Column: TColumnIndex; var Ghosted: Boolean; var ImageIndex: Integer);
begin
  case Kind of
    ikNormal, ikSelected:
      ImageIndex := Random(16);
    ikOverlay:
      ImageIndex := Node.Index and 1;
  else
    ImageIndex := -1;
  end;
end;
Gruß Hawkeye


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:34 Uhr.
Seite 2 von 2     12   

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