Carsten Bager wrote:
A have a unit (uSafeVar) with an object. The object has a property "data" of the type
"SafeVar_typ"
If I do this it works (wSafeVar is called)
var
p:SafeVar_typ;
begin
p.d:=111;
SafeVar.data:=p;
Here the Data setter is called, ie, wSafeVar, because you are assigning
a new value to it.
end
If I do this it dos not work but it compiles (wSafeVar is not called)
begin
SafeVar.data.d:=111;
Here the Data getter is called, ie, hSafeVar, because you are reading a
value from it.
Use a function as a getter instead of a class member. Btw getters and
setters have not the same syntax, you need to create two different methods.
--
Joao Morais
end;
If I do a read like this ( after the line SafeVar.data.d:=111;)
Writeln(SafeVar.data.d);
the output is 111
The compiler is
Free Pascal Compiler version 2.2.2 [2008/08/26] for arm
Of course I could create a property fore every variable I want to save, but in the real
program it is a big record, so I thought this was a smart way to get around this.
Is it in fact an error that it compiles?
Carsten
--------------------------------------------------------------------------
Unit uSafeVar;
{$mode objfpc}
Interface
Uses
sysutils,
Classes;
Type
SafeVar_typ = packed record
d:byte;
end;
TSafeVar=class(TObject)
Private
hSafeVar:SafeVar_typ;
f:file of SafeVar_typ;
Procedure wSafeVar(data:SafeVar_typ);
Public
constructor create;
destructor destroy; override;
property data:SafeVar_typ read hSafeVar write wSafeVar;
Published
end;
var
SafeVar:TSafeVar;
implementation
constructor TSafeVar.create;
Begin
inherited Create;
fillchar(hSafeVar,sizeof(SafeVar_typ),chr(0));
assign(f,SafeVar_dat);
if fileexists(SafeVar_dat) then
begin
reset(f);
read(f,hSafeVar);
end else
begin
rewrite(f);
Write(f,hSafeVar);
end;
End;
destructor TSafeVar.destroy;
Begin
inherited destroy;
close(f);
End;
Procedure TSafeVar.wSafeVar(data:SafeVar_typ);
Begin
hSafeVar:=data;
seek(f,0);
Write(f,data);
End;
initialization
SafeVar:=tSafeVar.create;
finalization
SafeVar.free;
End.
------------------------------------------
_______________________________________________
fpc-pascal maillist - fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/mailman/listinfo/fpc-pascal