[DUG] Zero-valued Real Properties not being stored to .DFM file???(D7 Enterprise)

Karl Reynolds karlreynolds at xtra.co.nz
Fri Dec 2 08:36:36 NZDT 2005


This one was a good overnight poser!  The answer came to me in the shower:

Assuming your property X reads and writes private variable FX, then you
need:

protected
	procedure ReadState(Reader: TReader); override;

...

procedure T<your component>.ReadState(Reader: TReader);
begin
  FX := 0;
  inherited;
end;

Yes, this appears counter-intuitive, but it really does work.  Think about
it.

Cheers,
Carl

-----Original Message-----
From: delphi-bounces at ns3.123.co.nz [mailto:delphi-bounces at ns3.123.co.nz]On
Behalf Of Moretti, Giovanni
Sent: Wednesday, November 30, 2005 9:43 PM
To: NZ Borland Developers Group - Delphi List
Subject: [DUG] Zero-valued Real Properties not being stored to .DFM
file???(D7 Enterprise)


I'm using Delphi 7 Enterprise and I've finally tracked down why some
properties that can be changed in the object inspector don't have any
effect.
 
I've written a component that contains a real Published Property X of type
REAL:
 
 - X is initialised in the Constructor to +1
 
 - I change X to ZERO using the object inspector
 
 - I run the program and find that X still has its initialised value (+1)
 
AAARGH - it's taken quite a while to find out why and it's (as usual) a
single line buried in the help:
 
"STORAGE SPECIFIERS"
  "For Reals, pointer and strings there is an implicit default value of
ZERO"
 
And it seems the values aren't streamed from the object inspector into the
.DFM file unless they differ from the ASSUMED default (which is to be ZERO
but in my case is actually +1 !!!
 
To me this seems like a definite bug - you change a value in the Object
Inspector at Design-time but it doesn't make it to the .DFM file and has no
effect on the executable.
 
Setting STORED on the Property line doesn't help and for Reals you can't
specify a DEFAULT value).
 
Has this been fixed in later versions of Delphi? 
 
Any suggested work-arounds (such as storing 1E-8 instead of zero). This
component has several sets of X/Y/Z coords and I really don't want have to
maintain another a dozen tiny procedures each of which changes zero to 1E-8
...
 
Thanks
Giovanni
=====================================================================
Giovanni Moretti  |  Institute of Information Sciences and Technology
Senior Lecturer   |  Massey University, Palmerston North, New Zealand
Computer Science  |  Ph 64-6-3505799x2474 =Fax 64-6-3502259 == ZL2BOI 
=====================================================================
http://www-ist.massey.ac.nz/moretti     mailto:G.Moretti at massey.ac.nz
 
-------------- next part --------------
A non-text attachment was scrubbed...
Name: winmail.dat
Type: application/ms-tnef
Size: 3368 bytes
Desc: not available
Url : http://ns3.123.co.nz/pipermail/delphi/attachments/20051201/bfa3164e/winmail-0001.bin


More information about the Delphi mailing list