Forum: GUI-Design mit VCL / FireMonkey / Common Controls
Delphi
by Codehunter,
6. Apr 2017
Nix läuft. Dass das mit dem selektierten Node funktioniert ist eher ein Seiteneffekt, aber keine Lösung.
Ich denke aber ich bin des Rätsels Lösung schon sehr sehr nahe. In TCustomVirtualStringTree.DoGetNodeWidth: if Column = FHeader.MainColumn then
begin
// Primary column or no columns.
Data := InternalData(Node); // <-- Magic Wunderding !!!
if Assigned(Data) then...
Forum: GUI-Design mit VCL / FireMonkey / Common Controls
Delphi
by Codehunter,
6. Apr 2017
@TUX_der_Pinguin: Mal dumm gefragt: Verwendest du den VST als Tree oder als Grid? Sprich, brauchst du das ganze Aufklapp-Gedönse überhaupt? Denn wenn nicht, setzt du einfach Header.MainColumn auf 1 und der Fehler ist umgangen.
Jetzt kann ich zumindest das Problem nachvollziehen. Hinzu kommt, die drei "Abkürzungspünktchen" werden auch nicht korrekt angezeigt wenn man die Spalte 0 danach manuell...
Forum: GUI-Design mit VCL / FireMonkey / Common Controls
Delphi
by Codehunter,
6. Apr 2017
Daran habe ich mich ja auch gar nicht gestört sondern an der Art und Weise wie das hier konkret umgesetzt wurde. Ich denke, da werden im Grunde Memleaks produziert. Denn besagter Zeiger muss ja auch irgendwo hin zeigen. Hier sah es so aus als wäre das zunächst ein Zeiger auf einen Zeiger (also 2x4 bzw. 2x8 Byte) und würde dann durch einen Zeiger auf eine Klasseninstanz überschrieben.
Forum: GUI-Design mit VCL / FireMonkey / Common Controls
Delphi
by Codehunter,
6. Apr 2017
Haste vollkommen recht. Siehe mein Edit oben. Hat sich jetzt zeitlich nur überschnitten.
Forum: GUI-Design mit VCL / FireMonkey / Common Controls
Delphi
by Codehunter,
6. Apr 2017
Die Spalte 0 ist insofern etwas besonderes weil dort der Baum, die Nodebuttons, Treelines usw. gezeichnet werden. Da wird intern beim VST sehr viel anders gemacht als bei anderen Spalten. Weil es nicht immer die Möglichkeit gab, die MainColumn zu verstellen, also in früheren VST-Versionen mal hartcodiert "0" war, möchte ich auch nicht ausschließen dass irgendwo noch so eine "harte Null" überlebt...
Forum: GUI-Design mit VCL / FireMonkey / Common Controls
Delphi
by Codehunter,
4. Apr 2017
Naja, ich mache sowas ähnliches:type
TNodeData = record
ObjRef: Pointer;
end;Und dann da die Klasseninstanzen angehangen.
Aber so wie hier gemacht, stelle ich mir das seltsam vor. GetNodeData erzeugt erst eine neue Variableninstanz vom Typ Pointer mit der Größe von , dann lässt man den Speichermanager durch TDataSet.Create eine neue Klasseninstanz auf der selben Adresse erzeugen...
Forum: GUI-Design mit VCL / FireMonkey / Common Controls
Delphi
by Codehunter,
4. Apr 2017
Zeig mal bitte die Deklaration von PDataSet. Mein Verdacht ist, weil ich das beim VST schon mehrfach hatte: Speichersalat wegen wildem Pointergeschubse.
EDIT: Den Kommentar in der Implementierung von GetMaxColumnWidth hast du gesehen?// This method determines the width of the largest node in the given column.
// If UseSmartColumnWidth is True then only the visible nodes which are in view will...
Forum: GUI-Design mit VCL / FireMonkey / Common Controls
Delphi
by Codehunter,
4. Apr 2017
Nochwas: müssten das nicht dereferenzierte Pointer sein? Node := vstTable.FocusedNode;
Data := vstTable.GetNodeData(Node);
if Assigned(Data) then
begin
Data^.Name := 'skljglsjfgskjfsldjfksjlfkjsd'; //neuer Text ist länger als alle anderen
Data^.Type := 'dfkgjdkjgfklgjdkjgkljgkdjkkgdljgkdjgdgfdgld'; //neuer Text ist länger als alle anderen
end;
Forum: GUI-Design mit VCL / FireMonkey / Common Controls
Delphi
by Codehunter,
4. Apr 2017
Am Rande bemerkt: Du könntest das auch ein bisschen abkürzen, weil GetNodeData Failsafe ist:
Node := vstTable.FocusedNode;
Data := vstTable.GetNodeData(Node);
if Assigned(Data) then
begin
Data.Name := 'skljglsjfgskjfsldjfksjlfkjsd'; //neuer Text ist länger als alle anderen
Data.Type := 'dfkgjdkjgfklgjdkjgkljgkdjkkgdljgkdjgdgfdgld'; //neuer Text ist länger als alle...