procedure Register;implementationconst SIZE = 6; HALFSIZE = SIZE div 2;type TSizer = class(TPanel) end;procedure Register; begin RegisterComponents('Samples', [TResizer]); end; // ***************************************************************** // TInvisWinprocedure TInvisWin.WndProc(var Message: TMessage); var ps : TPaintStruct; begin case Message.Msg of WM_ERASEBKGND: Message.Result := 1; WM_PAINT: begin BeginPaint(Handle, ps); EndPaint(Handle, ps); Message.Result := 1; end; else inherited WndProc(Message); end; end;procedure TInvisWin.CreateParams(var Params: TCreateParams); begin inherited; Params.ExStyle := Params.ExStyle or WS_EX_TRANSPARENT; end;procedure TInvisWin.WMDLGCode(var Message: TMessage); begin Message.Result := DLGC_WANTARROWS or DLGC_WANTALLKEYS; end; // ***************************************************************** // TMoverprocedure TMover.Show; begin Assert(Buddy <> nil); BoundsRect := Buddy.BoundsRect; Parent := Buddy.Parent; Visible := True; BringToFront; end; // ***************************************************************** // TResizerconstructor TResizer.Create(AOwner: TComponent); begin inherited; FActive := True; FKeepIn := True; FGridX := GRIDDEFAULT; FGridY := GRIDDEFAULT; FAllowSize := True; FAllowMove := True; GroupMovers := TList.Create; Sizers := TList.Create; OneMover := TMover.Create(Self); CreateOneMover(OneMover, nil); CreateSizers; end;destructor TResizer.Destroy; begin GroupMovers.Free; Sizers.Free; Sizers := nil; inherited; end;procedure TResizer.Notification(AComponent: TComponent; Operation: TOperation); begin inherited; if csDestroying in ComponentState then exit; if (AComponent = ResizeControl) and (Operation = opRemove) then ResizeControl := nil; end;procedure TResizer.SetActive(b: boolean); begin if b<>FActive then begin FActive := b; CheckSizers; end; end;procedure TResizer.SetControl(c: TControl); begin if c <> FControl then begin if c<>nil then begin if ResizeGroup<>nil then begin Assert(c.Parent = ResizeGroup, 'ResizeControl is not in ResizeGroup!'); CurMover := FindMoverByBuddy(c); end else begin CurMover := OneMover; CurMover.Buddy := c; end; CurMover.Show; end; FControl := c; CheckSizers; end; end;procedure TResizer.SetGroup(p: TWinControl); begin if p <> FGroup then begin FGroup := p; CreateGroupMovers; end; end;procedure TResizer.CreateGroupMovers; var i : integer; m : TMover; c : TControl; begin if csDesigning in ComponentState then exit; // Clear out the old Movers for i := 0 to GroupMovers.Count-1 do TObject(GroupMovers[i]).Free; GroupMovers.Clear; if ResizeGroup <> nil then begin for i := 0 to ResizeGroup.ControlCount-1 do begin c := ResizeGroup.Controls[i]; if (c is TMover) or (c is TSizer) then continue; m := TMover.Create(Self); CreateOneMover(m, c); GroupMovers.Add(m); m.Show; end; end; end;procedure TResizer.CreateSizers; var i : integer; p : TSizer; begin if csDesigning in ComponentState then exit; for i := 0 to 7 do begin p := TSizer.Create(Self); Sizers.Add(p); p.BevelOuter := bvNone; p.Width := SIZE; p.Height := SIZE; p.Color := clBlack; p.Caption := ''; p.Tag := i; p.OnMouseDown := SizerDown; p.OnMouseUp := SizerUp; p.OnMouseMove := SizerMove; p.TabStop := False; case i of 0, 7 : p.Cursor := crSizeNWSE; 2, 5 : p.Cursor := crSizeNESW; 1, 6 : p.Cursor := crSizeNS; 3, 4 : p.Cursor := crSizeWE; end; end; end;procedure TResizer.CreateOneMover(m: TMover; c: TControl); begin m.OnMouseDown := MoverDown; m.OnMouseUp := MoverUp; m.OnMouseMove := MoverMove; m.TabStop := True; m.OnKeyDown := MoverKeyDown; m.Buddy := c; end;procedure TResizer.CheckSizers; begin if (ResizeControl<>nil) and Active and (not (csDesigning in ComponentState)) then ShowSizers else HideSizers; end;
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
ExtCtrls;const
GRIDDEFAULT = 4;type
TResizer = class;
TMover = class; TMovingEvent = procedure(Sender: TResizer; var NewLeft, NewTop: integer) of object;
TSizingEvent = procedure(Sender: TResizer; var NewLeft, NewTop, NewWidth, NewHeight: integer) of object; TResizer = class(TComponent)
protected
FActive : boolean;
FControl : TControl;
Sizers : TList;
GroupMovers : TList;
FGroup : TWinControl;
FGridX : integer;
FGridY : integer;
FOnSized : TNotifyEvent;
FOnSizing : TSizingEvent;
FOnMoved : TNotifyEvent;
FOnMoving : TMovingEvent;
Sizing : boolean;
Moving : boolean;
OrigSize : TRect;
NewSize : TRect;
DownX : integer;
DownY : integer;
FAllowSize : boolean;
FAllowMove : boolean;
FKeepIn : boolean;
FHotTrack : boolean;
OneMover : TMover;
CurMover : TMover;
procedure Notification(AComponent: TComponent; Operation: TOperation); override;
procedure SetActive(b: boolean);
procedure SetControl(c: TControl);
procedure SetGroup(p: TWinControl);
procedure CreateSizers;
procedure CheckSizers;
procedure ShowSizers;
procedure HideSizers;
procedure SizerDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
procedure SizerUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
procedure SizerMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
procedure MoverDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
procedure MoverUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
procedure MoverMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
procedure DrawSizeRect(Rect: TRect);
procedure Calc_Size_Rect(SizerNum, dx, dy: integer);
procedure DoSizingEvent;
procedure Calc_Move_Rect(dx, dy: integer);
procedure DoMovingEvent;
procedure Constrain_Size;
procedure Constrain_Move;
procedure MoverKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
procedure DoSizeMove(var Key: Word; Shift: TShiftState; dx, dy: integer);
procedure CreateGroupMovers;
procedure CreateOneMover(m: TMover; c: TControl);
function FindMoverByBuddy(c: TControl): TMover;
public
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
published
property Active: boolean read FActive write SetActive default True;
property ResizeControl: TControl read FControl write SetControl;
property ResizeGroup: TWinControl read FGroup write SetGroup;
property GridX: integer read FGridX write FGridX default GRIDDEFAULT;
property GridY: integer read FGridY write FGridY default GRIDDEFAULT;
property OnSized: TNotifyEvent read FOnSized write FOnSized;
property OnSizing: TSizingEvent read FOnSizing write FOnSizing;
property OnMoved: TNotifyEvent read FOnMoved write FOnMoved;
property OnMoving: TMovingEvent read FOnMoving write FOnMoving;
property AllowSize: boolean read FAllowSize write FAllowSize default True;
property AllowMove: boolean read FAllowMove write FAllowMove default True;
property KeepInParent: boolean read FKeepIn write FKeepIn default True;
property HotTrack: boolean read FHotTrack write FHotTrack;
end; TInvisWin = class(TPanel) // This could also derive from TPanel
protected
procedure WndProc(var Message: TMessage); override;
procedure CreateParams(var Params: TCreateParams); override;
procedure WMDLGCode(var Message: TMessage); message WM_GETDLGCODE;
public
property OnKeyDown;
end; TMover = class(TInvisWin)
public
Buddy : TControl;
procedure Show;
end;
SIZE = 6;
HALFSIZE = SIZE div 2;type
TSizer = class(TPanel)
end;procedure Register;
begin
RegisterComponents('Samples', [TResizer]);
end;
// *****************************************************************
// TInvisWinprocedure TInvisWin.WndProc(var Message: TMessage);
var
ps : TPaintStruct;
begin
case Message.Msg of
WM_ERASEBKGND: Message.Result := 1;
WM_PAINT: begin
BeginPaint(Handle, ps);
EndPaint(Handle, ps);
Message.Result := 1;
end;
else
inherited WndProc(Message);
end;
end;procedure TInvisWin.CreateParams(var Params: TCreateParams);
begin
inherited;
Params.ExStyle := Params.ExStyle or WS_EX_TRANSPARENT;
end;procedure TInvisWin.WMDLGCode(var Message: TMessage);
begin
Message.Result := DLGC_WANTARROWS or DLGC_WANTALLKEYS;
end;
// *****************************************************************
// TMoverprocedure TMover.Show;
begin
Assert(Buddy <> nil);
BoundsRect := Buddy.BoundsRect;
Parent := Buddy.Parent;
Visible := True;
BringToFront;
end;
// *****************************************************************
// TResizerconstructor TResizer.Create(AOwner: TComponent);
begin
inherited;
FActive := True;
FKeepIn := True;
FGridX := GRIDDEFAULT;
FGridY := GRIDDEFAULT;
FAllowSize := True;
FAllowMove := True;
GroupMovers := TList.Create;
Sizers := TList.Create; OneMover := TMover.Create(Self);
CreateOneMover(OneMover, nil); CreateSizers;
end;destructor TResizer.Destroy;
begin
GroupMovers.Free;
Sizers.Free;
Sizers := nil;
inherited;
end;procedure TResizer.Notification(AComponent: TComponent; Operation: TOperation);
begin
inherited;
if csDestroying in ComponentState then exit;
if (AComponent = ResizeControl) and (Operation = opRemove) then
ResizeControl := nil;
end;procedure TResizer.SetActive(b: boolean);
begin
if b<>FActive then begin
FActive := b;
CheckSizers;
end;
end;procedure TResizer.SetControl(c: TControl);
begin
if c <> FControl then begin if c<>nil then begin
if ResizeGroup<>nil then begin
Assert(c.Parent = ResizeGroup, 'ResizeControl is not in ResizeGroup!');
CurMover := FindMoverByBuddy(c);
end else begin
CurMover := OneMover;
CurMover.Buddy := c;
end;
CurMover.Show;
end; FControl := c;
CheckSizers;
end;
end;procedure TResizer.SetGroup(p: TWinControl);
begin
if p <> FGroup then begin
FGroup := p;
CreateGroupMovers;
end;
end;procedure TResizer.CreateGroupMovers;
var
i : integer;
m : TMover;
c : TControl;
begin
if csDesigning in ComponentState then exit; // Clear out the old Movers
for i := 0 to GroupMovers.Count-1 do
TObject(GroupMovers[i]).Free;
GroupMovers.Clear; if ResizeGroup <> nil then begin
for i := 0 to ResizeGroup.ControlCount-1 do begin
c := ResizeGroup.Controls[i];
if (c is TMover) or (c is TSizer) then continue; m := TMover.Create(Self);
CreateOneMover(m, c);
GroupMovers.Add(m);
m.Show;
end;
end;
end;procedure TResizer.CreateSizers;
var
i : integer;
p : TSizer;
begin
if csDesigning in ComponentState then exit; for i := 0 to 7 do begin
p := TSizer.Create(Self);
Sizers.Add(p); p.BevelOuter := bvNone;
p.Width := SIZE;
p.Height := SIZE;
p.Color := clBlack;
p.Caption := '';
p.Tag := i;
p.OnMouseDown := SizerDown;
p.OnMouseUp := SizerUp;
p.OnMouseMove := SizerMove;
p.TabStop := False; case i of
0, 7 : p.Cursor := crSizeNWSE;
2, 5 : p.Cursor := crSizeNESW;
1, 6 : p.Cursor := crSizeNS;
3, 4 : p.Cursor := crSizeWE;
end;
end;
end;procedure TResizer.CreateOneMover(m: TMover; c: TControl);
begin
m.OnMouseDown := MoverDown;
m.OnMouseUp := MoverUp;
m.OnMouseMove := MoverMove;
m.TabStop := True;
m.OnKeyDown := MoverKeyDown;
m.Buddy := c;
end;procedure TResizer.CheckSizers;
begin
if (ResizeControl<>nil) and Active and (not (csDesigning in ComponentState)) then
ShowSizers
else
HideSizers;
end;
ole_back.move(0,0);
this.resize(ole_back.width+8,ole_back.height+(this.height - this.workspaceHeight()));
st_topcover.bringtotop=true;
st_rightcover.bringtotop=true;
st_leftcover.bringtotop=true;
st_bottomcover.bringtotop=true;
st_topcover.move(tab_1.x,tab_1.y);
st_topcover.resize(tab_1.width,60);
st_topcover.text = "";
st_rightcover.move(tab_1.x+tab_1.width - 10,tab_1.y);
st_rightcover.resize(20,tab_1.height);
st_rightcover.text = "";
st_bottomcover.move(tab_1.x,tab_1.y+tab_1.height - 10);
st_bottomcover.resize(tab_1.width,20)
st_bottomcover.text=""
st_leftcover.move(tab_1.x,tab_1.y);
st_leftcover.resize(20,tab_1.height);
st_leftcover.text="";
navdb.event click();
//this.title = profilestring(appPath+appProfile,"system","sysname","");
skin = uo_skinobj;
skin.of_init( appPath,ProfileString(appPath+appProfile,"system","DefaultUI","skin_mac"));
skin.of_applyskin( this)
f_RegionMainWindow(this);post wf_init();pb的代码 道理是一样的 不知对你有无帮助
aEdit.Left:=100;
aEdit.Width:=600;
aEdit.Top:=400;
aEdit.Height:=200;