📄 jvdockcontrolform.pas
字号:
procedure SetCanFloat(const Value: Boolean);
procedure SetDockLevel(const Value: Integer);
procedure SetEnableCloseButton(const Value: Boolean);
protected
procedure DoMenuPopup(X, Y: Integer); virtual;
procedure Deactivate; virtual;
procedure Activate; virtual;
procedure Notification(AComponent: TComponent; Operation: TOperation); override;
procedure DoFloatDockClients(PanelAlign: TAlign);
procedure DoFloatDockEachOther;
procedure SetBottomDock(const Value: Boolean); override;
procedure SetEachOtherDock(const Value: Boolean); override;
procedure SetEnableDock(const Value: Boolean); override;
procedure SetLeftDock(const Value: Boolean); override;
procedure SetRightDock(const Value: Boolean); override;
procedure SetTopDock(const Value: Boolean); override;
procedure DoFormOnClose(Sender: TObject; var Action: TCloseAction); override;
procedure AddDockStyle(ADockStyle: TJvDockBasicStyle); override;
procedure RemoveDockStyle(ADockStyle: TJvDockBasicStyle); override;
procedure WMSize(var Msg: TWMSize);
procedure WMActivate(var Msg: TWMActivate);
procedure WindowProc(var Msg: TMessage); override;
public
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
procedure FormStartDock(var Source: TJvDockDragDockObject); virtual;
procedure FormPositionDockRect(Source: TJvDockDragDockObject); virtual;
procedure FormDockOver(Source: TJvDockDragDockObject; X, Y: Integer;
State: TDragState; var Accept: Boolean); virtual;
procedure FormDockDrop(Source: TJvDockDragDockObject; X, Y: Integer); virtual;
procedure FormEndDock(Target: TObject; X, Y: Integer); virtual;
function FormUnDock(NewTarget: TWinControl; Client: TControl): Boolean; virtual;
procedure FormGetSiteInfo(Source: TJvDockDragDockObject;
Client: TControl; var InfluenceRect: TRect; MousePos: TPoint;
var CanDock: Boolean); virtual;
procedure FormGetDockEdge(Source: TJvDockDragDockObject; MousePos: TPoint; var DropAlign: TAlign); virtual;
procedure Assign(Source: TPersistent); override;
procedure MakeShowEvent;
procedure MakeHideEvent;
function CreateConjoinPanelClass(ConjoinHost: TForm): TJvDockConjoinPanel;
function CreateTabDockClass(TabHost: TForm): TJvDockTabPageControl;
function CreateConjoinHostAndDockControl(Control1, Control2: TControl;
DockType: TAlign): TJvDockConjoinHostForm; virtual;
function CreateTabHostAndDockControl(Control1, Control2: TControl): TJvDockTabHostForm; virtual;
function FindTabHostForm: TForm;
// return nil if not found, otherwise, get currently docked parent tabhost form if there is one.
procedure DoNCButtonDown(Msg: TWMNCHitMessage; Button: TMouseButton;
MouseStation: TJvDockMouseStation); virtual;
procedure DoNCButtonUp(Msg: TWMNCHitMessage; Button: TMouseButton;
MouseStation: TJvDockMouseStation); virtual;
procedure DoNCMouseMove(Msg: TWMNCHitMessage;
MouseStation: TJvDockMouseStation); virtual;
procedure DoNCButtonDblClk(Msg: TWMNCHitMessage; Button: TMouseButton;
MouseStation: TJvDockMouseStation); virtual;
procedure DoPaintDockGrabber(Canvas: TCanvas;
Control: TControl; const ARect: TRect);
procedure DoPaintDockSplitter(Canvas: TCanvas;
Control: TControl; const ARect: TRect);
procedure DoFormShowHint(HTFlag: Integer; var HintStr: string; var CanShow: Boolean);
procedure ShowParentForm;
procedure HideParentForm;
procedure RestoreChild;
property VSPaneWidth: Integer read FVSPaneWidth write SetVSPaneWidth;
property ParentVisible: Boolean read FParentVisible write SetParentVisible;
{ (rb) not used? }
property CurrentDockSite: TWinControl read FCurrentDockSite write SetCurrentDockSite;
property LastDockSite: TWinControl read FLastDockSite write SetLastDockSite;
property UnDockLeft: Integer read FUnDockLeft write SetUnDockLeft;
property UnDockTop: Integer read FUnDockTop write SetUnDockTop;
property DockState: Integer read GetDockState;
published
property LRDockWidth: Integer read GetLRDockWidth write SetLRDockWidth;
property TBDockHeight: Integer read GetTBDockHeight write SetTBDockHeight;
property NCPopupMenu: TPopupMenu read FNCPopupMenu write SetNCPopupMenu;
property DirectDrag: Boolean read FDirectDrag write FDirectDrag;
property ShowHint: Boolean read FShowHint write FShowHint;
property CanFloat: Boolean read FCanFloat write SetCanFloat default True;
property DockLevel: Integer read FDockLevel write SetDockLevel default 0;
property EnableCloseButton: Boolean read FEnableCloseButton write SetEnableCloseButton;
property EnableDock;
property LeftDock;
property TopDock;
property RightDock;
property BottomDock;
property EachOtherDock;
property DockStyle;
property CustomDock;
property OnFormShow: TNotifyEvent read FOnFormShow write FOnFormShow;
property OnFormHide: TNotifyEvent read FOnFormHide write FOnFormHide;
property OnCheckIsDockable: TJvDockCheckDockableEvent read FOnCheckIsDockable write FOnCheckIsDockable; {NEW!}
property OnTabHostFormCreated: TJvDockTabHostFormCreatedEvent read FOnTabHostFormCreated
write FOnTabHostFormCreated; {NEW!}
property OnNCButtonDown: TJvDockNCButtonDownEvent read FOnNCButtonDown write FOnNCButtonDown;
property OnNCButtonUp: TJvDockNCButtonUpEvent read FOnNCButtonUp write FOnNCButtonUp;
property OnNCMouseMove: TJvDockNCMouseMoveEvent read FOnNCMouseMove write FOnNCMouseMove;
property OnNCButtonDblClk: TJvDockNCButtonDblClkEvent read FOnNCButtonDblClk write FOnNCButtonDblClk;
property OnPaintDockGrabber: TJvDockPaintDockGrabberEvent read FOnPaintDockGrabber write FOnPaintDockGrabber;
property OnPaintDockSplitter: TJvDockPaintDockSplitterEvent read FOnPaintDockSplitter write FOnPaintDockSplitter;
property OnFormShowHint: TJvDockFormHintEvent read FOnFormShowHint write FOnFormShowHint;
end;
{ Maintained by a TJvDockConjoinHostForm; That is (always) the owner, ie.
that is assumed on multiple places in the code) }
TJvDockConjoinPanel = class(TJvDockCustomPanel)
private
function GetDockClient: TJvDockClient;
function GetParentForm: TJvDockConjoinHostForm;
procedure CMUnDockClient(var Msg: TCMUnDockClient); message CM_UNDOCKCLIENT;
protected
procedure ReloadDockedControl(const AControlName: string; var AControl: TControl); override;
procedure CustomStartDock(var Source: TJvDockDragDockObject); override;
procedure CustomGetSiteInfo(Source: TJvDockDragDockObject;
Client: TControl; var InfluenceRect: TRect; MousePos: TPoint;
var CanDock: Boolean); override;
procedure CustomDockOver(Source: TJvDockDragDockObject; X, Y: Integer;
State: TDragState; var Accept: Boolean); override;
procedure CustomPositionDockRect(Source: TJvDockDragDockObject; X, Y: Integer); override;
procedure CustomDockDrop(Source: TJvDockDragDockObject; X, Y: Integer); override;
procedure CustomEndDock(Target: TObject; X, Y: Integer); override;
function CustomUnDock(Source: TJvDockDragDockObject; NewTarget: TWinControl;
Client: TControl): Boolean; override;
procedure DoDockOver(Source: TDragDockObject; X, Y: Integer; State: TDragState;
var Accept: Boolean); override;
procedure GetSiteInfo(Client: TControl; var InfluenceRect: TRect;
MousePos: TPoint; var CanDock: Boolean); override;
function DoUnDock(NewTarget: TWinControl; Client: TControl): Boolean; override;
public
constructor Create(AOwner: TComponent); override;
procedure DockDrop(Source: TDragDockObject; X, Y: Integer); override;
{ DockClient of the Owner }
property DockClient: TJvDockClient read GetDockClient;
{ ParentForm is the Owner }
property ParentForm: TJvDockConjoinHostForm read GetParentForm;
end;
TJvDockAdvConjoinPanel = class(TJvDockConjoinPanel)
private
procedure CMUnDockClient(var Msg: TCMUnDockClient); message CM_UNDOCKCLIENT;
protected
procedure CustomDockDrop(Source: TJvDockDragDockObject; X, Y: Integer); override;
function CustomUnDock(Source: TJvDockDragDockObject; NewTarget: TWinControl;
Client: TControl): Boolean; override;
function DoUnDock(NewTarget: TWinControl; Client: TControl): Boolean; override;
public
procedure DockDrop(Source: TDragDockObject; X, Y: Integer); override;
end;
{ Maintained by a TJvDockTabHostForm; That is (always) the owner, ie.
that is assumed on multiple places in the code) }
TJvDockTabPageControl = class(TJvDockPageControl)
private
FDockClient: TJvDockClient;
FVersion: Integer;
function GetParentForm: TJvDockTabHostForm;
protected
procedure AdjustClientRect(var Rect: TRect); override;
procedure ReloadDockedControl(const AControlName: string;
var AControl: TControl); override;
procedure CustomStartDock(var Source: TJvDockDragDockObject); override;
procedure CustomGetSiteInfo(Source: TJvDockDragDockObject; Client: TControl;
var InfluenceRect: TRect; MousePos: TPoint; var CanDock: Boolean); override;
procedure CustomDockOver(Source: TJvDockDragDockObject; X, Y: Integer;
State: TDragState; var Accept: Boolean); override;
procedure CustomPositionDockRect(Source: TJvDockDragDockObject; X, Y: Integer); override;
procedure CustomDockDrop(Source: TJvDockDragDockObject; X, Y: Integer); override;
procedure CustomEndDock(Target: TObject; X, Y: Integer); override;
function CustomUnDock(Source: TJvDockDragDockObject; NewTarget: TWinControl;
Client: TControl): Boolean; override;
procedure CustomGetDockEdge(Source: TJvDockDragDockObject; MousePos: TPoint;
var DropAlign: TAlign); override;
function DoUnDock(NewTarget: TWinControl; Client: TControl): Boolean; override;
public
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
procedure DockDrop(Source: TDragDockObject; X, Y: Integer); override;
procedure LoadFromStream(Stream: TStream); virtual;
procedure SaveToStream(Stream: TStream); virtual;
{ Not necessairy the DockClient of the Owner? See TJvDockVSNETZone.DoCustomSetControlName }
property DockClient: TJvDockClient read FDockClient write FDockClient;
{ ParentForm is the Owner }
property ParentForm: TJvDockTabHostForm read GetParentForm;
property TabPosition;
end;
TJvDockAdvTabPageControl = class(TJvDockTabPageControl)
private
procedure CMUnDockClient(var Msg: TCMUnDockClient); message CM_UNDOCKCLIENT;
protected
procedure CustomDockDrop(Source: TJvDockDragDockObject; X, Y: Integer); override;
function CustomUnDock(Source: TJvDockDragDockObject; NewTarget: TWinControl;
Client: TControl): Boolean; override;
function DoUnDock(NewTarget: TWinControl; Client: TControl): Boolean; override;
public
destructor Destroy; override;
procedure DockDrop(Source: TDragDockObject; X, Y: Integer); override;
end;
{ A TJvDockableForm is a base class for TJvDockConjoinHostForm
and TJvDockTabHostForm which are the base classes for the two kinds of
docked-views possible for handling multiple controls docked to the same
dock site. }
TJvDockableForm = class(TForm)
private
FDockClient: TJvDockClient;
FDockableControl: TWinControl;
FUnDockControl: TControl;
FFloatingChild: TControl;
function GetDockableControl: TWinControl;
procedure SetDockableControl(const Value: TWinControl);
procedure SetUnDockControl(const Value: TControl);
protected
procedure DoClose(var Action: TCloseAction); override;
public
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
{ Fixed DockClient owned by the component }
property DockClient: TJvDockClient read FDockClient;
{ Either a TJvDockTabPageControl or a TJvDockConjoinPanel, assigned on
construction of the dockable form }
property DockableControl: TWinControl read GetDockableControl write SetDockableControl;
{ ?? Probably needs notification }
property UnDockControl: TControl read FUnDockControl write SetUnDockControl;
{ ?? Probably needs notification }
property FloatingChild: TControl read FFloatingChild;
end;
TJvDockConjoinHostForm = class(TJvDockableForm)
private
FPanel: TJvDockConjoinPanel;
protected
procedure DoClose(var Action: TCloseAction); override;
public
constructor Create(AOwner: TComponent); override;
property DockClient;
{ Constructed in TJvDockClient.CreateConjoinPanelClass }
property Panel: TJvDockConjoinPanel read FPanel write FPanel;
end;
TJvDockTabHostForm = class(TJvDockableForm)
private
FPageControl: TJvDockTabPageControl;
public
constructor Create(AOwner: TComponent); override;
function GetActiveDockForm: TForm;
property DockClient;
{ Constructed in TJvDockClient.CreateTabDockClass }
property PageControl: TJvDockTabPageControl read FPageControl write FPageControl;
end;
var
DefaultDockPanelClass: TJvDockPanelClass = TJvDockPanel;
DefaultDockSplitterClass: TJvDockSplitterClass = TJvDockSplitter;
DefaultConjoinPanelClass: TJvDockConjoinPanelClass = TJvDockConjoinPanel;
DefaultTabDockClass: TJvDockTabClass = TJvDockTabPageControl;
DefaultDockZoneClass: TJvDockZoneClass = TJvDockZone;
DefaultDockTreeClass: TJvDockTreeClass = TJvDockTree;
procedure ShowDockForm(DockWindow: TWinControl);
procedure HideDockForm(DockWindow: TWinControl);
procedure MakeDockClientEvent(Host: TControl; Visible: Boolean);
function GetFormVisible(DockWindow: TWinControl): Boolean;
procedure SetDockPageControlPopupMenu(Value: TPopupMenu);
procedure SetDockPageControlHotTrack(Value: Boolean);
procedure SetTabDockHostBorderStyle(Value: TFormBorderStyle);
procedure SetConjoinDockHostBorderStyle(Value: TFormBorderStyle);
{$IFDEF USEJVCL}
// Save Layout to JvAppStorage:
procedure SaveDockTreeToAppStorage(AppStorage: TJvCustomAppStorage; AppStoragePath: string = '');
// Load Layout from JvAppStorage:
procedure LoadDockTreeFromAppStorage(AppStorage: TJvCustomAppStorage; AppStoragePath: string = '');
{$ENDIF USEJVCL}
procedure SaveDockTreeToFile(FileName: string);
procedure LoadDockTreeFromFile(FileName: string);
procedure SaveDockTreeToReg(ARootKey: DWORD; RegPatch: string);
procedure LoadDockTreeFromReg(ARootKey: DWORD; RegPatch: string);
function FindDockBaseControl(Client: TControl): TJvDockBaseControl;
function FindDockClient(Client: TControl): TJvDockClient;
function FindDockServer(Client: TControl): TJvDockServer;
function IsDockable(Sender: TWinControl; Client: TControl;
DropCtl: TControl = nil; DockAlign: TAlign = alNone): Boolean;
function ComputeDockingRect(AControl: TControl;
var DockRect: TRect; MousePos: TPoint): TAlign;
{ Undocks AControl from Sender; Sender is used to calculate the rectangle in
which AControl is displayed when it starts floating. }
procedure DoFloat(Sender, AControl: TControl);
procedure SetDockSite(Control: TWinControl; SiteValue: Boolean);
procedure DoFloatForm(DockForm: TControl);
procedure FreeAllDockableForm;
procedure DoFloatAllForm;
function GetClientAlignControlArea(AControl: TWinControl; Align: TAlign; Exclude: TControl = nil): Integer;
procedure ResetDockClient(Control: TControl; NewTarget: TControl); overload;
procedure ResetDockClient(DockClient: TJvDockClient; NewTarget: TControl); overload;
procedure ReshowAllVisibleWindow;
{ Quick way to do tabbed docking programmatically - Added by Warren }
function ManualTabDock(DockSite: TWinControl; Form1, Form2: TForm): TJvDockTabHostForm;
{ Must create the initial tab dock with two pages, using ManualTabDock,
then you can add more pages with this:}
procedure ManualTabDockAddPage(TabHost: TJvDockTabHostForm; AForm: TForm);
function ManualConjoinDock(DockSite: TWinControl; Form1, Form2: TForm): TJvDockConjoinHostForm;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -