OnDock (C++)
Description
The following example is taken from the docking demo. It shows how to set permissions to dock dockable objects onto a docking site.
Code
void __fastcall TMainForm::LeftDockPanelDockDrop(TObject *Sender,
TDragDockObject *Source, int X, int Y)
{
//OnDockDrop gets called after the client has actually docked,
//so you have to check for DockClientCount = 1 before making
//the dock panel visible.
TPanel *panel = dynamic_cast<TPanel *>(Sender);
if (panel->DockClientCount == 1)
ShowDockPanel(panel, True, NULL);
panel->DockManager->ResetBounds(True);
//Make DockManager repaint its clients.
}
void __fastcall TMainForm::LeftDockPanelDockOver(TObject *Sender,
TDragDockObject *Source, int X, int Y, TDragState State, bool &Accept)
{
Accept = (dynamic_cast<TDockableForm*>(Source->Control) != NULL);
if (Accept)
{
// Modify the DockRect to preview the dock area.
Types::TPoint TopLeft = LeftDockPanel->ClientToScreen(Point(0, 0));
Types::TPoint BottomRight = LeftDockPanel->ClientToScreen(
Point(this->ClientWidth/3, LeftDockPanel->Height));
Source->DockRect = Types::TRect(TopLeft, BottomRight);
}
}
void __fastcall TMainForm::LeftDockPanelUnDock(TObject *Sender,
TControl *Client, TWinControl *NewTarget, bool &Allow)
{
//OnUnDock gets called before the client is undocked, in order to optionally
//disallow the undock. DockClientCount is never 0 when called from this event.
TPanel *panel = dynamic_cast<TPanel *>(Sender);
if (panel->DockClientCount == 1)
ShowDockPanel(panel, False, NULL);
}
void __fastcall TMainForm::LeftDockPanelGetSiteInfo(TObject *Sender,
TControl *DockClient, TRect &InfluenceRect, TPoint &MousePos,
bool &CanDock)
{
//If CanDock is True, the panel does not automatically draw the preview rectangle.
CanDock = DockClient->ClassNameIs("TDockableForm");
if (!CanDock)
{
ShowMessage(L"GetSiteInfo CanDock went bad!");
}
}
Uses
- Vcl.Controls.TWinControl.OnUnDock ( fr | de | ja )
- Vcl.Controls.TWinControl.OnDockDrop ( fr | de | ja )
- Vcl.Controls.TWinControl.OnDockOver ( fr | de | ja )
- Vcl.Controls.TWinControl.OnGetSiteInfo ( fr | de | ja )
- Vcl.Controls.TWinControl.DockManager ( fr | de | ja )
- Vcl.Controls.IDockManager.ResetBounds ( fr | de | ja )
- Vcl.Controls.TControl.ClientToScreen ( fr | de | ja )
- Vcl.Controls.TDragDockObject.DockRect ( fr | de | ja )