Entwickler-Ecke
Delphi Language (Object-Pascal) / CLX - Auf Teil eines Records in eine Klasse zugreifen
Grishnak - So 12.03.06 00:53
Titel: Auf Teil eines Records in eine Klasse zugreifen
Gegeben sei folgende Definition:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23:
| type TMyRecord = record S: string; I: integer; end;
TMyClass = class private FMyRecord: TMyRecord; public property MyRecord: TMyRecord read FMyRecord write FMyRecord; end;
[...]
var MyClass: TMyClass;
[...]
MyClass:=TMyClass.Create; MyClass.MyRecord.S:='text'; MyClass.MyRecord.I:=5; |
Gibt es eine Möglichkeit, den Rekord so direkt anzusprechen, oder muss ich aus ihm ebenfalls eine Klasse machen?
Kroko - So 12.03.06 06:12
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13:
| type TMyRecord = record S: string; I: integer; end;
TMyClass = class private FMyRecord: TMyRecord; public property R_S: String read FMyRecord.S write FMyRecord.S; property R_I: Integer read FMyRecord.I write FMyRecord.I; end; |
Jakob Schöttl - Mi 03.01.07 00:12
Ist das von Kroko wirklich die einzige Möglichkeit?
Ich will ebenfalls:
- Einen Record in einer Klasse deklarieren
- Dem Record als ganzes einen Wert zuweisen
- Den Record-Feldern auch einzeln Werte zuweisen
jaenicke - Mi 03.01.07 00:46
Dann musst du eben statt record class benutzen, was den Nachteil hat, dass das ganze instantiiert werden muss. Wenn das im Objektinspektor benutzt werden soll, d.h. so aufklappbar sein soll wie bspw. HorzScrollBar, dann solltest du es von TPersistant ableiten statt von TObject.
jasocul - Mi 03.01.07 08:07
Setze doch einfach FMyRecord in den Public-Bereich. Widerspricht zwar ein wenig den OOP-Konventionen, müsste aber funktionieren.
Delete - Mi 03.01.07 08:38
probier's mal so:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23:
| type TMyRecord = record S: string; I: integer; end;
TMyClass = class private FMyRecord: TMyRecord; public property MyRecord: TMyRecord read FMyRecord write FMyRecord; end;
[...]
var MyClass: TMyClass;
[...]
fMyClass:=TMyClass.Create; fMyRecord.S:='text'; fMyRecord.I:=5; |
Jakob Schöttl - Mi 03.01.07 12:46
jasocul hat folgendes geschrieben: |
| Setze doch einfach FMyRecord in den Public-Bereich. Widerspricht zwar ein wenig den OOP-Konventionen, müsste aber funktionieren. |
Das wäre natürlich eine Möglichkeit, ich hab auch schon daran gedacht, aber dann kann man den Record hald nur zur Laufzeit ändern.
Grenzgaenger hat folgendes geschrieben: |
probier's mal so:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23:
| type TMyRecord = record S: string; I: integer; end;
TMyClass = class private FMyRecord: TMyRecord; public property MyRecord: TMyRecord read FMyRecord write FMyRecord; end;
[...]
var MyClass: TMyClass;
[...]
fMyClass:=TMyClass.Create; fMyRecord.S:='text'; fMyRecord.I:=5; | |
Der Eigenschaft MyRecord kann ich zwar einen TMyRecord zuweisen, aber eben nicht den einzelnen Datenfeldern von der Eigenschaft MyRecord.
FMyRecord kann ich natürlich schon Werte zuweisen, auch den einzelnen Datenfeldern, aber nur innerhalb der Unit...
Naja, trotzdem danke für eure Antworten!
jaenicke - Mi 03.01.07 12:54
Jakob Schöttl hat folgendes geschrieben: |
jasocul hat folgendes geschrieben: | | Setze doch einfach FMyRecord in den Public-Bereich. Widerspricht zwar ein wenig den OOP-Konventionen, müsste aber funktionieren. |
Das wäre natürlich eine Möglichkeit, ich hab auch schon daran gedacht, aber dann kann man den Record hald nur zur Laufzeit ändern. |
Du willst das also tatsächlich im Objektinspektor haben? Dann geht das nicht mit einem Record! Dann musst du es von TPersistant ableiten, wie es dafür gedacht ist...
Ach so: Du kannst natürlich einen Editierhandler definieren, mit dem du den Record als Ganzes auch im OI ändern kannst. Das geht... Und du kannst dann ein kleines Fenster anzeigen, in dem du die einzelnen Eigenschaften ändern kannst.
Aber damit kenne ich mich nicht gut genug aus, um jetzt genau sagen zu können, was du wie machen musst.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!