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

📄 aqdockingbase.pas.~1~

📁 AutomatedDocking Library 控件源代码修改 适合Delphi 2009 和C++ Builder 20009 使用。 修正汉字不能正确显示问题
💻 ~1~
📖 第 1 页 / 共 5 页
字号:
  TaqCustomDockingSite = class(TaqCustomControl)
  private
    FDockingManager: TaqCustomDockingManager;
    FTreeIndex: Integer;
    FDockingKey: TGUID;
    FDockingKeyLoaded: Boolean;
    FDockingState: TaqDockingSiteState;
    FCanUndockMainItem: Boolean;
    FAllowConstraints: Boolean;
    FAllowDock: Boolean;
    FOnCanUndock: TaqDockingQueryEvent;
    FOnCanDock: TaqDockingQueryEvent;
    FOnUndock: TaqDockingSiteEvent;
    FOnDock: TaqDockingSiteEvent;
    function GetParentWindowHandle: Cardinal;
    procedure ReadKey(Reader: TReader);
    procedure WriteKey(Writer: TWriter);
    procedure SetMainTreeItem(AControl: TaqCustomDockingControl);
    function  GetDesigning: Boolean;
  protected
    FScreenOrigin: TPoint;

    procedure UpdateOleDropEnabled(const Value: Boolean); virtual;
    procedure HandleOleDropActivity(Pos: TPoint; Action: TOleDropAction; var Key: TGUID); virtual;
    procedure DrawSplitters;
    procedure DrawDesigner(ACanvas: TCanvas; ABounds: TRect);
    procedure UpdateDockingTree(UpdateGroupControl: Boolean = True);
    procedure RegisterHiddenControl(AControl: TaqCustomDockingControl; AOrientation: TaqHideZoneOrientation); virtual;
    procedure UnregisterHiddenControl(AControl: TaqCustomDockingControl); virtual;
    procedure ShowDockingControl(AControl: TaqCustomDockingControl;
      Showing: Boolean; Immediately: Boolean = False); virtual;
    procedure DoActiveControlChange; virtual;
    function BeforeDockingRead: Boolean; virtual;

    function GetMainTreeItem: TaqCustomDockingControl; virtual;
    function GetScreenClientRect: TRect; virtual;
    function GetScreenDockZone: TRect; virtual;
    procedure UpdateMainTreeItem(AControl: TaqCustomDockingControl); virtual;
    procedure HideMainTreeItem; virtual;
    procedure SetDockingManager(const Value: TaqCustomDockingManager); virtual;
    function CanUndockItem(AItem: TaqCustomDockingControl): Boolean; virtual;
    function CanDockItem(AItem: TaqCustomDockingControl): Boolean; virtual;
    function CanAutoHideItem(AItem: TaqCustomDockingControl): Boolean; virtual;
    function CanUndoAutoHideItem(AItem: TaqCustomDockingControl): Boolean; virtual;
    procedure DoControlDock(Sender: TaqCustomDockingControl; Index: Integer;
      Child: TaqCustomDockingControl); virtual;
    procedure DoControlUndock(Sender: TaqCustomDockingControl; Index: Integer;
      Child: TaqCustomDockingControl); virtual;
    procedure DoControlChange(Sender: TaqCustomDockingControl; Change: TaqDockingControlChange); virtual;
    procedure DoControlResized(Sender: TaqCustomDockingControl); virtual;
    procedure CheckCanDock(AControl: TaqCustomDockingControl); virtual;
    procedure CheckCanUndock(AControl: TaqCustomDockingControl); virtual;
    procedure SaveToStream(Writer: TaqCustomDockingWriter); virtual;
    procedure LoadFromStream(Reader: TaqCustomDockingReader); virtual;
    class function GetDockingSiteTypeId: Integer; virtual;

{$IFDEF VCL}
    procedure CMVisibleChanged(var Message: TMessage); message CM_VISIBLECHANGED;
{$ELSE}
    procedure VisibleChanged; override;
{$ENDIF}
    procedure DefineProperties(Filer: TFiler); override;
    procedure ReadState(Reader: TReader); override;
    procedure CustomAlignPosition(Control: TControl; var NewLeft, NewTop,
      NewWidth, NewHeight: Integer; var AlignRect: TRect{$IFDEF VCL};
      AlignInfo: TAlignInfo{$ENDIF}); override;
    procedure MouseDown(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); override;
    procedure MouseMove(Shift: TShiftState; X, Y: Integer); override;
    procedure Resize; override;
    procedure Paint; override;
    procedure Notification(AComponent: TComponent; Operation: TOperation); override;
    procedure PerformSizeConstraintsUpdate; virtual;

{$IFDEF VCL}
    function  DesignWndProc(var Message: TMessage): Boolean; override;
    procedure WMSetCursor(var Message: TWMSetCursor); message WM_SETCURSOR;
{$ELSE}
    procedure CursorChanged; override;
{$ENDIF}

    property AllowConstraints: Boolean read FAllowConstraints write FAllowConstraints;
    property CanUndockMainItem: Boolean read FCanUndockMainItem write FCanUndockMainItem;
    property Designing: Boolean read GetDesigning;
  public
    constructor Create(AOwner: TComponent); override;
    destructor Destroy; override;

    procedure GetChildren(Proc: TGetChildProc; Root: TComponent); override;
    procedure PerformUpdate; virtual;
    function GetItemByPos(const Pos: TPoint): TaqCustomDockingControl; virtual;

    property AllowDock: Boolean read FAllowDock write FAllowDock;
    property MainItem: TaqCustomDockingControl read GetMainTreeItem write SetMainTreeItem;
    property TreeIndex: Integer read FTreeIndex;
    property DockingKey: TGUID read FDockingKey write FDockingKey;
    property DockingState: TaqDockingSiteState read FDockingState write FDockingState;
    property ParentWindowHandle: Cardinal read GetParentWindowHandle;
    property DockingManager: TaqCustomDockingManager read FDockingManager write SetDockingManager;

    property OnDock: TaqDockingSiteEvent read FOnDock write FOnDock;
    property OnUndock: TaqDockingSiteEvent read FOnUndock write FOnUndock;
    property OnCanDock: TaqDockingQueryEvent read FOnCanDock write FOnCanDock;
    property OnCanUndock: TaqDockingQueryEvent read FOnCanUnDock write FOnCanUnDock;
  end;

  TaqCustomFloatingFormClass = class of TaqCustomFloatingForm;
  TaqCustomFloatingForm = class(TForm)
  private
    FImageIndex: Integer;
    FDockingSite: TaqFloatingSite;
    FFloatingFormType: TaqFloatingFormType;
    FZombie: Boolean;
    FMainItem: TaqCustomDockingControl;
{$IFDEF VCL}
    FDragDockKind: TaqDragDockKind;
    FLastClickPosition: TPoint;
{$ELSE}
    FPositionChanged, FMoveEvent: Boolean;
{$ENDIF}
    procedure SetFloatingFormType(const Value: TaqFloatingFormType);
    procedure DoUpdateDockingTree;
    procedure FinalizeSite;
    procedure FinalizeForm;
    procedure UpdateForm;
  protected
    procedure Activate; override;
    procedure Deactivate; override;
{$IFDEF VCL}
    procedure CreateParams(var Params: TCreateParams); override;
    procedure CMVisibleChanged(var Message: TMessage); message CM_VISIBLECHANGED;
    procedure WMEraseBackground(var Message: TWMEraseBkgnd); message WM_ERASEBKGND;
    procedure WMActivate(var Message: TWMActivate); message WM_ACTIVATE;
    procedure WMClose(var Message: TWMClose); message WM_CLOSE;
    procedure WMContextMenu(var Message: TWMContextMenu); message WM_CONTEXTMENU;
    procedure WMSysCommand(var Message: TWMSysCommand); message WM_SYSCOMMAND;
    procedure WndProc(var Message: TMessage); override;
    procedure WMNCLButtonDblClk(var Message: TWMNCLButtonDblClk); message WM_NCLBUTTONDBLCLK;
    function WndCaptionDragging(var Message: TWMNCHitMessage): Boolean;
{$ELSE}
    function EventFilter(Sender: QObjectH; Event: QEventH): Boolean; override;
    procedure ChangeBounds(ALeft, ATop, AWidth, AHeight: Integer); override;
    procedure BoundsChanged; override;
{$ENDIF}
    procedure UpdateActions; override;
    procedure DoClose(var Action: TCloseAction); override;
    procedure RemoveDesigning;

  public
    constructor CreateNew(AOwner: TComponent; Dummy: Integer = 0); override;
    constructor CreateEx(AOwner: TComponent; AStayOnTop: Boolean); virtual;
    destructor Destroy; override;

    procedure SetBounds(ALeft, ATop, AWidth, AHeight: Integer); override;
    function  CloseQuery: boolean; override;

    property DockingSite: TaqFloatingSite read FDockingSite;
    property FloatingFormType: TaqFloatingFormType read FFloatingFormType write SetFloatingFormType;
  end;

  TaqParentedDockingSite = class(TaqCustomDockingSite)
  private
    FParentEvents: TaqWindowEventFilter;
    FOleDropHelper: TaqOleDropAcceptor;
  protected
    procedure ParentMoved(Sender: TControl); virtual;
    procedure ParentResized(Sender: TControl); virtual;
    procedure ParentDestroyed(Sender: TControl); virtual;

    procedure UpdateOleDropEnabled(const Value: Boolean); override;
{$IFDEF VCL}
    procedure CreateWindowHandle(const Params: TCreateParams); override;
    procedure DestroyWindowHandle; override;

    procedure CreateWnd; override;
    procedure SetParent(AParent: TWinControl); override;
{$ELSE}
    procedure SetParent(const AParent: TWidgetControl); override;
{$ENDIF}
    property ParentEvents: TaqWindowEventFilter read FParentEvents;
  public
    constructor Create(AOwner: TComponent); override;
    destructor Destroy; override;
  end;

  TaqFloatingSite = class(TaqParentedDockingSite)
  private
    FUpdatingStayOnTop: Boolean;
    procedure UpdateFloatingForm;
    function GetFloatingForm: TaqCustomFloatingForm;
  protected
    { TaqCustomDockingSite }
    function GetScreenDockZone: TRect; override;
    procedure UpdateMainTreeItem(AControl: TaqCustomDockingControl); override;
    procedure SetDockingManager(const Value: TaqCustomDockingManager); override;
    procedure DoControlDock(Sender: TaqCustomDockingControl; Index: Integer; Child: TaqCustomDockingControl); override;
    procedure DoControlUndock(Sender: TaqCustomDockingControl; Index: Integer; Child: TaqCustomDockingControl); override;
    procedure DoControlChange(Sender: TaqCustomDockingControl; Change: TaqDockingControlChange); override;
    procedure SaveToStream(Writer: TaqCustomDockingWriter); override;
    procedure LoadFromStream(Reader: TaqCustomDockingReader); override;
    class function GetDockingSiteTypeId: Integer; override;

