📄 jvdockcontrolform.pas
字号:
{ FUTURE feature. call listeners (TJvDockTree objects) and tell them to update themselves. }
{$ENDIF JVCL_DOCKING_NOTIFYLISTENERS}
property DockBaseControlList: TList read FDockBaseControlList;
public
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
{$IFDEF JVCL_DOCKING_NOTIFYLISTENERS}
procedure AddDockTreeListener(Listener: TJvDockTree); {future feature. }
procedure RemoveDockTreeListener(Listener: TJvDockTree); {future feature. }
{$ENDIF JVCL_DOCKING_NOTIFYLISTENERS}
procedure AfterConstruction; override;
function CanSetEnableDocked(ADockBaseControl: TJvDockBaseControl): Boolean; virtual;
function CanSetLeftDocked(ADockBaseControl: TJvDockBaseControl): Boolean; virtual;
function CanSetRightDocked(ADockBaseControl: TJvDockBaseControl): Boolean; virtual;
function CanSetTopDocked(ADockBaseControl: TJvDockBaseControl): Boolean; virtual;
function CanSetBottomDocked(ADockBaseControl: TJvDockBaseControl): Boolean; virtual;
function CanSetEachOtherDocked(ADockBaseControl: TJvDockBaseControl): Boolean; virtual;
{$IFNDEF USEJVCL}
function GetControlName: string; virtual;
function GetDockStyleVersion: string; virtual;
{$ENDIF !USEJVCL}
procedure ResetCursor(Source: TJvDockDragDockObject); virtual;
function GetDockState(DockClient: TJvDockClient): Integer; virtual;
procedure ResetDockControlConjoinOption;
procedure ResetDockControlTabOption;
procedure ShowDockForm(ADockClient: TJvDockClient); virtual;
procedure HideDockForm(ADockClient: TJvDockClient); virtual;
function GetDockFormVisible(ADockClient: TJvDockClient): Boolean; virtual;
property Count: Integer read GetCount;
property DockBaseControlLists[Index: Integer]: TJvDockBaseControl read GetDockBaseControlLists;
procedure RestoreClient(DockClient: TJvDockClient); virtual;
{$IFNDEF USEJVCL}
property Version: string read GetDockStyleVersion;
property ControlName: string read GetControlName;
{$ENDIF !USEJVCL}
property DockPanelClass: TJvDockPanelClass read FDockPanelClass write FDockPanelClass;
property DockSplitterClass: TJvDockSplitterClass read FDockSplitterClass write FDockSplitterClass;
property ConjoinPanelClass: TJvDockConjoinPanelClass read FConjoinPanelClass write FConjoinPanelClass;
property TabDockClass: TJvDockTabClass read FTabDockClass write FTabDockClass;
property DockPanelTreeClass: TJvDockTreeClass read FDockPanelTreeClass write FDockPanelTreeClass;
property DockPanelZoneClass: TJvDockZoneClass read FDockPanelZoneClass write FDockPanelZoneClass;
property ConjoinPanelTreeClass: TJvDockTreeClass read FConjoinPanelTreeClass write FConjoinPanelTreeClass;
property ConjoinPanelZoneClass: TJvDockZoneClass read FConjoinPanelZoneClass write FConjoinPanelZoneClass;
property ConjoinServerOptionClass: TJvDockBasicConjoinServerOptionClass read FConjoinServerOptionClass
write FConjoinServerOptionClass;
property TabServerOptionClass: TJvDockBasicTabServerOptionClass read FTabServerOptionClass
write FTabServerOptionClass;
{ Owner of this component }
property ParentForm: TForm read FParentForm;
property ConjoinServerOption: TJvDockBasicConjoinServerOption read GetConjoinServerOption
write SetConjoinServerOption;
property TabServerOption: TJvDockBasicTabServerOption read GetTabServerOption write SetTabServerOption;
end;
TJvDockAdvStyle = class(TJvDockBasicStyle)
protected
function DockClientWindowProc(DockClient: TJvDockClient; var Msg: TMessage): Boolean; override;
end;
{$IFDEF USEJVCL}
TJvDockBaseControl = class(TJvComponent)
{$ELSE}
TJvDockBaseControl = class(TComponent)
{$ENDIF USEJVCL}
private
FEnableDock: Boolean;
FLeftDock: Boolean; { Can the parent form be docked into the Left dock? }
FTopDock: Boolean; { Can the parent form be docked into the Top dock? }
FRightDock: Boolean; { Can the parent form be docked into the Right dock? }
FBottomDock: Boolean; { Can the parent form be docked into the Bottom dock? }
FCustomDock: Boolean; {NEW! Can the parent form be docked into the Custom (center window) dock area? }
FEachOtherDock: Boolean;
FDockStyle: TJvDockBasicStyle;
FOldOnClose: TCloseEvent;
FOldOnCreate: TNotifyEvent;
FParentForm: TForm;
FOldWindowProc: TWndMethod;
procedure SetDockStyle(ADockStyle: TJvDockBasicStyle);
protected
procedure SetParentComponent(Value: TComponent); override;
function CanSetEnableDocked: Boolean; virtual;
function CanSetLeftDocked: Boolean; virtual;
function CanSetRightDocked: Boolean; virtual;
function CanSetTopDocked: Boolean; virtual;
function CanSetBottomDocked: Boolean; virtual;
function CanSetEachOtherDocked: Boolean; virtual;
procedure DoFormOnClose(Sender: TObject; var Action: TCloseAction); virtual;
procedure DoFormOnCreate(Sender: TObject); virtual;
procedure SetBottomDock(const Value: Boolean); virtual;
procedure SetEachOtherDock(const Value: Boolean); virtual;
procedure SetEnableDock(const Value: Boolean); virtual;
procedure SetLeftDock(const Value: Boolean); virtual;
procedure SetRightDock(const Value: Boolean); virtual;
procedure SetTopDock(const Value: Boolean); virtual;
procedure AddDockStyle(ADockStyle: TJvDockBasicStyle); virtual;
procedure RemoveDockStyle(ADockStyle: TJvDockBasicStyle); virtual;
procedure Notification(AComponent: TComponent; Operation: TOperation); override;
procedure WindowProc(var Msg: TMessage); virtual;
public
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
procedure Assign(Source: TPersistent); override;
{$IFNDEF USEJVCL}
function GetDockStyleVersion: string; virtual;
{$ENDIF !USEJVCL}
{ Owner of this component }
property ParentForm: TForm read FParentForm;
property EnableDock: Boolean read FEnableDock write SetEnableDock default True;
property LeftDock: Boolean read FLeftDock write SetLeftDock default True;
property TopDock: Boolean read FTopDock write SetTopDock default True;
property RightDock: Boolean read FRightDock write SetRightDock default True;
property BottomDock: Boolean read FBottomDock write SetBottomDock default True;
property EachOtherDock: Boolean read FEachOtherDock write SetEachOtherDock default True;
property CustomDock: Boolean read FCustomDock write FCustomDock default True; {NEW!}
property DockStyle: TJvDockBasicStyle read FDockStyle write SetDockStyle;
{$IFNDEF USEJVCL}
property Version: string read GetDockStyleVersion;
{$ENDIF !USEJVCL}
end;
TJvDockCustomPanelEvent = procedure(Sender: TJvDockServer;
var AParent: TWinControl; var Align: TAlign) of object; {NEW!}
TJvDockCheckDockableEvent = procedure(DockClient: TJvDockClient; DockForm: TForm;
DockServer: TJvDockServer; DockPanel: TJvDockPanel; var CanDock: Boolean) of object; {NEW!}
TJvDockTabHostFormCreatedEvent = procedure(DockClient: TJvDockClient;
TabHost: TJvDockTabHostForm) of object;
TJvDockGetClientAlignSizeEvent = procedure(Align: TAlign; var Value: Integer) of object;
TJvDockFinishSetDockPanelSizeEvent = procedure(DockPanel: TJvDockPanel) of object;
{
TJvDockServer is the Creator of 4 panels and 4 splitters that are placed on
the form that contains the TJvDockServer. The type of the panels and splitters
is determined by the DockStyle.
o TJvDockServer maintains the panels and splitters. If the dock server is
destroyed then the panels and splitters are destroyed.
o If the DockStyle is changed then the panels+splitters are destroyed and
recreated.
o If DockStyle is set to nil then the panels+splitters are nil.
}
TJvDockPosition = (dpLeft, dpRight, dpTop, dpBottom, dpCustom); {dpCustom NEW!}
TJvDockServer = class(TJvDockBaseControl)
private
FDockPanelClass: TJvDockPanelClass;
FDockPanels: array [TJvDockPosition] of TJvDockPanel;
FDockSplitterClass: TJvDockSplitterClass;
FSplitters: array [TJvDockPosition] of TJvDockSplitter;
FSplitterStyles: array [TJvDockPosition] of TJvDockSplitterStyle;
FOnCustomPanel: TJvDockCustomPanelEvent; // Self, AParent, Align
FOnGetClientAlignSize: TJvDockGetClientAlignSizeEvent;
FOnFinishSetDockPanelSize: TJvDockFinishSetDockPanelSizeEvent;
FAutoFocusDockedForm: Boolean;
procedure CreateDockPanelAndSplitter;
procedure DestroyDockPanelAndSplitter;
procedure CreateSplitterStyle;
procedure DestroySplitterStyle;
procedure SetSplitterStyles;
procedure DoGetClientAlignControl(Align: TAlign; var Value: Integer);
function GetDockPanel(DockPosition: TJvDockPosition): TJvDockPanel;
function GetDockPanelIndex(const Index: Integer): TJvDockPanel;
function GetDockPanelWithAlign(Index: TAlign): TJvDockPanel;
function GetDockSplitterWithAlign(Index: TAlign): TJvDockSplitter;
function GetSplitter(DockPosition: TJvDockPosition): TJvDockSplitter;
function GetSplitterIndex(const Index: Integer): TJvDockSplitter;
function GetSplitterStyle(DockPosition: TJvDockPosition): TJvDockSplitterStyle;
function GetSplitterStyleIndex(const Index: Integer): TJvDockSplitterStyle;
procedure SetSplitterStyle(DockPosition: TJvDockPosition; ASplitterStyle: TJvDockSplitterStyle);
procedure SetSplitterStyleIndex(const Index: Integer; ASplitterStyle: TJvDockSplitterStyle);
protected
procedure Notification(AComponent: TComponent; Operation: TOperation); override;
procedure DoFinishSetDockPanelSize(DockPanel: TJvDockPanel);
procedure DoFloatDockClients(DockPanel: TJvDockPanel);
procedure SetBottomDock(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 AddDockStyle(ADockStyle: TJvDockBasicStyle); override;
procedure RemoveDockStyle(ADockStyle: TJvDockBasicStyle); override;
procedure WMActivate(var Msg: TWMActivate);
procedure WindowProc(var Msg: TMessage); override;
public
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
function GetClientAlignControl(Align: TAlign): Integer;
property DockPanel[DockPosition: TJvDockPosition]: TJvDockPanel read GetDockPanel;
property Splitter[DockPosition: TJvDockPosition]: TJvDockSplitter read GetSplitter;
property SplitterStyle[DockPosition: TJvDockPosition]: TJvDockSplitterStyle read GetSplitterStyle write
SetSplitterStyle;
property LeftDockPanel: TJvDockPanel index 0 read GetDockPanelIndex;
property RightDockPanel: TJvDockPanel index 1 read GetDockPanelIndex;
property TopDockPanel: TJvDockPanel index 2 read GetDockPanelIndex;
property BottomDockPanel: TJvDockPanel index 3 read GetDockPanelIndex;
property CustomDockPanel: TJvDockPanel index 4 read GetDockPanelIndex;
property LeftSplitter: TJvDockSplitter index 0 read GetSplitterIndex;
property RightSplitter: TJvDockSplitter index 1 read GetSplitterIndex;
property TopSplitter: TJvDockSplitter index 2 read GetSplitterIndex;
property BottomSplitter: TJvDockSplitter index 3 read GetSplitterIndex;
property DockPanelWithAlign[Index: TAlign]: TJvDockPanel read GetDockPanelWithAlign;
property DockSplitterWithAlign[Index: TAlign]: TJvDockSplitter read GetDockSplitterWithAlign;
{$IFNDEF USEJVCL}
property Version: string read GetDockStyleVersion;
{$ENDIF !USEJVCL}
published
property LeftSplitterStyle: TJvDockSplitterStyle index 0 read GetSplitterStyleIndex write SetSplitterStyleIndex;
property RightSplitterStyle: TJvDockSplitterStyle index 1 read GetSplitterStyleIndex write SetSplitterStyleIndex;
property TopSplitterStyle: TJvDockSplitterStyle index 2 read GetSplitterStyleIndex write SetSplitterStyleIndex;
property BottomSplitterStyle: TJvDockSplitterStyle index 3 read GetSplitterStyleIndex write SetSplitterStyleIndex;
property AutoFocusDockedForm: Boolean read FAutoFocusDockedForm write FAutoFocusDockedForm default True;
property EnableDock;
property LeftDock;
property TopDock;
property RightDock;
property BottomDock;
property DockStyle;
property CustomDock;
property OnGetClientAlignSize: TJvDockGetClientAlignSizeEvent read FOnGetClientAlignSize
write FOnGetClientAlignSize;
property OnFinishSetDockPanelSize: TJvDockFinishSetDockPanelSizeEvent read FOnFinishSetDockPanelSize
write FOnFinishSetDockPanelSize;
property OnCustomPanel: TJvDockCustomPanelEvent read FOnCustomPanel write FOnCustomPanel; {NEW!}
end;
TJvDockMouseStation = (msFloat, msConjoin, msTabPage);
TJvDockNCButtonEvent = procedure(DockClient: TJvDockClient; Button: TMouseButton;
X, Y: Smallint; HitTest: Longint; MouseStation: TJvDockMouseStation) of object;
TJvDockNCButtonDownEvent = TJvDockNCButtonEvent;
TJvDockNCButtonUpEvent = TJvDockNCButtonEvent;
TJvDockNCButtonDblClkEvent = TJvDockNCButtonEvent;
TJvDockNCMouseMoveEvent = procedure(DockClient: TJvDockClient;
X, Y: Smallint; HitTest: Longint; MouseStation: TJvDockMouseStation) of object;
TJvDockPaintDockEvent = procedure(Canvas: TCanvas;
Control: TControl; const ARect: TRect) of object;
TJvDockPaintDockGrabberEvent = TJvDockPaintDockEvent;
TJvDockPaintDockSplitterEvent = TJvDockPaintDockEvent;
TJvDockFormHintEvent = procedure(HTFlag: Integer; var HintStr: string; var CanShow: Boolean) of object;
TJvDockClient = class(TJvDockBaseControl)
private
FConjoinPanelClass: TJvDockConjoinPanelClass;
FTabDockClass: TJvDockTabClass;
FParentVisible: Boolean;
FNCPopupMenu: TPopupMenu;
FDirectDrag: Boolean;
FShowHint: Boolean;
FCanFloat: Boolean;
FDockLevel: Integer;
FEnableCloseButton: Boolean;
FOnNCButtonDown: TJvDockNCButtonDownEvent;
FOnNCButtonUp: TJvDockNCButtonUpEvent;
FOnNCMouseMove: TJvDockNCMouseMoveEvent;
FOnNCButtonDblClk: TJvDockNCButtonDblClkEvent;
FOnPaintDockGrabber: TJvDockPaintDockGrabberEvent;
FOnPaintDockSplitter: TJvDockPaintDockSplitterEvent;
FOnFormShowHint: TJvDockFormHintEvent;
FOnFormShow: TNotifyEvent;
FOnFormHide: TNotifyEvent;
FOnCheckIsDockable: TJvDockCheckDockableEvent; {NEW!}
FOnTabHostFormCreated: TJvDockTabHostFormCreatedEvent; {NEW!}
FCurrentDockSite: TWinControl;
FLastDockSite: TWinControl;
FUnDockLeft: Integer;
FUnDockTop: Integer;
FVSPaneWidth: Integer;
procedure SetParentVisible(const Value: Boolean);
function GetLRDockWidth: Integer;
function GetTBDockHeight: Integer;
procedure SetLRDockWidth(const Value: Integer);
procedure SetTBDockHeight(const Value: Integer);
procedure SetNCPopupMenu(Value: TPopupMenu);
procedure WMNCLButtonDown(var Msg: TWMNCHitMessage);
procedure WMNCLButtonUp(var Msg: TWMNCHitMessage);
procedure WMNCLButtonDblClk(var Msg: TWMNCHitMessage);
procedure WMNCMButtonDown(var Msg: TWMNCHitMessage);
procedure WMNCMButtonUp(var Msg: TWMNCHitMessage);
procedure WMNCMButtonDblClk(var Msg: TWMNCHitMessage);
procedure WMNCRButtonDown(var Msg: TWMNCHitMessage);
procedure WMNCRButtonUp(var Msg: TWMNCHitMessage);
procedure WMNCRButtonDblClk(var Msg: TWMNCHitMessage);
procedure WMNCMouseMove(var Msg: TWMNCHitMessage);
procedure CMVisibleChanged(var Msg: TMessage);
procedure SetCurrentDockSite(const Value: TWinControl);
procedure SetLastDockSite(ALastDockSite: TWinControl);
procedure SetVSPaneWidth(const Value: Integer);
procedure SetUnDockLeft(const Value: Integer);
procedure SetUnDockTop(const Value: Integer);
function GetDockState: Integer;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -