📄 aqdocking.pas.~3~
字号:
TabIndex: Integer;
Button: TaqTabButtonKind;
end;
TaqDockCaptionButtonsExFriend = class(TaqDockCaptionButtonsEx);
TaqInsideContainer = class(TaqCustomDockingContainer)
private
FTabs: TaqTabInfoList;
FFirstVisibleTabIndex: Integer;
FLastVisibleTabIndex: Integer;
FCurrentTabIndex: Integer;
FNavigateButtonVisible: Boolean;
FContainerButtonsRect: TRect;
FPrevButtonState: TaqTabButtonState;
FPrevButtonRect: TRect;
FNextButtonState: TaqTabButtonState;
FNextButtonRect: TRect;
FPopupButtonState: TaqTabButtonState;
FPopupButtonRect: TRect;
FTabMenu: TaqDockMenu;
FTabsMenuItem: TMenuItem;
FTabsPopupMenu: TPopupMenu;
FHotTabIndex: Integer;
FDockTabIndex: Integer;
FOrientation: TaqTabOrientation;
FMouseInControl: Boolean;
FActiveTab: TaqCustomDockingControl;
FVirtualTabIndex: Integer;
FShowCloseButtonOnTabs: TaqBooleanValue;
FShowInsideContainerDockZones: TaqBooleanValue;
FAdjustButtonSizeOnTabs: TaqBooleanValue;
FShowTabsPopupButton: TaqBooleanValue;
procedure TopActionExecuted(Sender: TObject);
procedure BottomActionExecuted(Sender: TObject);
procedure TabMenuItemClick(Sender: TObject);
procedure SetCurrentTabIndex(Index: Integer);
function GetTabCount: Integer;
function GetCurrentTab: TaqCustomDockingControl;
procedure SetFirstVisibleTabIndex(Value: Integer);
procedure SetLastVisibleTabIndex(Value: Integer);
function GetTabRect(Index: Integer): TRect;
function GetTabHeight: Integer;
procedure SetHotTabIndex(const Value: Integer);
procedure UpdateTabButton(var ButtonState: TaqTabButtonState; Rect: TRect;
Coord: TPoint; Shift: TShiftState);
procedure SetOrientation(const Value: TaqTabOrientation);
procedure SetDockTabIndex(const Value: Integer);
function GetTabTargetRect(ADockTabIndex: Integer): TRect;
procedure UpdateVisibility;
procedure SetCurrentTab(const Value: TaqCustomDockingControl);
procedure UpdateCurrentTabIndex(Index: Integer; Activation: Boolean = True);
function GetTabAreaRect: TRect;
function GetTabCaption(Index: Integer): AnsiString;
function GetTabImageIndex(Index: Integer): Integer;
function GetTabInfo(Index: Integer): TaqTabInfo;
function GetTabButtons(Index: Integer): TaqDockCaptionButtonsExFriend;
procedure SetShowCloseButtonOnTabs(const Value: TaqBooleanValue);
procedure SetAdjustButtonSizeOnTabs(const Value: TaqBooleanValue);
procedure SetShowTabsPopupButton(const Value: TaqBooleanValue);
function CanChangeTab: Boolean;
protected
procedure InvalidateTab(TabIndex: Integer);
procedure CalcTabControl;
procedure DrawTabControl;
procedure CreateTabPopupMenu;
procedure CreateTabListMenu;
procedure FocusPage(Forward: Boolean);
procedure InsertVirtualTab(AIndex: Integer; const ACaption: string; AImageIndex: Integer);
function GetVirtualTabIndex: Integer;
procedure DeleteTab(AIndex: Integer);
procedure ResetTabControl;
function GetTabByTabIndex(Index: Integer): TaqCustomDockingControl;
procedure ChildActionExecuted(Sender: TObject);
function GetButtonSize(DrawImage: Boolean): TPoint;
procedure ShowTabsPopupMenu;
function DoPopupMenuTabs(AMenu: TPopupMenu;var ACoord: TPoint; Flags: Cardinal): Boolean;
procedure Loaded; override;
procedure Paint; override;
{ TaqCustomDockingControl }
procedure DoChildDock(Index: Integer; Child: TaqCustomDockingControl); override;
procedure DoChildUndock(Index: Integer; Child: TaqCustomDockingControl); override;
procedure DoChildChanged(Child: TaqCustomDockingControl; Change: TaqDockingControlChange); override;
function AddChild(AChild: TaqCustomDockingControl): Integer; override;
procedure DeleteChild(AChild: TaqCustomDockingControl); override;
procedure SetDockingManager(const Value: TaqCustomDockingManager); override;
function IsValidChildAlignment(AAlign: TaqDockingAlignment): Boolean; override;
procedure ValidateAlignment(Child: TaqCustomDockingControl;
var AAlignment: TaqDockingAlignment); override;
procedure InvalidateChildren; override;
function CalcBoundsRect: TRect; override;
function GetCaptionRect: TRect; override;
procedure AdjustClientRect(var Rect: TRect); override;
function GetSplitterInfo(var Info: TaqSplitterInfo): Boolean; override;
function InternalRemoveFromDocking(Explicitly: Boolean = False): Boolean; override;
procedure DoMakeVisible(VisibleChild: TaqCustomDockingControl); override;
function IsChildVisible(AChild: TaqCustomDockingControl): Boolean; override;
procedure ChildrenSaved(Writer: TaqCustomDockingWriter); override;
procedure ChildrenLoaded(Reader: TaqCustomDockingReader); override;
procedure CreateActions; override;
procedure DoUpdateDockActions; override;
function CanInterceptAutoHide(AControl: TaqCustomDockingControl): Boolean; override;
class function GetPlacementInfoClass: TaqCustomPlacementInfoClass; override;
procedure AfterDockingRead; override;
procedure HandleOleDropActivity(Pos: TPoint; Action: TOleDropAction; var Key: TGUID); override;
{$IFDEF VCL}
procedure CMMouseEnter(var Message: TMessage); message CM_MOUSEENTER;
procedure CMMouseLeave(var Message: TMessage); message CM_MOUSELEAVE;
procedure CMVisibleChanged(var Message: TMessage); message CM_VISIBLECHANGED;
{$ELSE}
procedure KeyDown(var Key: Word; Shift: TShiftState); override;
procedure MouseEnter(AControl: TControl); override;
procedure MouseLeave(AControl: TControl); override;
procedure VisibleChanged; override;
{$ENDIF}
procedure MouseDown(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); override;
procedure MouseUp(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); override;
procedure MouseMove(Shift: TShiftState; X, Y: Integer); override;
property DockTabIndex: Integer read FDockTabIndex write SetDockTabIndex;
property TabInfo[Index: Integer]: TaqTabInfo read GetTabInfo;
property TabMenu: TaqDockMenu read FTabMenu;
public
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
function GetTabIndexByCoord(Coord: TPoint): Integer;
function GetHitInfo(Coord: TPoint): TaqTabHitInfoRec;
class function GetTypeId: Integer; override;
procedure SetFocus; override;
function UpdateDockingConstraints: Boolean; override;
procedure UpdateControl; override;
property AdjustButtonSizeOnTabs: TaqBooleanValue read FAdjustButtonSizeOnTabs write SetAdjustButtonSizeOnTabs;
property CurrentTab: TaqCustomDockingControl read GetCurrentTab write SetCurrentTab;
property CurrentTabIndex: Integer read FCurrentTabIndex write SetCurrentTabIndex;
property ShowInsideContainerDockZones: TaqBooleanValue read FShowInsideContainerDockZones write FShowInsideContainerDockZones;
property ShowTabsPopupButton: TaqBooleanValue read FShowTabsPopupButton write SetShowTabsPopupButton;
property FirstVisibleTabIndex: Integer read FFirstVisibleTabIndex write SetFirstVisibleTabIndex;
property HotTabIndex: Integer read FHotTabIndex write SetHotTabIndex;
property LastVisibleTabIndex: Integer read FLastVisibleTabIndex write SetLastVisibleTabIndex;
property Orientation: TaqTabOrientation read FOrientation write SetOrientation;
property ShowCloseButtonOnTabs: TaqBooleanValue read FShowCloseButtonOnTabs write SetShowCloseButtonOnTabs;
property TabAreaRect: TRect read GetTabAreaRect;
property TabCount: Integer read GetTabCount;
property TabHeight: Integer read GetTabHeight;
end;
TaqSizer = class(TaqCustomSizer)
private
FStyle: TaqDockingStyle;
protected
property Style: TaqDockingStyle read FStyle;
public
constructor Create(ADockingManager: TaqCustomDockingManager); override;
end;
TaqSplitSizer = class(TaqSizer)
protected
function CanRestoreChildren(AContainer: TaqSplitContainer): Boolean;
public
procedure MaximizeChild(AContainer: TaqSplitContainer;
AChild: TaqCustomDockingControl); virtual; abstract;
procedure RestoreChildren(AContainer: TaqSplitContainer); virtual; abstract;
procedure ArrangeChildren(AContainer: TaqSplitContainer;
StartIndex, EndIndex: Integer); virtual; abstract;
end;
TaqVerticalSizer = class(TaqSplitSizer)
protected
{ TaqSizer }
procedure ResizeChildren(AContainer: TaqCustomDockingContainer); override;
public
{ TaqSplitSizer }
procedure MaximizeChild(AContainer: TaqSplitContainer;
AChild: TaqCustomDockingControl); override;
procedure RestoreChildren(AContainer: TaqSplitContainer); override;
procedure ArrangeChildren(AContainer: TaqSplitContainer;
StartIndex, EndIndex: Integer); override;
end;
TaqHorizontalSizer = class(TaqSplitSizer)
protected
{ TaqSizer }
procedure ResizeChildren(AContainer: TaqCustomDockingContainer); override;
public
{ TaqSplitSizer }
procedure MaximizeChild(AContainer: TaqSplitContainer; AChild: TaqCustomDockingControl); override;
procedure RestoreChildren(AContainer: TaqSplitContainer); override;
procedure ArrangeChildren(AContainer: TaqSplitContainer;
StartIndex, EndIndex: Integer); override;
end;
TaqInsideSizer = class(TaqSizer)
protected
{ TaqSizer }
procedure ResizeChildren(AContainer: TaqCustomDockingContainer); override;
end;
TaqDockingFrame = class(TaqCustomDockingFrame)
private
FStyle: TaqDockingStyle;
protected
{ TaqCustomDockingFrame }
procedure SetMover(const Value: TaqCustomMover); override;
property Style: TaqDockingStyle read FStyle;
public
constructor Create(ADockingManager: TaqCustomDockingManager); override;
end;
TaqDocker = class(TaqCustomDocker)
private
FStyle: TaqDockingStyle;
protected
procedure DockSplit(Item, Target: TaqCustomDockingControl;
ContainerClass: TaqSplitContainerClass;
Order: TaqChildInsertOrder); virtual;
procedure DockInside(Item: TaqCustomDockingControl;
Order: TaqChildInsertOrder); virtual;
procedure DockVertical(Item, Target: TaqCustomDockingControl;
Order: TaqChildInsertOrder; const ItemRect: TRect); virtual;
procedure DockHorizontal(Item, Target: TaqCustomDockingControl;
Order: TaqChildInsertOrder; const ItemRect: TRect); virtual;
property Style: TaqDockingStyle read FStyle;
public
constructor Create(ADockingManager: TaqCustomDockingManager); override;
function GetDockingRegionType(APoint: TPoint): TaqDockingRegionType; virtual; abstract;
function GetDockingZoneRgn(ARegion: TaqDockingRegionType): TaqHandle; virtual; abstract;
function HasDockingZone(ARegion: TaqDockingRegionType): Boolean; virtual; abstract;
function GetDockingRect(ARegion: TaqDockingRegionType;
ADragControl: TaqCustomDockingControl): TRect; virtual; abstract;
function GetDockingFrameRgn(ARegion: TaqDockingRegionType;
ADragControl: TaqCustomDockingControl): TaqHandle; virtual; abstract;
procedure DockItem2(Region: TaqDockingRegionType; Item: TaqCustomDockingControl;
FocusItem: Boolean = True); virtual;
procedure DockItem(const P: TPoint; Item: TaqCustomDockingControl); override;
class function RegionToStr(ARegion: TaqDockingRegionType): string;
end;
TaqMover = class(TaqCustomMover)
private
FStyle: TaqDockingStyle;
FFrame: TaqCustomDockingFrame;
FTarget: TaqCustomDockingControl;
FActualTarget: TaqCustomDockingControl;
FDocker: TaqCustomDocker;
FRegion: TaqDockingRegionType;
procedure SetFrame(AFrame: TaqCustomDockingFrame);
function GetDockerByPos(const APoint: TPoint): TaqCustomDocker;
function GetInsideContainer(AControl: TaqCustomDockingControl): TaqInsideContainer;
protected
function CanDockTo(DockTarget: TaqCustomDockingControl): Boolean; virtual;
procedure DoAfterDockDrop(const Coord: TPoint); virtual;
procedure DoBeforeDockDrop; virtual;
procedure DoDockerChanging(OldTarget, NewTarget, OldActualTarget,
NewActualTarget: TaqCustomDockingControl; OldRegion, NewRegion: TaqDockingRegionType); virtual;
procedure DoDragDock(Target: TaqCustomDockingControl; Coord: TPoint;
FrameRgn: TaqHandle; var Info: string; var CanDock, CanFloat: Boolean); virtual;
procedure DoEndDock(Target: TaqCustomDockingControl; Coord: TPoint;
Cancelled: Boolean); virtual;
function DoDockOver(Control, Source: TaqCustomDockingControl; Coord: TPoint;
State: TaqDockOverState): Boolean; virtual;
procedure DoDockZone(Control: TaqDockingControl; Source: TaqCustomDockingControl;
Coord: TPoint; var Region: TaqDockingRegionType); virtual;
function FindDockingControl(const Coord: TPoint): TaqCustomDockingControl; virtual; abstract;
function GetActualTargetByPos(ADockTarget: TaqCustomDockingControl;
APoint: TPoint): TaqCustomDockingControl; virtual;
procedure EnterInsideContainer(AContainer: TaqInsideContainer;
ARegion: TaqDockingRegionType); dynamic;
procedure LeaveInsideContainer(AContainer: TaqInsideContainer); dynamic;
property Docker: TaqCustomDocker read FDocker;
property Target: TaqCustomDockingControl read FTarget;
property ActualTarget: TaqCustomDockingControl read FActualTarget;
property Style: TaqDockingStyle read FStyle;
property Frame: TaqCustomDockingFrame read FFrame;
public
constructor Create(ADockingManager: TaqCustomDockingManager); override;
procedure CalcDragInfo(const Coord: TPoint; DockingDisabled: Boolean;
var Info: TaqDockingFrameInfo; var CanDock, CanFloat: Boolean); override;
procedure StartDragging; override;
procedure EndDragging(const Coord: TPoint; const Bounds: TRect); override;
procedure CancelDragging(const Coord: TPoint); override;
property Region: TaqDockingRegionType read FRegion;
end;
TaqDockingStyle = class(TPersistent)
private
FDockingManager: TaqDockingManager;
FCursor: TCursor;
FTabOrientation: TaqTabOrientation;
procedure SetCursor(const Value: TCursor);
protected
procedure Initialize(ADockingManager: TaqDockingManager); virtual;
procedure Finalize; virtual;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -