Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Read/Write Properties in Delphi 2010 (https://www.delphipraxis.net/147513-read-write-properties-delphi-2010-a.html)

kaju74 10. Feb 2010 09:45


Read/Write Properties in Delphi 2010
 
Hallo.

Ich habe gerade ein kleines Problem mit Delphi 2010 und folgendem Code(-Beispiel):

Delphi-Quellcode:
type
  TForm4 = class(TForm)
    procedure FormCreate(Sender: TObject);
  private
    { Private-Deklarationen }
    FDrawRect: TRect;
  published
    { Public-Deklarationen }
    property DrawRect: TRect read FDrawRect write FDrawRect;
  end;

var
  Form4: TForm4;

implementation

{$R *.dfm}

procedure TForm4.FormCreate(Sender: TObject);
begin
  DrawRect.Left := 0;
end;
Unter Delphi2009 kein Problem, gibt's mit 2010 ein Compile-Error, das der linken Seite (DrawRect.Left := xxx) nichts zugewiesen werden kann. Ich weiß aus Marco Cantu's Delphi2010 Handbuch (Part 2, Seite 21), das sich da was mit Delphi2010 verändert hat, aber ich dachte, mit "write" in der Property-Beschreibung müsste es gehen.

Wie löse ich das Problem?

Vielen Dank & Gruß,
kaju

Neutral General 10. Feb 2010 10:02

Re: Read/Write Properties in Delphi 2010
 
Hi,

Records als Properties waren schon immer so eine Sache. (Haben in den Delphiversionen wo ich es ausprobiert hatte nie funktioniert).

Du kannst dann nur das Record als ganzes schreiben. Ist allerdings sehr unpraktisch. Dafür gibts auch irgendeine gute Erklärung warum das nicht gehen kann soweit ich weiß.

Die alternative die ich nur kenne wäre eine Klasse oder ein PRect (was allerdings auch nicht so komfortabel ist)

himitsu 10. Feb 2010 10:13

Re: Read/Write Properties in Delphi 2010
 
Delphi-Quellcode:
Form.DrawRect.Left := x;
wird intern zu

Delphi-Quellcode:
TempRect := Form.{Get}DrawRect;
TempRect.Left := x;
Und das war schon immer so ... drum isses gut, daß Delphi dieses jetzt endlich bemängelt.


Properties können entweder gelesen ODER gespeicher werden.
Hierfür wäre aber eine Lese-Änder-Schreib-Aktion nötig.

Uwe Raabe 10. Feb 2010 10:21

Re: Read/Write Properties in Delphi 2010
 
Das Fehler in den älteren Delphi-Versionen war einfach, daß der Compiler beim Schreiben eines Record-Properties, bei dem keine Getter-Methode angegeben war, eben direkt das Record-Feld beschrieben hat. Damit funktionierte der Code solange, bis der Entwickler den direkten Feldzugriff in eine Methode umwandelt. Leider merkte man das nicht sofort - lediglich durch ein fehlerhaftes Verhalten des Programms. Die jetzige Warnemeldung vermeidet das Problem daher schon an der Wurzel.

kaju74 10. Feb 2010 10:25

Re: Read/Write Properties in Delphi 2010
 
Hallo.

Danke für die Antwort(en)...aber wie würde man dass dann jetzt richtig schreiben, um über eine Property auf eine TRect-Struktur lesend und schreibend zuzugreifen? Mein Problem ist, das ich eine "alte" Komponente auf Delphi2010 migrieren muss, und dort dummerweise viele dieser Properties so deklariert sind...

Gruß,
kaju

Neutral General 10. Feb 2010 10:31

Re: Read/Write Properties in Delphi 2010
 
Zitat:

Zitat von Neutral General
Die Alternative die ich nur kenne wäre eine Klasse oder ein PRect (was allerdings auch nicht so komfortabel ist)


kaju74 10. Feb 2010 11:02

Re: Read/Write Properties in Delphi 2010
 
Okay...danke...dann muss ich wohl einiges umschreiben...

Lieben Gruß,
kaju


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:14 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz