Autor Beitrag
matthew77
Hält's aus hier
Beiträge: 12



BeitragVerfasst: Mi 19.04.17 11:41 
Hallo Leute,
ich stoß mal wieder an meine Grenze. Ich kann auf eine Membervariable nicht über eine Setter-Property ("write") zugreifen, wohl aber über die eigentliche Variable (obwohl sie private ist).
Kann mir bitte einer erklären, was ich falsch mache?
Hier ein Beispielprojekt mit einer Form auf der ein Button liegt und nun der Code dazu:
ausblenden volle Höhe 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:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
unit Unit1;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls;

type
  TMyDataRecord = record
    Speed: Double;
    Name: AnsiString;
  end;

  TMeineTestklasse = class(TObject)
  private
    FMeineDaten: TMyDataRecord;
  public
    property MeineDaten: TMyDataRecord read FMeineDaten write FMeineDaten;
  end;

  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    { Private-Deklarationen }
    FMeineTestKlasse: TMeineTestklasse;
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
  // folgende Zeile gibt den Compilerfehler E2064 "Der linken Seite kann nichts zugewiesen werden"
  //FMeineTestKlasse.MeineDaten.Name := 'Otto';
  // aber so läuft es: (man beachte das "F" vor "MeineDaten"!!!
  FMeineTestKlasse.FMeineDaten.Name := 'Otto';
  // Lesend kann ich IMMER zugreifen, egal ob "MeineDaten" oder "FMeineDaten":
  Button1.Caption := FMeineTestKlasse.MeineDaten.Name;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  FMeineTestKlasse := TMeineTestklasse.Create();
end;

end.
matthew77 Threadstarter
Hält's aus hier
Beiträge: 12



BeitragVerfasst: Mi 19.04.17 17:13 
OK, bin jetzt etwas schlauer. Also: Hintergrund meiner Frage war eigentlich, dass ein Delphi 2007 in Delphi XE 10.2 nicht kompilieren wollte. Ich habe dann versucht, das Problem durch ein Beispiel nachvollziehbar zu reduzieren, mit dem Ergebnis, dass das in BEIDEN Entwicklungsumgebung nicht funktionierte - die Ursache war: ich hatte nicht beachtet, dass im Originalprogramm der schreibende Zugriff durch ein "with meinrecord do" umkapselt war, was in der alten Delphi Version irgendwie funktioniert hat, in der neuen aber nicht.
Lösungswege werden in diesem Thread aufgezeigt:
stackoverflow.com/qu...properties-in-delphi