Delphi-PRAXiS
Seite 3 von 3     123   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   VirtualStringTree und Klasseninstanzen - Node Data finden (https://www.delphipraxis.net/196029-virtualstringtree-und-klasseninstanzen-node-data-finden.html)

Aviator 17. Apr 2018 11:26

AW: VirtualStringTree und Klasseninstanzen - Node Data finden
 
Zitat:

Zitat von günni0 (Beitrag 1399506)
Delphi-Quellcode:
procedure DeleteUserNode(iIndex: Integer);
begin
 if iIndex > aVSTDataClasses.Count - 1 then // ---------------- neu
  Exit;

 VST.Clear;
 aVSTDataClasses.Delete(iIndex);
 VST.RootNodeCount := aVSTDataClasses.Count; // re-draws alle nodes of VST
end;

Da sind wir dann jetzt schon beim ErrorHandling. Aber das ist ok. Alternativ zum
Delphi-Quellcode:
Exit
könntest du es auch so machen. Sieht eventuell besser aus:
Delphi-Quellcode:
procedure DeleteUserNode(iIndex: Integer);
begin
  if (iIndex > -1) and (iIndex < aVSTDataClasses.Count) then begin
    VST.Clear;
    aVSTDataClasses.Delete(iIndex);
    VST.RootNodeCount := aVSTDataClasses.Count; // re-draws all nodes of VST
  end;
end;


Zitat:

Zitat von günni0 (Beitrag 1399506)
Zitat:

Alternativ zum RootNodeCount und OnInitNode-Eventhandler kannst du natürlich auch versuchen mit AddChild zu arbeiten.
Zitat:

Bloß nicht.
Habe es eben dennoch mal ausprobiert.
Mein erstes Erlebnis waren Nodes die nicht richtig gezeichnet wurden, wenn man das AfterItemPaint-Event nutzt. Aber das war nur minimal und nicht weiter schlimm und auch sofort wieder weg, sobald man mit der Maus über den Node gefahren ist.

Dazu eine kleine Sache. Das hast du zwar in dem anderen Thread geschrieben, aber da du es jetzt gerade hier ansprichst. Die Änderung der Schriftfarbe solltest du im OnPaintText oder im OnDrawText Event durchführen. OnAfterCellPaint bzw. OnAfterItemPaint sind die Events, die eigentlich nur noch ausgelöst werden, wenn du unabhängig von Text und Images noch etwas in die jeweiligen Cells malen möchtest. Beispielsweise ein Flag, wenn du irgendwann mal Daten im VST geändert hast (mit den Inplace Editoren; da wirst du bestimmt auch irgendwann mal hinkommen).


Anbei mal die Reihenfolge der Events (Auszug aus der Hilde des VST):
Zitat:

Zitat von PaintEvents
Usually the following paint stages are executed during a paint cycle:
  • before paint (OnBeforePaint)
  • before item paint (OnBeforeItemPaint)
  • before item erase (OnBeforeItemErase)
  • after item erase (OnAfterItemErase)
  • before cell draw (OnBeforeCellPaint)
  • on paint text (string trees only, OnPaintText)
  • after cell draw (OnAfterCellPaint)
  • after item paint (OnAfterItemPaint)
  • after paint (OnAfterPaint)


günni0 17. Apr 2018 11:30

AW: VirtualStringTree und Klasseninstanzen - Node Data finden
 
Ich lasse mir zusätzlich zum normalen Node-Text noch eine weitere Zeichenkette ausgeben. Das erledige ich in AfterItemPaint mit TargetCanvas und DrawTextW.

Aviator 17. Apr 2018 11:38

AW: VirtualStringTree und Klasseninstanzen - Node Data finden
 
Zitat:

Zitat von günni0 (Beitrag 1399509)
Ich lasse mir zusätzlich zum normalen Node-Text noch eine weitere Zeichenkette ausgeben. Das erledige ich in AfterItemPaint mit TargetCanvas und DrawTextW.

Zeig mal den Auszug. Für Text solltest du dich auf die dafür vorgesehenen Events festlegen. Im normalen GetText Event gibt es auch noch den Unterschied zwischen TextType Normal und TextType Static. Da solltest du evtl. auch mal einen Blick drauf werfen.

Oder eben das DrawText Event. Da bist du vollkommen frei und kannst alles selbst malen was dir in den Sinn kommt. Hauptsache es handelt sich um Text und nicht um irgendwelche Cell spezifischen Dinge.

AfterItemPaint ist dafür eigentlich ungünstig.

EDIT: Vorteil von ttNormal und ttStatic ist, dass der Tree automatisch den Text mit "..." gekürzt abschneidet wenn er nicht passen sollte. Das musst du sonst selbst machen wenn es optisch nach etwas aussehen sollte. Oder du benutzt die Option ColumnSpan, dann zeichnet er den Text in die nächste Column sofern da kein Text steht.

Aviator 17. Apr 2018 12:19

AW: VirtualStringTree und Klasseninstanzen - Node Data finden
 
:idea: Für alle die sich wundern wieso hier aktuell nichts mehr passiert: Die Diskussion ging vorerst mal per PM weiter, da im gezeigten SourceCode evtl. sensible Daten enthalten sein könnten.


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:53 Uhr.
Seite 3 von 3     123   

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