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

📄 aqdockingvswhidbey.pas

📁 AutomatedDocking Library 控件源代码修改 适合Delphi 2009 和C++ Builder 20009 使用。 修正汉字不能正确显示问题
💻 PAS
字号:
{*******************************************************************}
{                                                                   }
{       AutomatedDocking Library (Cross-Platform Edition)           }
{                                                                   }
{       Copyright (c) 1999-2008 AutomatedQA Corp.                   }
{       ALL RIGHTS RESERVED                                         }
{                                                                   }
{   The entire contents of this file is protected by U.S. and       }
{   International Copyright Laws. Unauthorized reproduction,        }
{   reverse-engineering, and distribution of all or any portion of  }
{   the code contained in this file is strictly prohibited and may  }
{   result in severe civil and criminal penalties and will be       }
{   prosecuted to the maximum extent possible under the law.        }
{                                                                   }
{   RESTRICTIONS                                                    }
{                                                                   }
{   THIS SOURCE CODE AND ALL RESULTING INTERMEDIATE FILES           }
{   (DCU, OBJ, DLL, ETC.) ARE CONFIDENTIAL AND PROPRIETARY TRADE    }
{   SECRETS OF AUTOMATEDQA CORP. THE REGISTERED DEVELOPER IS        }
{   LICENSED TO DISTRIBUTE THE AUTOMATEDDOCKING LIBRARY AND ALL     }
{   ACCOMPANYING VCL AND CLX CONTROLS AS PART OF AN EXECUTABLE      }
{   PROGRAM ONLY.                                                   }
{                                                                   }
{   THE SOURCE CODE CONTAINED WITHIN THIS FILE AND ALL RELATED      }
{   FILES OR ANY PORTION OF ITS CONTENTS SHALL AT NO TIME BE        }
{   COPIED, TRANSFERRED, SOLD, DISTRIBUTED, OR OTHERWISE MADE       }
{   AVAILABLE TO OTHER INDIVIDUALS WITHOUT WRITTEN CONSENT          }
{   AND PERMISSION FROM AUTOMATEDQA CORP.                           }
{                                                                   }
{   CONSULT THE END USER LICENSE AGREEMENT FOR INFORMATION ON       }
{   ADDITIONAL RESTRICTIONS.                                        }
{                                                                   }
{*******************************************************************}

unit aqDockingVSWhidbey;

interface

uses
  Controls,
  Types,
  aqDockingVS2005;

type
  TaqVSWhidbeyDockingStyle = class(TaqVS2005DockingStyle)
  protected
    function  CreateImageList: TImageList; override;
    function  GetDockImageMetrics: TaqDockingZoneImageMetrics; override;
    procedure UpdateImages; override;
    procedure UpdateActiveImages; override;
  end;

const
  SVSWhidbeyDockingStyleName = 'VSWhidbey';

implementation

uses
  ImgList,
  Graphics,
  Windows,
  aqDocking,
  aqDockingUtils;

{$R aqDockingVSWhidbey.res}

const
  SDockImageResNames: array [TaqDockingZoneImage] of string = (
    'AQDOCKLEFT',
    'AQDOCKTOP',
    'AQDOCKRIGHT',
    'AQDOCKBOTTOM',
    'AQDOCKINSIDETOP',
    'AQDOCKLEFT',
    'AQDOCKTOP',
    'AQDOCKRIGHT',
    'AQDOCKBOTTOM',
    'AQDOCKINSIDEBOTTOM'
  );

{ TaqVSWhidbeyDockingStyle }

function TaqVSWhidbeyDockingStyle.CreateImageList: TImageList;
begin
  Result := TImageListDIB.CreateSize(69, 69);
end;

