ANNOUNCE: V1.1 Delphi 1.0 Full Form Inheritance

Coming soon to a SuperPage near you.   Make sure you get v1.1 not v1.0

Bug fixes and two great new features:
* Automatic Registration of classes in ancestral forms.
* reseting of default values to overridden components before the descendant
  instance is read.

Ancestral Forms 1.1
Intelligent Form Inheritance for Delphi 1.0
(C) Sam Liddicott 1996
This product is not related to the company I work for.

Version 1.0 was very shortlived, it lasted less than 10 hours!

This was inspired by what I saw of Markus Mayers form inheritance.
It's been changed so much that nothing is left of his code.  (Except in
version 1.0 his company name and comments were left}
Version 1.1 is much improved.

I spent many hours hacking and came up with this good system of form


* Base your Ancestor form on TRootForm.

* Base your child form on your Ancestor form; base any form on that... etc.

* Any components on your ancestor forms will appear on your child forms

* An event (e.g. ButtonClick) in the child form can modify properties of
  components which exist in the ancestor form, the child form or both!
  Completely transparently!

* If a component on the child form has the same name as a component on
  the ancestor form then it will OVERRIDE the component on the ancestor
  form, and take its new position as defined on the child form but RETAIN
  the same child components it was given on the ancestor form.

  E.G.  Panel1 in ancestor has Button1 as a child.
        Panel1 in ancestor is a child of Panel2 and has a child Button2

        At runtime the child form will have Panel2 containing Panel1 which
        contains BOTH buttons!

  Just look at the demo application to see what can be done.

* Overridden components have their default values restored automatically
  before the overriding properties are read.  (This means that you can
  override a panel bevel width of 7 with the default of 1, although the
  default values are not stored - see the demo app for example)

* The components of the forms are loaded ancestor first, up the line of
  descendancy until the form loads its own components last.

* No need to call RegisterClass by hand for classes on the ancester form,
  like some other form inheritance schemes.  (No offence to Markus).

* csLoading and csReading in ComponentState fully honoured.

* The .loaded method for components is only called ONCE, and only at
  the END, when ALL the components of ALL the ancestors have loaded.

* The .loaded method for the form will be called once for each level of
  inheritance.  In your loaded method your can examine the TRootForm
  properties CurrentClass and ClassLevel to see which level loaded is being
  called for.  The last call will have CurrentClass set to the forms class
  and ClassLevel set to 0.


* You MUST call the inherited .loaded if you specify your own .loaded
  If you want your .loaded code to be executed once at the end then enclose
  it in "If ClassLevel=0 then begin...end;" after the inherited call.

* This is for Delphi version 1.  You won't need it under version 2 and don't
  expect it to work.

* The delphi IDE does not support inherited forms so at design time. You
  only see what you put on each form. (Which is perhaps a good thing).

* If a component exists on the descendant form with the same name as a
  component on the ancestral form it MUST be a compatable type.  I.E. the
  same type or a direct descendant.  Otherwise an exception is raised.

* This version displays a demo message if it is not run under the IDE.


As you can tell this is just a demo.
A real version without the message is available.

Prices are fif{*word*249} UK pounds for a copy without the demo notice.
Fifty UK pounds for a copy of the source.

Copies will be emailed, or snail mailed if you prefer.
Please add 2 uk pounds for snail mail.

The next version will support online registration and authorisation codes.

I can be contacted at:

Sam Liddicott
34A Anson Rd
United Kingdom
LE12 9PU

+44-1509 503856

Sam Liddicott                  |   Nothing I say is to be attributed as
Campbell Scientific Ltd.       | a company statement or representation.
14-20 Field Street, Shepshed,  *----------------------------------------