[fpc-devel] Lazarus

Felipe Monteiro de Carvalho felipemonteiro.carvalho at gmail.com
Mon Jan 23 15:20:29 CET 2006

On 1/21/06, VisionForce <webmaster at visionforceweb.com> wrote:
> So where would I need to start if I wanted to add this to Lazarus?

On Lazarus website, click on "Project Roadmap". There you will find
the status of "Docking (= the combination of forms)". It is marked as
"In Progress", so probably someone is already started working on this.
Now you need to find who is working on Docking and ask him how you can

Vincent probably knows who is working with docking (if someone is at all).

To implement this feature, I would:

* Search (google) how docking can be done using the Windows API on a
standard Windows API program

*  Search (google) how docking can be done using Gtk on a standard Gtk
program (if you want to add Linux support too)

* Research how to use the Delphi docking interface and try to make
methods compatible with it.

I know at least that a few methods needs to be implemented on TControl:

function ManualDock(NewDockSite: TWinControl; DropControl: TControl =
nil; ControlSide: TAlign = alNone): Boolean;

procedure Dock (NewDockSite: TWinControl; ARect: TRect); dynamic;

function ManualFloat(ScreenPos: TRect): Boolean;

Use ManualFloat to undock the control programmatically.

ScreenPos is the rectangle in which the control is displayed when it
starts floating

function GetDockEdge(MousePos: TPoint): TAlign; dynamic;

Use GetDockEdge to get the edge on which another control should be
docked when it is dragged over the control.

MousePos is the position of the mouse.

GetDockEdge is called automatically during drag-and-dock operations
involving the control.

There are probably many other things that need to be implemented =)

Felipe Monteiro de Carvalho

More information about the fpc-devel mailing list