![]() |
Typinfo - Klasse
Hallo,
vor einigen Tagen habe ich mich mit Typinformation zur Laufzeit beschäftigt. Der User _frank_ hat mir freundlicherweise ein Softwareprojrkt zur Verfügung gestellt, aus dem ich 2 Units voraussetze. Ich hatte meine Frage zur Typinformation in folgendem Thread gestellt: ![]() Dort ist auch der Link zum Dfm-Edit Projekt zu finden, aus dem ich 2 Units verwende, um die Typklasse zu realisieren. Letzter Beitrag auf Seite 2 unten. Hier ist die Unit:
Delphi-Quellcode:
Die Units rttifunctions_u und classes_u stammen aus dem dfm-Edit Projekt von _frank_
unit TypeInfoClasses;
interface uses Classes, Sysutils, TypInfo, rttifunctions_u, classes_u; type //Stringtyp entweder hier konkret anpassen oder bedingt compilieren, //um bedarfsgerechten Stringtyp zu erhalten TStringType = String; TClassTypeInfo = class(TPersistent) private FTypeKind: TTypeKind; FTypeName: TStringType; FMethodName: TStringType; FMethodKind: TMethodKind; //auch TTypeKind FProperties: TStrings; function GetObject: TPersistent; function GetTypeKind(Index: Integer): TTypeKind; function GetTypeName(Index: Integer): TStringType; function GetPropertyByIndex(Index: Integer): TStringType; function GetPropertyByName(Name: TStringType): TStringType; procedure SetObject(AObject: TPersistent); public constructor Create; constructor CreateForClass(AClass: TPersistent); destructor Destroy; override; function ItsName(AName: TStringType): Integer; property forObject: TPersistent read GetObject write SetObject; property MethodKind: TMethodKind read FMethodKind; property MethodName: TStringType read FMethodName; property PropertyTypeName[Index: Integer]: TStringType read GetTypeName; property PropertyTypeKind[Index: Integer]: TTypeKind read GetTypeKind; property PropertyByIndex[Index: Integer]: TStringType read GetPropertyByIndex; property PropertyByName[Name: TStringType]: TStringType read GetPropertyByName; end; implementation function TClassTypeInfo.GetObject: TPersistent; begin end; function TClassTypeInfo.GetTypeKind(Index: Integer): TTypeKind; begin Result := TTypeObject(FProperties.Objects[Index]).PropKind; end; function TClassTypeInfo.GetTypeName(Index: Integer): TStringType; begin Result := TTypeObject(FProperties.Objects[Index]).TypeName; end; function TClassTypeInfo.GetPropertyByIndex(Index: Integer): TStringType; begin Result := FProperties[Index]; end; function TClassTypeInfo.GetPropertyByName(Name: TStringType): TStringType; begin Result := FProperties[FProperties.IndexOf(Name)]; end; procedure TClassTypeInfo.SetObject(AObject: TPersistent); begin GetComponentProps(AObject.ClassName, FProperties, true); end; constructor TClassTypeInfo.Create; begin inherited Create; FProperties := TStringList.Create; end; constructor TClassTypeInfo.CreateForClass(AClass: TPersistent); begin inherited Create; FProperties := TStringList.Create; GetComponentProps(AClass.ClassName, FProperties, true); end; destructor TClassTypeInfo.Destroy; begin FProperties.Free; inherited Destroy; end; function TClassTypeInfo.ItsName(AName: TStringType): Integer; var Index: Integer; begin Result := FProperties.IndexOf(AName); end; end. Was würdet Ihr Euch noch an Funktionalität für so eine Klasse wünschen? Wollte noch zu _frank_'s SizeControl Demo einen Objektinspektor bauen mit der Funktionalität desjenigen von Delphi, kämpfe aber noch mit dem Einfügen der Editorzeilen. Werd wohl doch noch mal die Jedi-Kompos installieren, fürchte aber, das der dort mitgelieferte Objektinspektor noch schwieriger zu handhaben ist als das TRakObjektinspectorGrid von Kasparsoft. Mit diesen beiden Teilen ließe sich ein eigener Formdesigner bauen. Aber als kleines Dankeschön für die Hilfe die ich bisher bei dem Problem des Erhaltes der Typinformation erhalten habe, will ich Euch die Typinfo Klasse nicht vorenthalten. Ideen für eine Weiterentwicklung sind jederzeit willkommen. Realisierung hängt von meinen Programmiererfähigkeiten ab. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:45 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz