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

📄 aqdocking.pas

📁 AutomatedDocking Library 控件源代码修改 适合Delphi 2009 和C++ Builder 20009 使用。 修正汉字不能正确显示问题
💻 PAS
📖 第 1 页 / 共 5 页
字号:
  end;

  TaqWorkspaceDocker = class(TaqDocker)
  public
    { TaqDocker }
    function GetDockingRegionType(APoint: TPoint): TaqDockingRegionType; override;
    function GetDockingZoneRgn(ARegion: TaqDockingRegionType): TaqHandle; override;
    function HasDockingZone(ARegion: TaqDockingRegionType): Boolean; override;
    function GetDockingRect(ARegion: TaqDockingRegionType; ADragControl: TaqCustomDockingControl): TRect; Override;
    function GetDockingFrameRgn(ARegion: TaqDockingRegionType; ADragControl: TaqCustomDockingControl): TaqHandle; override;
    procedure DockItem2(Region: TaqDockingRegionType;
      Item: TaqCustomDockingControl; FocusItem: Boolean = True); override;
    { TaqCustomDocker }
    procedure DockItem(const P: TPoint; Item: TaqCustomDockingControl); override;
  end;

  IaqDockingManagerCustomizer = interface(IInterface)
  ['{AC3F8B48-60ED-405B-B7D9-9F543D391A6F}']
    procedure EnableParentForms(AEnable: Boolean);
    procedure SelectPanel(AControl: TaqCustomDockingControl; AEdit: Boolean);
    procedure ShowDockingSetup(ADockingManager: TaqDockingManager;
      AShow: Boolean = True; const ActivePage: string = '');
    procedure UpdatePanel(AControl: TaqCustomDockingControl);
    function GetCustomizing: Boolean;
    property Customizing: Boolean read GetCustomizing;
  end;

  TaqFloatingFormCreateEvent = procedure(Sender: TaqDockingManager; Form: TaqCustomFloatingForm) of object;
  TaqFloatingFormCloseEvent = procedure(Sender: TaqDockingManager; Form: TaqCustomFloatingForm;
    var Action: TCloseAction) of object;
  TaqCollisionEvent = procedure(Sender: TaqDockingManager; AControl, ATarget: TaqCustomDockingControl;
      var ASize: TPoint; var ARegion: TaqDockingRegionType) of object;
  TaqContainerPopupEvent = procedure (Sender: TaqCustomDockingManager;
    Control: TaqCustomDockingContainer; AMenu: TPopupMenu; Flags: Cardinal;
    var ACoord: TPoint; var Allow: Boolean) of object;

  TaqDockingManager = class(TaqCustomDockingManager)
  private
    FMainDockSite: TaqCustomDockingSite;
    FDockingStyle: TaqDockingStyle;
    FIntDockingStyle: TaqDockingStyle;
    FOwnerForm: TCustomForm;
    FShowCloseButtonOnTabs: Boolean;
    FCloseButtonOnTabPosition: TaqCustomCaptionButtonPosition;
    FAdjustButtonSizeOnTabs: Boolean;
    FShowTabsPopupButton: Boolean;
    FShowInsideContainerDockZones: Boolean;
    FShowContainerCaption: TaqContainerTypes;
    FShowImages: TaqCaptionType;
    FCursor: TCursor;
    FStorePath: string;
    FStoreKind: TaqDockingStoreKind;
    FStoreOptions: TaqDockingStoreOptions;
    FStored: Boolean;
    FFinalized: Boolean;
    FNullSite: TaqControl;
    FCustomizer: IaqDockingManagerCustomizer;
    FCustomPages: TComponentList;
    FOwnDockingStyle: Boolean;
    FInfo: Pointer;
    FFloatingFormClass: TaqCustomFloatingFormClass;
    FAutoHideInterval: Integer;
    FAutoHideContainers: TaqContainerTypes;
    FAutoHideEnabled: Boolean;
    FAutoHideStartAction: TaqAutoHideStartAction;
    FAutoHideCaptions: TaqAutoHideCaptions;
    FAutoHideTabs: TaqAutoHideTabs;
    FAutoShowSpeed: Byte;
    FAutoHideSpeed: Byte;
    FOnFloatingFormClose: TaqFloatingFormCloseEvent;
    FOnFloatingFormCreate: TaqFloatingFormCreateEvent;
    FOnCollision: TaqCollisionEvent;
    FOnContainerPopup: TaqContainerPopupEvent;

    procedure SetMainDockSite(const Value: TaqCustomDockingSite);
    function DockToMainSite(Control: TaqCustomDockingControl): Boolean;
    procedure DockAllToMainSite;
    procedure SetShowContainerCaption(const Value: TaqContainerTypes);
    procedure SetShowImages(const Value: TaqCaptionType);
    procedure FloatingFormDestroy;
    procedure ParentFormDestroy;
    function GetCustomizing: Boolean;
    procedure SetDockingStyle(const Value: TaqDockingStyle);
    procedure InitializeDockingStyle;
    procedure FinalizeDockingStyle;
    function GetDockingStyle: TaqDockingStyle;
    function GetDockingStyleClass: TaqDockingStyleClass;
    procedure SetDockingStyleClass(const Value: TaqDockingStyleClass);
    function GetDockingStyleClassName: string;
    procedure SetDockingStyleClassName(const Value: string);
    procedure ReadStyle(Reader: TReader);
    procedure WriteStyle(Writer: TWriter);
    procedure SetAutoHideContainers(const Value: TaqContainerTypes);
    procedure SetAutoHideEnabled(const Value: Boolean);
    procedure SetAutoHideCaptions(const Value: TaqAutoHideCaptions);
    procedure SetAutoHideTabs(const Value: TaqAutoHideTabs);
    procedure SetShowCloseButtonOnTabs(const Value: Boolean);
    procedure SetCloseButtonOnTabPosition(const Value: TaqCustomCaptionButtonPosition);
    procedure SetAdjustButtonSizeOnTabs(const Value: Boolean);
    procedure SetShowTabsPopupButton(const Value: Boolean);
  protected
    function GetContainerByClass(AContainerClass: TaqCustomDockingContainerClass): TaqCustomDockingContainer;
    procedure DoFloatingFormCreate(AForm: TaqCustomFloatingForm); virtual;
    procedure DoFloatingFormClose(AForm: TaqCustomFloatingForm; var AAction: TCloseAction); virtual;
    procedure DoCollision(AControl, ATarget: TaqCustomDockingControl;
      var ASize: TPoint; var ARegion: TaqDockingRegionType); virtual;

    function CreateControl: TaqCustomDockingControl; override;
    function CreateNullDockingSite: TaqCustomDockingSite; override;
    procedure FinalizeNullDockingSite(var Site: TaqCustomDockingSite); override;
    procedure RegisterControl(Control: TaqCustomDockingControl); override;
    procedure UnregisterControl(Control: TaqCustomDockingControl); override;
    procedure BeforeDockingRead; override;
    procedure AfterDockingRead; override;
    procedure DoControlChanged(Control: TaqCustomDockingControl; Change: TaqDockingControlChange); override;
    function DoRenameDockControl(Control: TaqCustomDockingControl): string; override;
    function CreateFloatingForm(Rect: TRect; ClientCoords: Boolean = True): TaqCustomDockingSite; override;
    function CreateDockingFrame(Rect: TRect; const AMover: TaqCustomMover): TaqCustomDockingFrame; override;
    function GetContainerClass(Id: Integer): TaqCustomDockingContainerClass; override;
    procedure Notification(AComponent: TComponent; Operation: TOperation); override;
    procedure Loaded; override;
    procedure DefineProperties(Filer: TFiler); override;

    function  GetCustomButtonsPosition(ButtonIndex: Integer): TaqCustomCaptionButtonPosition; override;

    property OwnerForm: TCustomForm read FOwnerForm;
    property CustomPages: TComponentList read FCustomPages;
    property FloatingFormClass: TaqCustomFloatingFormClass read FFloatingFormClass write FFloatingFormClass;
  public
    constructor Create(AOwner: TComponent); override;
    destructor Destroy; override;

    procedure AddPropertyPage(PageFrame: TCustomFrame);
    procedure RemovePropertyPage(PageFrame: TCustomFrame);

    procedure Customize(AShow: Boolean = True; const ActivePage: string = '');

    procedure SaveLayout(Writer: TaqCustomDockingWriter); override;
    procedure LoadLayout(Reader: TaqCustomDockingReader); override;

    // Docking helpers
    procedure Dock(AControl, ADest: TaqCustomDockingControl;
      ARegion: TaqDockingRegionType; AFocusItem: Boolean = True);

    property Customizing: Boolean read GetCustomizing;
    property DockingStyleClass: TaqDockingStyleClass read GetDockingStyleClass write SetDockingStyleClass;
    property MainDockSite: TaqCustomDockingSite read FMainDockSite write SetMainDockSite;

    property ShowInsideContainerDockZones: Boolean read FShowInsideContainerDockZones write FShowInsideContainerDockZones;
  published
    property ActiveControl;
    property AutoDockKey;
    property AutoDragDocking;
    property AutoDragKey;
    property AutoHideCaptions: TaqAutoHideCaptions read FAutoHideCaptions write SetAutoHideCaptions default ahcActiveOnly;
    property AutoHideContainers: TaqContainerTypes read FAutoHideContainers write SetAutoHideContainers default cntAll;
    property AutoHideEnabled: Boolean read FAutoHideEnabled write SetAutoHideEnabled default True;
    property AutoHideInterval: Integer read FAutoHideInterval write FAutoHideInterval default 500;
    property AutoHideSpeed: Byte read FAutoHideSpeed write FAutoHideSpeed default 150;
    property AutoHideStartAction: TaqAutoHideStartAction read FAutoHideStartAction write FAutoHideStartAction default ahsHover;
    property AutoHideTabs: TaqAutoHideTabs read FAutoHideTabs write SetAutoHideTabs default ahtAllTabs;
    property AutoShowSpeed: Byte read FAutoShowSpeed write FAutoShowSpeed default 150;
    property CaptionButtons default dbiDefault;
    property CtrlTabControlSwitch;
    property DockingStyleClassName: string read GetDockingStyleClassName write SetDockingStyleClassName;
    property DockingStyle: TaqDockingStyle read FDockingStyle write SetDockingStyle;
    property Enabled;
    property FloatingFormConstraints;
    property FloatingFormOnTop default False;
    property FloatingFormType default fftTool;
    property Images;
    property Items;
    property MenuImages;
    property CustomButtonImages;
    property ShowCloseButtonOnTabs: Boolean read FShowCloseButtonOnTabs write SetShowCloseButtonOnTabs default False;
    property CloseButtonOnTabPosition: TaqCustomCaptionButtonPosition read FCloseButtonOnTabPosition write SetCloseButtonOnTabPosition default bcpBefore;
    property OleDropEnabled;

    property AdjustButtonSizeOnTabs: Boolean read FAdjustButtonSizeOnTabs write SetAdjustButtonSizeOnTabs default False;
    property ShowTabsPopupButton: Boolean read FShowTabsPopupButton write SetShowTabsPopupButton default False;
    property ShowContainerCaption: TaqContainerTypes read FShowContainerCaption write SetShowContainerCaption default [cntInsideBottom];
    property ShowDisabledButtons;
    property ShowDockButtonHint;
    property ShowDockingHint;
    property ShowImages: TaqCaptionType read FShowImages write SetShowImages default [ctCaption, ctTab, ctHiddenTab];
    property SplitterHCursor;
    property SplitterVCursor;
    property SplitterPopupMenu;
    property StoreKind: TaqDockingStoreKind read FStoreKind write FStoreKind default dskNone;
    property StoreOptions: TaqDockingStoreOptions read FStoreOptions write FStoreOptions default [];
    property StorePath: string read FStorePath write FStorePath;
    property StyleManager;
    property Style stored False;

    property OnActiveControlChange;
    property OnBeforeLoadControl;
    property OnCaptionPopup;
    property OnCloseQuery;
    property OnContainerPopup: TaqContainerPopupEvent read FOnContainerPopup write FOnContainerPopup;
    property OnChange;
    property OnCollision: TaqCollisionEvent read FOnCollision write FOnCollision;
    property OnDock;
    property OnDragDock;
    property OnFloatingFormCreate: TaqFloatingFormCreateEvent read FOnFloatingFormCreate write FOnFloatingFormCreate;
    property OnFloatingFormClose: TaqFloatingFormCloseEvent read FOnFloatingFormClose write FOnFloatingFormClose;
    property OnHide;
    property OnHideEx;
    property OnLoadControl;
    property OnPopupMenuCreate;
    property OnRegister;
    property OnRename;
    property OnShow;
    property OnSplitterPopup;
    property OnStyleChange;
    property OnUndock;
    property OnUnregister;
    property OnUpdateActions;
    property OnUpdateContainer;
  end;

  TaqDockingManagerList = class(TObject)
  private
    FList: TList;
    FAppEvents: TaqApplicationEvents;

    function GetDockingManager(Index: Integer): TaqDockingManager;
    function GetCount: Integer;
    function GetCustomizingManager: TaqDockingManager;
    function GetDockingManagerByForm(AForm: TCustomForm): TaqDockingManager;
    procedure DoApplicationActivate(Sender: TObject);
    procedure DoApplicationDeactivate(Sender: TObject);
    procedure DoShowFloatingForms(AOwnerForm: TCustomForm);
    procedure DoHideFloatingForms(AOwnerForm: TCustomForm);
  protected
    procedure RegisterDockingManager(AManager: TaqCustomDockingManager);
    procedure UnregisterDockingManager(AManager: TaqCustomDockingManager); virtual;
  public
    constructor Create;
    destructor Destroy; override;

    property DockingManagers[Index: Integer]: TaqDockingManager read GetDockingManager; default;
    property ManagerByForm[AForm: TCustomForm]: TaqDockingManager read GetDockingManagerByForm;

    property Count: Integer read GetCount;
    property CustomizingManager: TaqDockingManager read GetCustomizingManager;
  end;

