Forum: GUI-Design mit VCL / FireMonkey / Common Controls
Delphi
by Aviator,
6. Apr 2017
Das ist vollkommen korrekt. GetMaxColumnWidth() berechnet die maximal benötigte Breite um die NodeTexte darin optimal zu zeichnen. Hierbei kommt es darauf an, ob der Aufrufer die Breite aller NodeTexte und nur die der sichtbaren Nodes möchte.
Ein InvalidateNode führt nur dazu, dass der gesamte Tree neu und dementsprechend die im Hintergrund geänderten Daten auf dem Tree gezeichnet werden. Ein...
Forum: GUI-Design mit VCL / FireMonkey / Common Controls
Delphi
by Aviator,
6. Apr 2017
:thumb:
Hmm. Von Puffern hatte ich ja auch nichts geschrieben, oder? :roll:
Es ist so, dass bei jeder Änderung des Trees, die die Oberfläche betrifft, ein Invalidate des entsprechenden Bereiches ausgelöst wird. Bei ihm wurde das gemacht, weil er die FocusedNode Property gesetzt hat und somit die "Focused Umrandung" (keine Ahnung wie ich das besser beschreiben soll, diese gepunktete Linie die...
Forum: GUI-Design mit VCL / FireMonkey / Common Controls
Delphi
by Aviator,
6. Apr 2017
Das ist falsch. :shock:
Der VirtualStringTree liest die Daten nicht selbst aus. Er kennt diese nicht einmal. Er reserviert lediglich den Speicher für dich, den du im OnGetNodeDataSize Event oder per Setzen der Property übergeben hast. Die Texte werden immer per OnGetText Event an den Tree weitergegeben. Du musst dem Tree sagen was er in die einzelnen "Cells" reinschreiben soll.
Deshalb ist es...
Forum: GUI-Design mit VCL / FireMonkey / Common Controls
Delphi
by Aviator,
4. Apr 2017
Hallo TUX,
nachdem du das jetzt so sagst erinnere ich mich an etwas. Ich hatte mir mal die Funktion angeschaut wie der VST denn die Berechnung macht ab wann er den Text abschneiden soll. Und das kann er ja nur dann wissen, wenn er die Font Größe und die Breite des Textes auf dem entsprechenden Canvas kennt.
Dein Abwählen der Node hat intern ein Invalidate ausgelöst. Somit ist der Text auf...
Forum: GUI-Design mit VCL / FireMonkey / Common Controls
Delphi
by Aviator,
4. Apr 2017
Ne nix Speichersalat. Klappt wunderbar. Mache ich auch immer so (seit Jahren) und es hat noch nie Probleme gegeben. Ich speichere mir meine Objekte allerdings immer noch in einer ObjectList<T> und gebe dem NodeObject dann nur noch eine Referenz zur Object-Instanz.
Also daran ist nichts falsch und es ist auch definitiv nicht die Ursache warum das AutoSizing nicht funktioniert.
Forum: GUI-Design mit VCL / FireMonkey / Common Controls
Delphi
by Aviator,
4. Apr 2017
Hast du dir denn auch die ColumnOptions der ersten Column angeschaut? Ist dort die entsprechende Option aktiviert?
Forum: GUI-Design mit VCL / FireMonkey / Common Controls
Delphi
by Aviator,
4. Apr 2017
Hallo Tux,
ich nutze die Funktion zwar nicht da ich immer selbst die Breite der Columns angebe, habe aber im SourceCode gesehen, dass vor dem Ausführen des Sizing das Event OnBeforeAutoFitColumns ausgelöst wird (wenn denn ein EventHandler existiert).
Hier gibt es einen Parameter var SmartAutoFitType: TSmartAutoFitType. Setzt du diesen an irgendeiner Stelle auf einen anderen Wert oder nutzt...