Einzelnen Beitrag anzeigen

nahpets
(Gast)

n/a Beiträge
 
#20

Re: Objecte zwischenspeichern

  Alt 17. Sep 2008, 12:22
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
  Mit Zitat antworten Zitat