Причина, по которой он был изменен, заключается в том, что это была ошибка компилятора. Тот факт, что он скомпилирован, не гарантирует, что он будет работать.
Сбой, как только Геттер был добавлен к свойству
unit Unit2;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm2 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
FPoint: TPoint;
function GetPoint: TPoint;
procedure SetPoint(const Value: TPoint);
{ Private declarations }
public
{ Public declarations }
property Point : TPoint read GetPoint write SetPoint;
end;
var
Form2: TForm2;
implementation
{$R *.dfm}
procedure TForm2.Button1Click(Sender: TObject);
begin
with Point do
begin
X := 10;
showmessage(IntToStr(x)); // 10
end;
with Point do
showmessage(IntToStr(x)); // 0
showmessage(IntToStr(point.x)); // 0
end;
function TForm2.GetPoint: TPoint;
begin
Result := FPoint;
end;
procedure TForm2.SetPoint(const Value: TPoint);
begin
FPoint := Value;
end;
end.
Ваш код внезапно сломается, и вы обвините Delphi / Borland в том, что он позволил ему это сделать.
Если вы не можете напрямую назначить свойство, не используйте хак для его присвоения - оно когда-нибудь откажется.
Воспользуйтесь предложением Брайана, чтобы вернуть указатель, но отбросьте С - вы можете сделать Point.X: = 10;
.