{$IFDEF VCL}
    procedure CMVisibleChanged(var Message: TMessage); message CM_VISIBLECHANGED;
{$ELSE}
    procedure VisibleChanged; override;
{$ENDIF}
  public
    constructor Create(AOwner: TComponent); override;
    destructor Destroy; override;

    { TaqCustomDockingSite }
    procedure PerformUpdate; override;
    function GetItemByPos(const Pos: TPoint): TaqCustomDockingControl; override;
    property FloatingForm: TaqCustomFloatingForm read GetFloatingForm;
  end;

  TaqCustomDockingFrame = class(TaqOwnedObject)
  private
    FMaskForm: TaqCustomMaskForm;
    FMover: TaqCustomMover;
    FRealSize: TPoint;
    FAutoDragDocking: Boolean;
    FShowDockingHint: Boolean;
    FFrameInfo: string;
    FCanFloat: Boolean;
    procedure HandleFrameMove(Shift: TShiftState);
    procedure SetRealSize(const Value: TPoint);
    function CalculateFrameInfo(Dragging: Boolean; var Info: TaqDockingFrameInfo): Boolean;
    function GetBoundsRect: TRect;
    procedure SetBoundsRect(const Value: TRect);
    function GetFrameSize: TaqFrameSize;
    procedure SetFrameSize(const Value: TaqFrameSize);
    function GetCursorOffset: TPoint;
    procedure SetCursorOffset(const Value: TPoint);
    function GetVisible: Boolean;
    procedure SetVisible(const Value: Boolean);
    procedure MaskFormMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
    procedure MaskFormMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
    procedure MaskFormMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
    procedure MaskFormEndDrag(Sender: TObject; Successful: Boolean);
    procedure MaskFormFinalize(Sender: TObject);
    procedure SetRegion(ARegion: TaqHandle);
    function GetRegion: TaqHandle;
  protected
    procedure SetMover(const Value: TaqCustomMover); virtual;
    function GetMaskFormClass: TaqCustomMaskFormClass; virtual; abstract;
    property MaskForm: TaqCustomMaskForm read FMaskForm;
  public
    constructor Create(ADockingManager: TaqCustomDockingManager); override;
    destructor Destroy; override;

    property AutoDragDocking: Boolean read FAutoDragDocking write FAutoDragDocking;
    property BoundsRect: TRect read GetBoundsRect write SetBoundsRect;
    property CursorOffset: TPoint read GetCursorOffset write SetCursorOffset;
    property FrameSize: TaqFrameSize read GetFrameSize write SetFrameSize;
    property Mover: TaqCustomMover read FMover write SetMover;
    property RealSize: TPoint read FRealSize write SetRealSize;
    property Region: TaqHandle read GetRegion write SetRegion;
    property ShowDockingHint: Boolean read FShowDockingHint write FShowDockingHint;
    property Visible: Boolean read GetVisible write SetVisible;
  end;

  TaqOwnedPersistent = class(TPersistent)
  private
    FOwner: TaqCustomDockingManager;
  protected
    function GetOwner: TPersistent; override;
  public
    constructor Create(AOwner: TComponent); virtual;

    property DockingManager: TaqCustomDockingManager read FOwner;
  end;

  TaqDockingControls = class(TaqOwnedPersistent)
  private
    FControls: TComponentList;

⌨️ 快捷键说明

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