[Lazarus] Docking state question

Hans-Peter Diettrich DrDiettrich1 at aol.com
Fri Dec 10 09:47:11 CET 2010

Since two weeks I'm offline, here some questions and comments about 
docking, in general and on Win7/64 in detail (in case it matters). I've 
installed Lazarus 32 and 64 bit, and SVN trunk. Unfortunately I 
cannot separate all issues properly, with my current mix of Lazarus and 
FPC and 32/64 bit versions :-(

In 0.29.2-32 (downloaded yesterday) I found docking support lacking or 
inacceptable. The DockManager examples are crippled, no dockable IDE, 
and the DockRect flickers heavily while dragging (refresh only twice per 
second, using examples\dockmanager\easytree). Are these known issues?

In the 64 bit and SVN trunk version (32 bit) docking works much 
smoother, but the dockable IDE is a mess. The DragManager gets no keys, 
i.e. docking cannot be aborted with Esc. The dockable IDE is not 
dockable at all, i.e. the docked forms cannot be undocked or docked to 
other windows. Perhaps this is due to the same problem, with message 
forwarding to the DragManager?

IDE window positions don't work for me on a second monitor, above the 
primary monitor. Whenever the IDE or a project is reopened, all windows 
are moved to the primary monitor. No such problems occur with the 
dockmanager\ide_demo2, i.e. it's an IDE problem. That's why I tried to 
use a dockable IDE, where the DockMaster could control window positions 
better, but failed with above problems.

Now I'd like to learn more about the intended future support of docking 
in general, and with the IDE in detail. When I'm online again (next 
year?) I can continue to contribute to these topics more directly. In 
the meantime I hope that the two IDE show stoppers can be cured by the team:

- pass key up/down messages (and more) to the DragManager
- retain IDE window positions with multiple monitors

In my current (private) work I've tested a new DragManager version, that 
routes all drag messages through the DockManager (if installed in the 
target site), and with the Performer functionality moved into the 
drag/dock objects. No problems found with this (fully optional) change.

In another experiment I tried to separate the DockManager functionality 
into dragging (site specific) functionality (elastic sites, 
KeepDockSiteSize), and into layout management (docktree, anchor docking, 
child sizing...). Wouldn't it be nice to add docking capabilities to all 
kinds of containers (panels, toolbars, source editor tabs...), without 
reimplementing the dragging part over and over again? The Controls[] and 
DockClients[] lists can be combined (i.e. DockClients[] removed), and a 
variety of layout managers can be used independently from docking 
support. Herefore only a layout API (child sizing and placement) is 
required, that allows to integrate various layout managers into the 
general (autosize...) methods.

In a first approach I derived the layout functionality of the 
DockManager from TChildSizing, so that TWinControl.ChildSizing can 
become a reference to any installed layout manager. What remains to do 
is the specification of a more general API in TChildSizing, that allows 
for other management of child controls (tree, anchored...). Then the 
still existing DockManager property could handle all the docking 
aspects, like extending/shrinking docksites or glueing them together, 
while it can defer the precise layout of the site to the ChildSizing 
manager. Delphi compatibility is not broken, it only is extended by 
separately installable layout managers.

Any comments?


More information about the Lazarus mailing list