⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 aqdocking.pas.~3~

📁 AutomatedDocking Library 控件源代码修改 适合Delphi 2009 和C++ Builder 20009 使用。 修正汉字不能正确显示问题
💻 ~3~
📖 第 1 页 / 共 5 页
字号:
    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 + -