|
Registriert seit: 14. Jan 2007 83 Beiträge |
#14
![]()
Delphi-Quellcode:
Was sinds für drei Variablen, wo kommen die her?
AClassAnchor := AClass; //AClass wurde an anderer Stelle instnatiiert
if Assigned(FClassAnchor) then AClass ist diejenige Klasse, deren Eigenschaften+Ereignisse der Objektinspektor später anzeigen soll. Der User _frank_ hat mir mit dem Quelltext von TSizeControl einen Formdesigner gegeben. Der enthält die anzuzeigenden Komponenten, von denen die selektierte an AClass übergeben wird. ![]() Wir benutzen das für Parametereinstellungen .. einfach eine Klasse gebastelt, alle Properties published .. und schon kann man alle Parameter konfigurieren ... einstellen und verändern .. sogar treeviewfähig ...
mit xml kann man sie auch gleich noch abspeichern ... neuer Quelltext ist nicht nötig, es reicht, wenn man eine gemeinsame Basisklasse hat und diese abspeichert .. Beliebig erweiterbar, man muss sich um nix mehr kümmern, sehr einfach. Könnte man auch nehmen um die normalen Programmoptionen zu verändern, einzustellen .. usw. ![]() ähm, bescheidene Frage, was ist eine Typinformation einer Klasse? Shocked
![]() Phantasie ist etwas, was sich manche Leute gar nicht vorstellen können.
![]() ![]() Damit habe ich aber noch immer keine Typinformation, um die Eigenschaften einer beliebigen KOmpo anzeigen zu können. Objektinspektor hab ich. Was ich brauche, ist die Typinformation der Klasse, die in diesem Objektinspektor angezeigt werden soll.
Ich brauche sowas hier:
Delphi-Quellcode:
Der TPropertyListtype sollte enthalten:type TPropertyList = TPropertyListType; var MeineKomponente: TWinControl; oder Komponententyp der akt. Kompo. (TMemo, TEdit...) procedure GetProperties(VonMeinerKomponente: TWincontrol; out Eigenschaftenliste: TPropertyList); Die Rttifunctions setzen die Kenntnis von Eigenschaftnamen voraus. Bei f GetSubInstance() muss ich den Namen der Subinstnz kennen. Bei f FindTypeInfo() brauche ich den Typnamen, bei getSubClass muss ich ebenso den Namen der Eigenschaft der SubClass kennen. Und eben diese Informationen will ich mit meiner Codeversion erst gewinnen. -Name der Eigenschaft -Typ der Eigenschaft (sowohl Typname als auch TypeKind) -Link zum Eigenschaftseditor Der Objektinspektor von Kasparsoft kann verschiedene EditControls enthalten, die sich analog zum Delphi Objektinspektor verhalten. Es gibt Comboboxen, Ellipsenschaltflächen, einfache Editfelder das Pluszeichen links, das bei Anklicken weitere Reihen mit Eigenschaften anzeigt. Aber ich brauche dazu die Eigenschaften meiner Klasse, die in diesem Objektinsprktor angezeigt werden sollen. ![]() ansonsten würde ich deinen Code auch testen, hab nur den ValueListEditor nicht (D3).
dfmeditor ist mit D3 geschrieben und mein OI baut auf o.g. Funktion auf. Um meinen Code zu testen, brauchst Du den ValueListeditor nicht. Ein Stringgrid tut es auch. Nur habe ich Delphi 7 halt und da gibt es den ValueListeditor. Die Delphi Hilfe gab mir bei Methoden des ValueListeditors die Anregung, die Methode InsertRow zu verwenden. Ein TMemo reicht genau so.
Delphi-Quellcode:
Hier ist meine InsertRow() Methode noch mal. In eine Memo könnte man zum Test folgendes einfügen:
DebugInsp.InsertRow( //Debugisp ist ein ValueListEditor
ATypeInfo.PropertyName[Index], ATypeInfo.PropertyType[Index].Name, true ); Memo1.Lines.Add(ATypeInfo.PropertyName[Index] + ': ' + ATypeInfo.PropertyType[Index].Name); Und jhier noch ein Vorschlag für das TStringGrid.
Delphi-Quellcode:
Sowas hier will ich wegen der Typinfo am Ende haben, um dann für jede beliebige Anwendung
var
ARowCount: Integer = 1; procedure InsertRowInto(AClass: TWinControl; AProperty, AType: String); //Der Boolean-Parameter wird hier nicht benötigt, ich will ja nur die //Klasseneigenschaften angezeigt haben, um zu sehen, ob die Typinformation //wunschgemäß ankommt. begin Inc(ARowCount); if Assigned(AClass) then begin TStringGrid(AClass).FixedCols := 0; TStringGrid(AClass).FixedRows := 1; TStringGrid(AClass).Cells[0,0]:= 'Eigenschaft'; TStringGrid(AClass).Cells[1,0]:= 'Typ'; if TStringGrid(AClass).RowCount > ARowCount then TStringGrid(AClass).RowCount := ARowCount; TStringGrid(AClass).Cells[0, ARowCount] := AProperty; TStringGrid(AClass).Cells[1, ARowCount] := AType; end; end; die Typinformation zu kriegen, wenn ich sie denn brauche. Darf ich Dir meinen Code mal zum Testen schicken? Weil das Gewinnen der Typinformation so schwierig ist, wäre eine Klasse der folgenden Art ideal, um die Probleme der Gewinnung geeigneter Typinfprmation der Vergangenheit angehören zu lassen:
Delphi-Quellcode:
Die Idee für so eine Klasse entspringt dem Wunsch, unkompliziert Typinformation passend für meine Anwendung zu erhalten, konkret jetzt Formdesigner mit Objektinspektor, später, wer weiß. Der User stoxx hat ja eine interessante Anregung gegeben. Dazu wäre diese Typifoklasse bestens zu gebrauchen.
unit TypeInfoClasses;
interface uses Classes, Sysutils, TypInfo; type //Stringtyp entweder hier konkret anpassen oder bedingt compilieren, //um bedarfsgerechten Stringtyp zu erhalten TStringType = String; TClassTypeInfo = class(TPersistent) private public property MethodKind: TTypeKind; property MethodName: TStringType; ...... //weitere Eigenschaften zur Methodeninfo oder ...... //sonstigen Infos (PropValue..) die wichtig sein ...... //könnten. property PropertyTypeName[Index: Integer]: TStringType; property PropertyTypeKind[Index: Integer]: TTypeKind; property PropertyBy[Index: Integer]: TStringType; property PropertyBy[Name: TStringType]: TStringType; end; implementation end. |
![]() |
Ansicht |
![]() |
![]() |
![]() |
ForumregelnEs 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
|
|
Nützliche Links |
Heutige Beiträge |
Sitemap |
Suchen |
Code-Library |
Wer ist online |
Alle Foren als gelesen markieren |
Gehe zu... |
LinkBack |
![]() |
![]() |