Autor |
Beitrag |
Nostromo
      
Beiträge: 33
Erhaltene Danke: 1
Win 7 Pro 64bit, Win XP SP3
Delphi 7 Ent
|
Verfasst: Fr 05.08.11 21:24
Ich habe extra wegen dieses Problems eine eigene Form erstellt und folgendes definiert:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20:
| type TTestRec = record x,y : integer; end;
TTestClass = class public FTest: TTestRec; published property What : TTestRec read FTest write FTest; end;
TForm1 = class(TForm) procedure FormCreate(Sender: TObject); private public T : TTestClass; end; |
Im OnCreate mache ich dann folgendes:
Delphi-Quelltext 1: 2: 3: 4: 5: 6:
| procedure TForm1.FormCreate(Sender: TObject); begin T := TTestClass.Create; T.What.x := 1; T.Free; end; |
Dieser Code kompiliert nicht, denn für die Zeile
T.What.x := 1;
wird behauptet dass der linken Seite nichts zugewiesen werden kann.
WTF????
Ist mein Delphi kaputt?
Oder seh ich den Wald nicht?
Für jeden Kommentar dankbar.
|
|
jaenicke
      
Beiträge: 19314
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Fr 05.08.11 21:29
Bei T.What.x rufst du zuerst eine Kopie des Records ab und versuchst dann in der Kopie etwas zu ändern. Da das ins Nirwana verschwinden würde, kommt diese Fehlermeldung.
Benutze statt eines Records einfach eine Klasse, dann bekommst du in der Property eine Referenz auf das Objekt und kannst auch darin etwas ändern.
|
|
Narses
      

Beiträge: 10183
Erhaltene Danke: 1256
W10ent
TP3 .. D7pro .. D10.2CE
|
Verfasst: Fr 05.08.11 23:33
Moin!
Was allerdings geht:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14:
| type TTestRec = record x,y : integer; end;
TTestClass = class public FTest: TTestRec; published property WhatX : Integer read FTest.x write FTest.x; end;
begin T.WhatX := 1; | Getter/Setter können keine Strukturen bearbeiten, aber durchreichen!
Oder natürlich direkt (ist ja public):
Delphi-Quelltext 1: 2:
| begin T.FTest.x := 1; | cu
Narses
_________________ There are 10 types of people - those who understand binary and those who don´t.
Für diesen Beitrag haben gedankt: BenBE, Martok
|
|
Martok
      
Beiträge: 3661
Erhaltene Danke: 604
Win 8.1, Win 10 x64
Pascal: Lazarus Snapshot, Delphi 7,2007; PHP, JS: WebStorm
|
Verfasst: So 07.08.11 03:06
Narses hat folgendes geschrieben : | Moin!
Was allerdings geht:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14:
| type TTestRec = record x,y : integer; end;
TTestClass = class public FTest: TTestRec; published property WhatX : Integer read FTest.x write FTest.x; end;
begin T.WhatX := 1; | Getter/Setter können keine Strukturen bearbeiten, aber durchreichen!  |
Wow, das geht?
Das ist ja mal nicht schlecht. Haben wir heute doch noch was gelernt
Sowas hätte ich öfter schonmal gebrauchen können, aber auf sowas kommt man ja nicht
cu,
Martok
_________________ "The phoenix's price isn't inevitable. It's not part of some deep balance built into the universe. It's just the parts of the game where you haven't figured out yet how to cheat."
|
|
jaenicke
      
Beiträge: 19314
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: So 07.08.11 08:06
|
|
Nostromo 
      
Beiträge: 33
Erhaltene Danke: 1
Win 7 Pro 64bit, Win XP SP3
Delphi 7 Ent
|
Verfasst: Mo 08.08.11 11:16
Auch wieder was dazu gelernt.
Danke für die Antworten.
Ich muss allerdings records einsetzen, da diese von OpenGL her so übersetzt sind.
Ist halt nur die Frage ob man kapseln will/muss oder nicht.
|
|
Narses
      

Beiträge: 10183
Erhaltene Danke: 1256
W10ent
TP3 .. D7pro .. D10.2CE
|
Verfasst: Mo 08.08.11 11:45
Moin!
Martok hat folgendes geschrieben : | Sowas hätte ich öfter schonmal gebrauchen können, aber auf sowas kommt man ja nicht |
Steht IIRC sogar in der DOH (D7), da wäre ich von selber auch nicht drauf gekommen.  Hab aber leider gerade keine Zeit, das rauszusuchen...
cu
Narses
_________________ There are 10 types of people - those who understand binary and those who don´t.
|
|