![]() |
Pointer und TObject
Wie geht das, wenn ich einen Zeiger z.B. auf Form1.Caption zeigen lassen will?
Wenn ich dann den Wert des Zeiger ändere, müsste sich doch auch die Caption von Form1 ändern... Theoretisch müsste es doch so gehen:
Delphi-Quellcode:
Aber praktisch funzt es nich... :gruebel:
type
a = ^String; TForm1 = class(TForm) Button1: TButton; procedure FormCreate(Sender: TObject); procedure Button1Click(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; var Form1: TForm1; b: a; implementation {$R *.dfm} procedure TForm1.FormCreate(Sender: TObject); begin b := @Caption; end; procedure TForm1.Button1Click(Sender: TObject); begin b^ := 'test'; end; Kann mir jemand den Code so abändern, dass er funzt? :?: Es soll natürlich nicht nur mit Form1.Caption gehen, sondern z.B. auch mit Label1.Caption oder Label1.Font.Name etc. Ziel ist es, ein Array mit Zeigern auf String zu erstellen. Dann noch eine Prozedur der ein Zeiger auf einen String übergeben wird (z.B. Label1.Font.Name), dieser wird dann dem Array hinzugefügt. Führe ich dann z.B. diesen Befehl aus (b ist dann mein Array): b[1] := 'Arial' so sollte also die Schriftart von Label1 Arial sein. |
Re: Pointer und TObject
Caption ist eine Eigenschaft und keine Variable. Von einer Eigenschaft, kann man keinen Pointer holen, da in der Regel eine Funktion dahinter liegt. Das funktioniert nur mit normalen Variablen.
|
Re: Pointer und TObject
Hmm...
Und wie kann ich dann dieses Problem lösen :?: :?: :?: Also mein eigentliches Ziel ist es, eine vereinfachte IniFile Unit zu erstellen. Es sollen einfach verschiedene Komponenten-Eigenschaften hinzugefügt werden, z.B. AddComponent(Form1.Caption); Diese Komponenten-Eigenschaften werden dann alle auf einmal aus der Ini-Datei geladen bzw. in die Ini gespeichert. z.B.:
Code:
[Form1]
Caption=test Width=640 Height=480 |
Re: Pointer und TObject
Das solltest du sowieso nie machen!
Du kannst dich nie darauf verlassen, dass die Speicheradressen zwischen Programmaufrufen die selben bleiben. Für so etwas, was du machen willst, gibt es die ![]() ![]() EDIT: Hier stehts: ![]() |
Re: Pointer und TObject
such ma nach RTTI
|
Re: Pointer und TObject
Zitat:
Evtl. Beispiel für eine procedure AddComponent (s. oben)? :roll: wäre echt nett... |
Re: Pointer und TObject
Hab noch eine andere Idee:
Allerdings: Gibts so was wie FindProperty (also wie FindComponent), so dass ich z.B. die Eigenschaft Caption von meiner Form1 erhalten kann? etwa so: FindProperty('Form1.Caption'); Dann wäre es nämlich einfach:
Delphi-Quellcode:
//speichern:
procedure Speichern(ObjectName, PropertyName: String); begin IniFile.WriteString(ObjectName, PropertyName, FindProperty(ObjectName+'.'+PropertyName); end; //Aufruf: Speichern('Form1', 'Caption'); //laden: procedure Laden; var s1, s2: TStrings; i1, i2: Integer; begin s1 := TStrings.Create; s2 := TStrings.Create; IniFile.ReadSections(s1); for i1 := 0 to s1.Count-1 do begin IniFile.ReadSection(s1[i1], s2); for i2 := 0 to s2.Count-1 do FindProperty(s1[i1]+'.'s2[i2]) := IniFile.ReadString(s1[i1], s2[i2], ''); s2.Clear; end; s1.Free; s2.Free; end; |
Re: Pointer und TObject
Zitat:
|
Re: Pointer und TObject
Guck dir mal das an:
![]() Mit n bisschen Abänderung sollte das was für dich sein. Statt die ganzen Komponenten zu speichern, wie ich das mache, köntest du mit... wie heißt die Funktion nochmal? :gruebel: hm... muss mir die RTTI auch nochmal genauer angucken... hm... ![]() mfg Christian |
Re: Pointer und TObject
Hab mal einen
![]() |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:37 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