On Wed, 20 Jun 2007, Marc Weustink wrote:
> Michael Van Canneyt wrote: > > > > On Wed, 20 Jun 2007, Marc Weustink wrote: > > > > > Michael Van Canneyt wrote: > > > > On Wed, 20 Jun 2007, Micha Nelissen wrote: > > > > > > > > > Michael Van Canneyt wrote: > > > > > > This is due to a Delphi compatibility fix. Component names must be > > > > > > valid > > > > > > identifiers. Logical, since the name must match the field name in > > > > > > the > > > > > > form, > > > > > Why *must* it match a field name in the form ? > > > > Because the streaming depends on it. > > > > > > > > The stream contains the component name. The streaming mechanism creates > > > > a > > > > component, sets it's name and then matches this name with the list of > > > > published fields of TForm, and then fills in the pointer. > > > And what if a published field isn't found ? > > > > Nothing. Since there is no pointer to fill in, nothing happens. > > > > And this is right, because if you were to create everything run-time, and > > stream > > that, there are no pointers to fill in when the stream is being read again. > > :) > then back to Michas question: why must ? Because in the form declaration, the fieldname must match the name. Given TMyForm = Class(TForm) MyButton : TButton; end; and a form file Object TmYForm Object MyButton : TButton Caption = 'Click here' end end The MyButton (=component name) in the form file is used to look up the MyButton field in TMyForm. If it doesn't find that, then things in code like MyButton.Enabled:=False; Would lead to a nice access violation, if the instance pointer is Nil... Michael. _______________________________________________ fpc-devel maillist - fpc-devel@lists.freepascal.org http://lists.freepascal.org/mailman/listinfo/fpc-devel