Am 23.03.2012 15:13, schrieb Frank Church:
On 23 March 2012 13:49, Sven Barth<[email protected]> wrote:
Am 23.03.2012 14:11, schrieb Frank Church:
Is it meaningful or possible to change the visibility or the
properties and events in a form or datamodule, ie make the private or
protected?
Of late when I look the definition of a form, it all seems so odd to
me that properties, objects etc which are not meant to be accessible
to external modules are automatically visible.
I just want to check on how the form or module fits into the overall
program just by looking at the public and published properties. Am I
missing something about the ideas about Delphi and Lazarus which are
supposed to be obvious?
All objects that should be placed in the lfm/dfm file MUST be placed in the
published section in Delphi and Lazarus, because they are only streamed if
there is RTTI for them for which "published" was created. Yes, there are
other approaches, e.g. fpGUI has an IDE that has the GUI creation in code
and of which the IDE parses and modifies the "initialization routine" to
display a designer form, and another possiblity would be - if they'd be
implemented in FPC - the extended RTTI which allows you to specify that also
e.g. private fields have RTTI generated and (with an adjusted streaming
system) this could also be used. But neither Delphi nor Lazarus uses this
approach, so you must live with that (for now).
I remember this aspect form asking a similar question some time back.
What of the event handlers, is it the nature of the form designer
which requires them to be visible as well? It is possible also to set
an eventhandler to a routine in other file, but ideally shouldn't that
be something the develop can choose to expose only when he requires
it?
If you want to set event handlers through the object inspector, then you
need to have them published as well, because only then "MethodAddress"
which is used in the streaming will return something besides Nil.
I am now considering placeing an intermediate classes between the
consumers and producers in order to hide those details, so that
instead of some form calling a data module directly, it calls an
intermediate class that accesses the data module through the methods
and properties of that class..
This is maybe one of the better approaches you can do.
Regards,
Sven
--
_______________________________________________
Lazarus mailing list
[email protected]
http://lists.lazarus.freepascal.org/mailman/listinfo/lazarus