Работает

Manual referencing via source code works.

TPersistentPropertyEditor.GetValues - List all possible values. Check for class compatibility and if the target form is listed in the CreateForm statements of the lpr file and if the target unit does not belong to a package that will conflict if used.

TPersistentPropertyEditor.GetValue - Show component path

TPersistentPropertyEditor.SetValue - search the component via the given path

When component is deleted, the property must be set to nil - This is not the job of the IDE, but should be achieved by the normal TComponent FreeNotification feature. Maybe eventually a check could be added, if this is implemented properly and force a nil on error.

When a component is renamed the property does not need to be updated, because the form is open and use the pointer not the name. But the designer must be flagged 'modified', because the lfm has changed. See below.

When reference form is opened, then target forms are opened too.

When target form is closed, then only the designer is closed. The component is kept hidden.

When all referring forms are closed/hidden, the hidden component will be automatically freed.

Circle dependencies are allowed.

When referenced component is renamed, the using units must be set modified.

When referenced component is deleted, the using units must be set modified.

Opening a unit now checks if designer is already created

Reopen/Revert a form - all connected forms are now closed

ToDo

Allow to connect to forms, that are used in the uses section. Technically there is no connection between the uses section and the form streaming, because form streaming uses global variables. But the IDE must somehow find the referenced form. Without the uses section the IDE must in worst case search and read every reachable lfm file on disk. So the uses section is a good compromise between speed and flexibility.

Add a frame to a form, add unit to uses section, package to project dependencies

Auto opening frame if not yet loaded

Close a frame that is currently used by a nested frame

Close a form with an embedded frame

Save a form with an embedded frame

Delete a frame embedded in a form

Inherited nested Components (Components with the frame as Owner and not the Form)

Show inherited nested components properties in OI

Forbid deleting nested inherited components

Forbid renaming nested inherited components

Show inherited nested components events in OI as ClassName.MethodName

When dblclick on inherited nested components events in OI create an event with the following code: Frame1.FrameResize(Sender);

When Ctrl+Click on inherited nested components events in OI jump to inherited code.

show nested components in OI component tree

Write nested component to stream

Forbid putting a component onto a nested frame, because TWriter does not support that.

Revert a form with an embedded frame

ToDo

Propagate changes of ancestor to nested controls

Учебник

Документация

Обновление

VFI - Visual Form Inheritance

Краткое описание

The .lfm streams of ancestors are read/applied before the current lfm. The .lfm of the descendant is the difference between ancestor and current state. The IDE allows to open and edit inherited forms. VFI does not only apply to TForm, but TDataModule, TFrame and any registered base designer class.
For the full features compile with -dEnableTFrame.