dcmain.pas.svn-base
来自「TFormDesigner allows you move and resize」· SVN-BASE 代码 · 共 2,066 行 · 第 1/5 页
SVN-BASE
2,066 行
(* GREATIS FORM DESIGNER COMPONENT PRO *)
(* unit version 0.00.085 *)
(* Copyright (C) 2003 Greatis Software *)
(* http://www.greatis.com/formdes.htm *)
(* b-team@greatis.com *)
unit DCMain;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Menus,
Clipbrd, StdCtrls;
type
TGrabType = (gtNormal,gtLocked,gtMulti);
TGrabPosition = (
gpNone,
gpLeftTop,
gpLeftMiddle,
gpLeftBottom,
gpMiddleTop,
gpMiddleBottom,
gpRightTop,
gpRightMiddle,
gpRightBottom);
TCustomDesignerComponent = class;
TGrabHandle = class(TCustomControl)
private
FPosition: TGrabPosition;
FRect: TRect;
FLocked: Boolean;
procedure SetPosition(const Value: TGrabPosition);
procedure SetRect(const Value: TRect);
procedure SetLocked(const Value: Boolean);
procedure UpdateCoords;
protected
procedure Paint; override;
public
constructor Create(AOwner: TComponent); override;
property Position: TGrabPosition read FPosition write SetPosition;
property Rect: TRect read FRect write SetRect;
property Locked: Boolean read FLocked write SetLocked;
end;
TGrabHandles = class(TComponent)
private
FItems: array[TGrabPosition] of TGrabHandle;
FControl: TControl;
FVisible: Boolean;
procedure SetControl(const Value: TControl);
procedure SetVisible(const Value: Boolean);
function GetDesigner: TCustomDesignerComponent;
public
constructor Create(AOwner: TComponent); override;
procedure Update;
procedure UpdateCoords;
procedure BringToFront;
function FindHandle(AComponent: TComponent): TGrabPosition;
function IsGrabHandle(AComponent: TComponent): Boolean;
property Control: TControl read FControl write SetControl;
property Visible: Boolean read FVisible write SetVisible;
property Designer: TCustomDesignerComponent read GetDesigner;
end;
{$IFDEF VER100}
{$DEFINE DESIGNERASCLASS}
{$ENDIF}
{$IFDEF VER110}
{$DEFINE DESIGNERASCLASS}
{$ENDIF}
{$IFDEF VER150}
{$DEFINE DESIGNERHOOK}
{$ENDIF}
{$IFNDEF VER150}
{$DEFINE NOCSSUBCOMPONENT}
{$ENDIF}
{$IFDEF VER100}
{$DEFINE NOFRAMES}
{$ENDIF}
{$IFDEF VER110}
{$DEFINE NOFRAMES}
{$ENDIF}
{$IFDEF VER120}
{$DEFINE NOFRAMES}
{$DEFINE NODESIGNERHOOK}
{$ENDIF}
{$IFDEF VER125}
{$DEFINE NOFRAMES}
{$DEFINE NODESIGNERHOOK}
{$ENDIF}
{$IFDEF VER130}
{$DEFINE NODESIGNERHOOK}
{$ENDIF}
{$IFDEF DESIGNERASCLASS}
TDesignerInterface = class(TDesigner)
{$ELSE}
{$IFDEF NODESIGNERHOOK}
TDesignerInterface = class(TInterfacedObject,IDesigner)
{$ELSE}
TDesignerInterface = class(TInterfacedObject,IDesignerHook)
{$ENDIF}
{$ENDIF}
private
{ Private declarations }
FDesignerComponent: TCustomDesignerComponent;
{$IFNDEF DESIGNERASCLASS}
function GetCustomForm: TCustomForm;
procedure SetCustomForm(Value: TCustomForm);
function GetIsControl: Boolean;
procedure SetIsControl(Value: Boolean);
{$ENDIF}
function IsDesignMsg(Sender: TControl; var Message: TMessage): Boolean; {$IFDEF DESIGNERASCLASS} override; {$ENDIF}
procedure PaintGrid; {$IFDEF DESIGNERASCLASS} override; {$ENDIF}
procedure ValidateRename(AComponent: TComponent; const CurName, NewName: string); {$IFDEF DESIGNERASCLASS} override; {$ENDIF}
{$IFDEF DESIGNERASCLASS}
procedure Notification(AComponent: TComponent; Operation: TOperation); override;
{$ELSE}
procedure Notification(AnObject: TPersistent; Operation: TOperation);
{$ENDIF}
procedure Modified; {$IFDEF DESIGNERASCLASS} override; {$ENDIF}
{$IFNDEF DESIGNERASCLASS}
function UniqueName(const BaseName: string): string;
function GetRoot: TComponent;
property Form: TCustomForm read GetCustomForm write SetCustomForm;
{$ENDIF}
public
{ Public declarations }
constructor Create(ADesignerComponent: TCustomDesignerComponent);
end;
TMouseAction = (maNone,maDragging,maSelecting);
THintMode = (hmMove,hmSize);
TComponentAttribute = (caInvalid,caEditable,caLocked,caTransparent,caProtected,caDefaultCursor,caDefaultMenu);
TComponentAttributes = set of TComponentAttribute;
TDFMFormat = (dfmBinary,dfmText);
TAlignMode = (amNoChange,amLeftTop,amCenters,amRightBottom,amSpace,amWindowCenter);
TSizeMode = (smNoChange,smToSmallest,smToLargest,smValue);
TAlignmentPaletteOption = (apAutoShow,apStayOnTop,apShowHints,apFlatButtons);
TAlignmentPaletteOptions = set of TAlignmentPaletteOption;
TMessageEvent = procedure(Sender: TObject; AControl: TControl; var Message: TMessage; var Processed: Boolean) of object;
TComponentAttributesEvent = procedure(Sender: TObject; AComponent: TComponent; var Attributes: TComponentAttributes) of object;
TComponentEvent = procedure(Sender: TObject; AComponent: TComponent) of object;
TComponentAllowEvent = procedure(Sender: TObject; AComponent: TComponent; var Allow: Boolean) of object;
TChangeNameEvent = procedure(Sender: TObject; AComponent: TComponent; var AName: string) of object;
TChangeOwnerEvent = procedure(Sender: TObject; AComponent,OldOwner: TComponent; var AOwner: TComponent) of object;
TAlignmentPaletteEvent = procedure(Sender: TObject; Form: TForm) of object;
TComponentContainer = class(TCustomControl)
private
FComponent: TComponent;
FBitmap: TBitmap;
protected
procedure Paint; override;
procedure WndProc(var Msg: TMessage); override;
public
constructor CreateWithComponent(AOwner,AComponent: TComponent);
destructor Destroy; override;
property Component: TComponent read FComponent write FComponent;
end;
TCustomDesignerComponent = class(TComponent)
private
{ Private declarations }
FDesignTime: Boolean;
FInternalDestroy: Boolean;
FAPForm: TForm;
FHintWindow: THintWindow;
FActiveHandle: TGrabPosition;
FMouseAction: TMouseAction;
FDragRect: TRect;
FDragPoint: TPoint;
FSelectRect: TRect;
FSelected: TList;
FSelect: TWinControl;
FActive: Boolean;
FShowNonVisual: Boolean;
FShowMoveSizeHint: Boolean;
FAlignmentPalette: TAlignmentPaletteOptions;
FGridStep: Integer;
FSnapToGrid: Boolean;
FDisplayGrid: Boolean;
FGridColor: TColor;
FDesignerColor: TColor;
FGrabSize: Integer;
FGrabHandles: TGrabHandles;
FNormalGrabBorder: TColor;
FNormalGrabFill: TColor;
FLockedGrabBorder: TColor;
FLockedGrabFill: TColor;
FMultiGrabBorder: TColor;
FMultiGrabFill: TColor;
FPopupMenu: TPopupMenu;
FOnBeforeMessage: TMessageEvent;
FOnAfterMessage: TMessageEvent;
FOnComponentAttributes: TComponentAttributesEvent;
FOnDblClick: TComponentEvent;
FOnBeforeSelect: TComponentAllowEvent;
FOnAfterSelect: TComponentEvent;
FOnBeforeDeselect: TComponentAllowEvent;
FOnAfterDeselect: TComponentEvent;
FOnBeforeDrag: TComponentAllowEvent;
FOnAfterDrag: TComponentEvent;
FOnChangeName: TChangeNameEvent;
FOnChangeOwner: TChangeOwnerEvent;
FOnShowAlignmentPalette: TAlignmentPaletteEvent;
FOnHideAlignmentPalette: TAlignmentPaletteEvent;
function GetControl: TControl;
procedure SetControl(const Value: TControl);
function GetSelectedControlCount: Integer;
function GetSelectedControl(Index: Integer): TControl;
function GetComponent: TComponent;
procedure SetComponent(const Value: TComponent);
function GetSelectedCount: Integer;
function GetSelected(Index: Integer): TComponent;
function GetParentForm: TCustomForm;
procedure SetActive(const Value: Boolean);
procedure SetShowNonVisual(const Value: Boolean);
procedure SetAlignmentPalette(Value: TAlignmentPaletteOptions);
procedure SetDisplayGrid(const Value: Boolean);
procedure SetGridStep(const Value: Integer);
procedure SetGridColor(const Value: TColor);
procedure SetDesignerColor(const Value: TColor);
procedure SetGrabSize(const Value: Integer);
procedure SetNormalGrabBorder(const Value: TColor);
procedure SetNormalGrabFill(const Value: TColor);
procedure SetLockedGrabBorder(const Value: TColor);
procedure SetLockedGrabFill(const Value: TColor);
procedure SetMultiGrabBorder(const Value: TColor);
procedure SetMultiGrabFill(const Value: TColor);
function FindHandle(AComponent: TComponent): TGrabPosition;
function IsGrabHandle(AComponent: TComponent): Boolean;
procedure HideGrabs;
procedure ShowGrabs;
procedure ShowHint(AHint: string; Mode: THintMode);
procedure HideHint;
procedure DrawDragRects;
procedure DrawSelectRect;
procedure DrawMultiSelect(AControl: TControl);
procedure RemoveMultiSelect(AControl: TControl);
procedure CheckParent(MainControl: TControl);
procedure ProcessProtected(ARoot: TComponent);
function IsPressed(Key: Word): Boolean;
procedure CreateContainers;
procedure DestroyContainers;
function SelectControl(AControl: TControl): Boolean;
function DeselectControl(AControl: TControl): Boolean;
procedure DeselectAllControls;
function IsSelectedControl(AControl: TControl): Boolean;
function IsSelectableControl(AControl: TControl): Boolean;
function ComponentToControl(AComponent: TComponent): TControl;
function ControlToComponent(AComponent: TComponent): TComponent;
procedure ClearForm;
property Control: TControl read GetControl write SetControl;
property SelectedControlCount: Integer read GetSelectedControlCount;
property SelectedControls[Index: Integer]: TControl read GetSelectedControl;
protected
procedure PaintGrid(Canvas: TCanvas; R: TRect); virtual;
procedure PaintGrab(Canvas: TCanvas; R: TRect; GrabType: TGrabType; GrabPosition: TGrabPosition); virtual;
function MessageProcessor(Sender: TControl; var Message: TMessage): Boolean; virtual;
procedure NotificationProcessor(AComponent: TComponent; Operation: TOperation); virtual;
function NameProcessor(AComponent,AOwner: TComponent; AName: string): string;
function ComponentAttributes(AComponent: TComponent): TComponentAttributes; virtual;
procedure DoDblClick(AControl: TControl); virtual;
procedure DoBeforeSelect(AControl: TControl; var Allow: Boolean); virtual;
procedure DoAfterSelect(AControl: TControl); virtual;
procedure DoBeforeDeselect(AControl: TControl; var Allow: Boolean); virtual;
procedure DoAfterDeselect(AControl: TControl); virtual;
procedure DoBeforeDrag(AControl: TControl; var Allow: Boolean); virtual;
procedure DoAfterDrag(AControl: TControl); virtual;
procedure DoChangeName(AComponent: TComponent; var AName: string); virtual;
procedure DoChangeOwner(AComponent,OldOwner: TComponent; var AOwner: TComponent); virtual;
procedure DoShowAlignmentPalette(Form: TForm); virtual;
procedure DoHideAlignmentPalette(Form: TForm); virtual;
property ShowNonVisual: Boolean read FShowNonVisual write SetShowNonVisual default True;
property ShowMoveSizeHint: Boolean read FShowMoveSizeHint write FShowMoveSizeHint default True;
property GridStep: Integer read FGridStep write SetGridStep default 8;
property SnapToGrid: Boolean read FSnapToGrid write FSnapToGrid default True;
property DisplayGrid: Boolean read FDisplayGrid write SetDisplayGrid default True;
property GridColor: TColor read FGridColor write SetGridColor default clBlack;
property DesignerColor: TColor read FDesignerColor write SetDesignerColor default clBtnFace;
property GrabSize: Integer read FGrabSize write SetGrabSize default 5;
property NormalGrabBorder: TColor read FNormalGrabBorder write SetNormalGrabBorder default clBlack;
property NormalGrabFill: TColor read FNormalGrabFill write SetNormalGrabFill default clBlack;
property LockedGrabBorder: TColor read FLockedGrabBorder write SetLockedGrabBorder default clBlack;
property LockedGrabFill: TColor read FLockedGrabFill write SetLockedGrabFill default clGray;
property MultiGrabBorder: TColor read FMultiGrabBorder write SetMultiGrabBorder default clGray;
property MultiGrabFill: TColor read FMultiGrabFill write SetMultiGrabFill default clGray;
property PopupMenu: TPopupMenu read FPopupMenu write FPopupMenu;
property OnBeforeMessage: TMessageEvent read FOnBeforeMessage write FOnBeforeMessage;
property OnAfterMessage: TMessageEvent read FOnAfterMessage write FOnAfterMessage;
property OnDblClick: TComponentEvent read FOnDblClick write FOnDblClick;
property OnComponentAttributes: TComponentAttributesEvent read FOnComponentAttributes write FOnComponentAttributes;
property OnBeforeSelect: TComponentAllowEvent read FOnBeforeSelect write FOnBeforeSelect;
property OnAfterSelect: TComponentEvent read FOnAfterSelect write FOnAfterSelect;
property OnBeforeDeselect: TComponentAllowEvent read FOnBeforeDeselect write FOnBeforeDeselect;
property OnAfterDeselect: TComponentEvent read FOnAfterDeselect write FOnAfterDeselect;
property OnBeforeDrag: TComponentAllowEvent read FOnBeforeDrag write FOnBeforeDrag;
property OnAfterDrag: TComponentEvent read FOnAfterDrag write FOnAfterDrag;
property OnChangeName: TChangeNameEvent read FOnChangeName write FOnChangeName;
property OnChangeOwner: TChangeOwnerEvent read FOnChangeOwner write FOnChangeOwner;
property OnShowAlignmentPalette: TAlignmentPaletteEvent read FOnShowAlignmentPalette write FOnShowAlignmentPalette;
property OnHideAlignmentPalette: TAlignmentPaletteEvent read FOnHideAlignmentPalette write FOnHideAlignmentPalette;
public
{ Public declarations }
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
procedure Update; virtual;
procedure LeaveMouseAction;
function FindComponentContainer(AComponent: TComponent): TComponentContainer;
function Select(AComponent: TComponent): Boolean;
function Deselect(AComponent: TComponent): Boolean;
procedure DeselectAll;
function IsSelected(AComponent: TComponent): Boolean;
function IsSelectable(AComponent: TComponent): Boolean;
procedure CopyToClipboard;
procedure CutToClipboard;
procedure PasteFromClipboard;
procedure Delete;
procedure SaveToDFM(FileName: string; DFMFormat: TDFMFormat);
procedure LoadFromDFM(FileName: string; DFMFormat: TDFMFormat);
procedure SaveToStream(Stream: TStream; DFMFormat: TDFMFormat);
procedure LoadFromStream(Stream: TStream; DFMFormat: TDFMFormat);
procedure AlignToGrid;
procedure AlignControls(Hor,Ver: TAlignMode);
procedure SizeControls(WMode: TSizeMode; WValue: Integer; HMode: TSizeMode; HValue: Integer);
procedure AlignDialog;
procedure SizeDialog;
procedure ShowAlignmentPalette;
procedure HideAlignmentPalette;
procedure TabOrderDialog;
procedure CreationOrderDialog;
property Active: Boolean read FActive write SetActive default False;
property AlignmentPalette: TAlignmentPaletteOptions read FAlignmentPalette write SetAlignmentPalette;
property ParentForm: TCustomForm read GetParentForm;
property Component: TComponent read GetComponent write SetComponent;
property SelectedCount: Integer read GetSelectedCount;
property Selected[Index: Integer]: TComponent read GetSelected;
end;
TDesignerComponent = class(TCustomDesignerComponent)
published
{ Published declarations }
property AlignmentPalette;
property ShowNonVisual;
property ShowMoveSizeHint;
property GridStep;
property SnapToGrid;
property DisplayGrid;
property GridColor;
property DesignerColor;
property GrabSize;
property NormalGrabBorder;
property NormalGrabFill;
property LockedGrabBorder;
property LockedGrabFill;
property MultiGrabBorder;
property MultiGrabFill;
property PopupMenu;
property OnBeforeMessage;
property OnAfterMessage;
property OnDblClick;
property OnComponentAttributes;
property OnBeforeSelect;
property OnAfterSelect;
property OnBeforeDeselect;
property OnAfterDeselect;
property OnBeforeDrag;
property OnAfterDrag;
property OnChangeName;
property OnChangeOwner;
property OnShowAlignmentPalette;
property OnHideAlignmentPalette;
end;
implementation
uses DCAlign, DCSize, DCAlPal, DCTab, DCCreate;
const
WM_DRAWMULTISELECT = WM_USER+WM_PAINT;
function GetGrabCursor(GP: TGrabPosition): TCursor;
begin
case GP of
gpLeftTop,gpRightBottom: Result:=crSizeNWSE;
gpLeftMiddle,gpRightMiddle: Result:=crSizeWE;
gpLeftBottom,gpRightTop: Result:=crSizeNESW;
gpMiddleTop,gpMiddleBottom: Result:=crSizeNS;
else Result:=crArrow;
end;
end;
{ TDesignerReader }
type
TDesignerReader = class(TReader)
protected
function Error(const Message: string): Boolean; override;
end;
function TDesignerReader.Error(const Message: string): Boolean;
begin
Result:=True;
end;
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?