Hallo Emil,
einen hab ich noch
Es besteht wohl ein Konflikt zwischen
procedure TMainForm.AddControls(ATree : TBaseVirtualTree; aCtrl: TControl; DisplayName: string);
und
Delphi-Quellcode:
Node := ATree.GetFirstSelected;
Data := ATree.GetNodeData(Node);
aCtrl muss nicht zwingend identisch sein mit dem selektierten Node.
Also ein Versuch:
Den Baum und seine Knoten von oben her durcharbeiten und suchen, welcher Node vom gleichen Typ wie aCtrl ist. Diesem Node den Fokus geben, dann sollte es gehen.
Hierüber könnte es doch möglich sein, die Objekte zu vergleichen, wenn eine IF-Kaskade mit IS und AS nicht ausreicht:
Delphi-Quellcode:
{ Die Prozedur ermittelt Basis-Laufzeit-Informationen zum übergebenen Objekt }
{ und gibt die Informationen in einer Stringliste zurück. }
procedure GetBaseClassInfo(AClass: TObject);
var
ClassTypeInfo : PTypeInfo;
ClassTypeData : PTypeData;
EnumName : String;
begin
ClassTypeInfo := AClass.ClassInfo;
ClassTypeData := GetTypeData(ClassTypeInfo);
with sl Do Begin
Add(Format('Class Name: %s ', [ClassTypeInfo.Name]));
EnumName := GetEnumName(TypeInfo(TTypeKind), Integer(ClassTypeInfo.Kind));
Add(Format('Kind: %s ', [EnumName]));
Add(Format('Size: %d ', [AClass.InstanceSize]));
Add(Format('Defined in: %s.pas ', [ClassTypeData.UnitName]));
Add(Format('Num Properties: %d ',[ClassTypeData.PropCount]));
End;
end;
Wenn hier der Typ festgestellt werden kann, müsste (über ein entsprechendes Cast?) ja auch der Name des Objektes zu finden sein, um das dann im Tree zu selektieren.
Wenn nicht, dann weiß ich auch nicht weiter
Stephan