Announcement

Collapse
No announcement yet.

Pointer auf Globalvariable im Objektinspektor

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Pointer auf Globalvariable im Objektinspektor

    Hallo,

    Ich möchte bei einer abgeleiteten Komponente (z.B. Maskedit) eine Property-Eigenschaft erstellen, welche die Pointer-Adresse einer globalen Variablen (oder Record-Typ) enthält.

    z.B.

    type
    TTestrecord = packed record
    S : String[255];
    I : Integer;
    B : Boolean;
    end;
    var
    Test : TTestrecord;

    Ich möchte im Objektinspektor die einzelnen Variablenadressen (Pointer) eingeben können. Separate Eingabefelder für S, I und B.

    Erfreulich wäre es, wenn dieser selbständig den Recordtyp auflisten könnte.

    Kennt jemand einen Lösungsansatz, eventuell mit Quellcode ?

    In der Komponente können dann mit Typecasting des Pointers vielfältige Dinge erledigt werden, so z.B. das automatische Aktualisieren der globalen Variablen usw.

    Es besteht auch die Möglichkeit die globale Variable innerhalb einer Klasseninstanz zu halten.

    published
    Test : TTestrecord;

    Wenn jedoch mehrere Eingabefelder von Maskedit auf dieselbe globale Recordvariable zeigen, existieren mehrere Instanzen. Die Variable selber müßte daher außerhalb gehalten werden.

    Für eine Hilfestellung wäre ich sehr dankbar !

    Grundsätzlich wichtig wäre es, einmal die Eigenschaft selbst erstellen zu können, welche den Pointer auf die Variablenadresse enthält.

    Gruss aus Wien, Helmut

  • #2
    Hi

    Einzigste mir möglich erscheinden Lösung ist Du nutzt ein von TPersistent abgeleitetes Object. Also so ähnlich wie TFont,TBitmap etc. In diesem neuen TPersistent Object veröffentlichst Du die Record-Felder als published. In Deiner Komponente legst Du eine published Eigenschaft vom Type dieses TPersistent Objectes an. Mit den Zugriffsmethoden der Eigenschaft kannst Du dann diesem Object die Eigenschaften auf den globalen Record setzen. Diese TPersistent-Classes dient dann nur als "Durchschleif" bzw. Zugriffsobject auf den Globalen Record. Mehrere Deiner Komponenten besitzten dann jeweils ein eigenes Zugriffobject, alle diese Objecte greifen aber auf den selben Record zu.

    Gruß Hagen

    PS: achso, ich glaube Du mußt noch einen TClassPropertyEditor für diese Objecte registrieren, damit auch die Eigenschaften wie in TFont anzeigbar sind. Ist aber einfach: nur TClassProperty.GetAttributes überschreiben

    Comment

    Working...
    X