function TaqVSWhidbeyDockingStyle.GetDockImageMetrics: TaqDockingZoneImageMetrics;
const
  HorzPoints: array [0..4] of TPoint = (
    (X: -1; Y: 35), (X: 33; Y: 0), (X: 46; Y: 13), (X: 46; Y: 56), (X: 33; Y: 70));
  VertPoints: array [0..4] of TPoint = (
    (X: 33; Y: 0), (X: 68; Y: 35), (X: 55; Y: 48), (X: 11; Y: 48), (X: -1; Y: 35));
  HorzTransform: TXForm = (
    eM11: -1; eM12: 0; eM21: 0; eM22: 1; eDx: 47; eDy: 0);
  VertTransform: TXForm = (
    eM11: 1; eM12: 0; eM21: 0; eM22: -1; eDx: 0; eDy: 47);
var
  I: TaqDockingZoneImage;
  R: TRect;
begin

  for I := Low(TaqDockingZoneImage) to High(TaqDockingZoneImage) do
    with Result[I] do
    begin
      case I of
        dziLeft, dziDetachedLeft, dziRight, dziDetachedRight:
        begin
          Region := CreatePolygonRgn(HorzPoints[0], Length(HorzPoints), WINDING);
          if (I = dziRight) or (I = dziDetachedRight) then
            aqTransformRegion(Region, HorzTransform);
        end;
        dziTop, dziDetachedTop, dziBottom, dziDetachedBottom:
        begin
          Region := CreatePolygonRgn(VertPoints[0], Length(VertPoints), WINDING);
          if (I = dziBottom) or (I = dziDetachedBottom) then
            aqTransformRegion(Region, VertTransform);
        end;
        dziInside, dziInsideBottom:
          Region := CreateRectRgnIndirect(Rect(0, 0, 43, 43));
      end;
      GetRgnBox(Region, R);
      Size.X := R.Right - R.Left;
      Size.Y := R.Bottom - R.Top;
    end;

  with Result[dziInside] do
  begin
    Offset := Point(-Size.X div 2 - 1, -Size.Y div 2);
    Result[dziInsideBottom].Offset := Offset;
  end;
  with Result[dziLeft] do
    Offset := Point(1 - Size.X + Result[dziInside].Offset.X, -1 - Size.Y div 2);
  with Result[dziRight] do
    Offset := Point(- 2 - Result[dziInside].Offset.X, -1 - Size.Y div 2);
  with Result[dziTop] do
    Offset := Point( - Size.X div 2, -1 - Size.Y + Result[dziInside].Offset.Y);
  with Result[dziBottom] do
    Offset := Point( - Size.X div 2, 2 - Result[dziInside].Offset.Y);
  with Result[dziDetachedLeft] do
    Offset := Point(0, -Size.Y div 2);
  with Result[dziDetachedTop] do
    Offset := Point(-Size.X div 2, 0);
  with Result[dziDetachedRight] do
    Offset := Point(-Size.X, -Size.Y div 2);
  with Result[dziDetachedBottom] do
    Offset := Point(-Size.X div 2, -Size.Y);
end;

procedure TaqVSWhidbeyDockingStyle.UpdateImages;
var
  I: TaqDockingZoneImage;
begin
  Images.Clear;
  for I := Low(TaqDockingZoneImage) to High(TaqDockingZoneImage) do
    TImageListDIB(Images).GetInstRes(HInstance, rtBitmap, SDockImageResNames[I], 0,
      LR_CREATEDIBSECTION{lrMap3DColors}, clFuchsia);
end;

procedure TaqVSWhidbeyDockingStyle.UpdateActiveImages;
var
  I: TaqDockingZoneImage;
begin
  ActiveImages.Clear;
  for I := Low(TaqDockingZoneImage) to High(TaqDockingZoneImage) do
    TImageListDIB(ActiveImages).GetInstRes(HInstance, rtBitmap, SDockImageResNames[I], 0,
      LR_CREATEDIBSECTION{lrMap3DColors}, clFuchsia);
end;

initialization
  aqDockingStyles.RegisterClass(SVSWhidbeyDockingStyleName, TaqVSWhidbeyDockingStyle);
finalization
  aqDockingStyles.UnregisterClass(SVSWhidbeyDockingStyleName);
end.

⌨️ 快捷键说明

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