[DUG] Zero-valued Real Properties not being stored to
.DFMfile???(D7 Enterprise)
Moretti, Giovanni
G.Moretti at massey.ac.nz
Mon Dec 5 15:48:59 NZDT 2005
Thanks Carl
Your solution worked a treat.
I've got multiple variables whose value needs to be able to be set to
zero (independently), So I've put a bunch of assignments where you've
got "FX:= 0" below. Mercifully ReadState() is called once to restore all
the properties - not once per variable being set!
Cheers and thanks
Giovanni
======================================
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
More information about the Delphi
mailing list