const
  idactOrientationGroup  = idactBase             + $100;
  idactTopOrientation    = idactOrientationGroup + 1;
  idactBottomOrientation = idactOrientationGroup + 2;

  idactTabGroup          = idactBase             + $110;

  idactChildGroup        = idactBase             + $120;
  idactChildHide         = idactChildGroup       + idactHide - idactDefaultGroup;
  idactChildUndock       = idactChildGroup       + idactUndock - idactDefaultGroup;
  idactChildHelp         = idactChildGroup       + idactHelp - idactDefaultGroup;
  idactChildCustom       = idactChildGroup       + idactCustom - idactDefaultGroup;
  idactChildRename       = idactChildGroup       + idactRename - idactDefaultGroup;

  // Flags for OnPopupMenuCreate, OnCaptionPopup
  dpmTab                 = 1;

function aqDockingManagers: TaqDockingManagerList;
function aqDockingStyles: TaqClassList;
procedure RegisterCustomizer(const ACustomizer: IaqDockingManagerCustomizer);

implementation

uses
  SysUtils, Math, aqMaskForms, aqDockingConst, aqDockingNative,
{$IFDEF DefaultCustomizer}
  aqDockCustForm,
{$ENDIF}
{$IFDEF VCL}
  aqDockingVS2005, aqDockingVSWhidbey, Consts;
{$ELSE}
  QConsts;
{$ENDIF}

const
  AlignWeight: array [TaqDockingAlignment] of Integer = (0, -1, -1, 1, 1);
  TabTargetWidth = 3;
  ChildActions: array [0..4] of TaqActionID =
    (idactChildHide, idactChildUndock, idactChildHelp, idactChildCustom,
    idactChildRename);
  InsideRegions: array [TaqChildInsertOrder] of TaqDockingRegionType = (
    // cioBefore, cioAfter
    drtInsideBefore, drtInside);
  HorRegions: array [TaqChildInsertOrder] of TaqDockingRegionType = (
    // cioBefore, cioAfter
    drtLeft, drtRight);
  VertRegions: array [TaqChildInsertOrder] of TaqDockingRegionType = (
    // cioBefore, cioAfter
    drtTop, drtBottom);

type
  PFormPlacementInfo = ^TFormPlacementInfo;
  TFormPlacementInfo = record
    Mask: TaqDockingStoreOptions;
    Bounds: TRect;
    WindowState: TWindowState;
    Constraints: record
      MaxHeight: TConstraintSize;
      MaxWidth: TConstraintSize;
      MinHeight: TConstraintSize;
      MinWidth: TConstraintSize;
    end;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -