I read this question in which the same problem is discussed, anyway i was able to do this in Delphi 2009 and this was not possible as i upgraded to XE.
I paste here a simple dummy example: this compiles on 2009 and gives E2064 on XE... Why? Is it possible to setup XE to behave like 2009? Or should I go for a workaround?
unit Unit2;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TTestRecord = record
FirstItem : Integer;
SecondItem : Integer;
end;
TForm2 = class(TForm)
procedure AssignValues;
private
FTestRecord :TTestRecord;
public
property TestRecord : TTestRecord read FTestRecord write FTestRecord;
end;
var
Form2: TForm2;
implementation
{$R *.dfm}
procedure TForm2.AssignValues;
begin
with TestRecord do
begin
FirstItem := 14; // this gives error in XE but not in 2009
SecondItem := 15;
end;
end;
end.
The D2010 compiler is just more strict than the previous versions were. In the previous versions the compiler didn't complain, but often the results would not be as you would expect as it was acting on a temporary var so your changes would be gone by the end of the method.
The answers on the question to which you linked provide the explanations even better and provide the solutions (or work-arounds) from which to choose.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With