【delphi开源代码栏目提醒】:网学会员鉴于大家对delphi开源代码十分关注,论文会员在此为大家搜集整理了“uConjoinHost.pas”一文,供大家参考学习
unit uConjoinHost;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, uDockForm;
type
TConjoinDockHost = class(TForm)
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure FormDockDrop(Sender: TObject; Source: TDragDockObject; X,
Y: Integer);
procedure FormUnDock(Sender: TObject; Client: TControl;
NewTarget: TWinControl; var Allow: Boolean);
procedure FormDockOver(Sender: TObject; Source: TDragDockObject; X,
Y: Integer; State: TDragState; var Accept: Boolean);
procedure FormGetSiteInfo(Sender: TObject; DockClient: TControl;
var InfluenceRect: TRect; MousePos: TPoint; var CanDock: Boolean);
private
procedure DoFloat(AControl: TControl);
public
procedure UpdateCaption(Exclude: TControl);
end;
var
ConjoinDockHost: TConjoinDockHost;
implementation
{$R *.dfm}
procedure TConjoinDockHost.DoFloat(AControl: TControl);
var
ARect: TRect;
begin
//float the control with its original size.
ARect.TopLeft := AControl.ClientToScreen(Point(0, 0));
ARect.BottomRight := AControl.ClientToScreen(Point(AControl.UndockWidth,
AControl.UndockHeight));
AControl.ManualFloat(ARect);
end;
procedure TConjoinDockHost.FormClose(Sender: TObject;
var Action: TCloseAction);
begin
if DockClientCount = 1 then
begin
DoFloat(DockClients[0]);
Action := caFree;
end else
Action := caHide;
end;
procedure TConjoinDockHost.UpdateCaption(Exclude: TControl);
var
I: Integer;
begin
//if a dockable form is undocking, it will pass itself in as Exclude
//because even it hasn't actually been taken out of the DockClient array
//at this point.
Caption := '';
for I := 0 to DockClientCount-1 do
if DockClients[I].Visible and (DockClients[I] <> Exclude) then
Caption := Caption + TDockableForm(DockClients[I]).Caption + ' ';
end;
procedure TConjoinDockHost.FormDockDrop(Sender: TObject;
Source: TDragDockObject; X, Y: Integer);
begin
UpdateCaption(nil);
DockManager.ResetBounds(True);
//Force DockManager to redraw it's clients.
end;
procedure TConjoinDockHost.FormUnDock(Sender: TObject; Client: TControl;
NewTarget: TWinControl; var Allow: Boolean);
begin
//only 2 dock clients means the host must be destroyed and
//the remaining window undocked to its old position and size.
//(Recall that OnUnDock gets called before the undocking actually occurs)
if Client is TDockableForm then
TDockableForm(Client).DockSite := True;
if (DockClientCount = 2) and (NewTarget <> Self) then
PostMessage(Self.Handle, WM_CLOSE, 0, 0);
UpdateCaption(Client);
end;
procedure TConjoinDockHost.FormDockOver(Sender: TObject;
Source: TDragDockObject; X, Y: Integer; State: TDragState;
var Accept: Boolean);
begin
Accept := Source.Control is TDockableForm;
end;
procedure TConjoinDockHost.FormGetSiteInfo(Sender: TObject;
DockClient: TControl; var InfluenceRect: TRect; MousePos: TPoint;
var CanDock: Boolean);
begin
CanDock := DockClient is TDockableForm;
end;
end.
上一篇:
ucomform.pas
下一篇:
临床前药物安全性评价中毒性病理学新技术的应用