AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Projekte Typinfo - Klasse
Thema durchsuchen
Ansicht
Themen-Optionen

Typinfo - Klasse

Ein Thema von I.A · begonnen am 29. Mär 2009
Antwort Antwort
I.A
Registriert seit: 14. Jan 2007
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:

http://www.delphipraxis.net/internal...ation&start=15

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:
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.
Die Units rttifunctions_u und classes_u stammen aus dem dfm-Edit Projekt von _frank_

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.
 
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:28 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz