菜鸟 SOS (200分)

  • 主题发起人 主题发起人 kele
  • 开始时间 开始时间
K

kele

Unregistered / Unconfirmed
GUEST, unregistred user!
哪位大虾可告诉: 在运行状态时 能任意拖动控件(如 TEDIT),改变大小,任意激活
某个控件等、就象编辑状态一样!!!!!!
拜托了!!!!!

 
响应MoveDown,MouseMove,MoveUp事件?
 
参看《Dephi高级开发指南》第8章,8.4节。
Marco Cantu等著,电子工业出版社出版。
 

有的控件直接可以这样做。

 
1.任意拖动控件
procedure TForm1.Label1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
ReleaseCapture;
Panel1.Perform(WM_SYSCOMMAND,$F012,0);
end;

2.改变大小
procedure SetBounds(ALeft, ATop, AWidth, AHeight: Integer);

3.其实最好还是用以前yysun介绍过的控件。
来自:yysun 时间:2000-3-22 10:58:32 ID:203768
Delphi 1 的时代就搞定这个问题了,用这个控件 (TStretchHandle) 试试:
ftp://ftp.cdrom.com/pub/delphi_www/ftp/d10free/handles.zip
不仅能移动,还能改变大小呢。





 
呵呵,帮你做了个TPanel的:)
鼠标右键控制,左键确定。
procedure TForm1.Panel1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
if Panel1.Cursor = crDefault then
Panel1.Perform(WM_SYSCOMMAND,$F012,0)
else
Panel1.Perform(WM_SYSCOMMAND,$F000+Panel1.Tag,0);
end;

procedure TForm1.Panel1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
if (X<8) then
begin
if (Y<8) then
begin
Panel1.Cursor := crSizeNWSE;
Panel1.Tag := 4;
end
else if(Y>Panel1.Height-9) then
begin
Panel1.Cursor := crSizeNESW;
Panel1.Tag := 7;
end
else
begin
Panel1.Cursor := crSizeWE;
Panel1.Tag := 1;
end
end
else if (X>Panel1.Width-9) then
begin
if (Y<8) then
begin
Panel1.Cursor := crSizeNESW;
Panel1.Tag := 5;
end
else if(Y>Panel1.Height-9) then
begin
Panel1.Cursor := crSizeNWSE;
Panel1.Tag := 8;
end
else
begin
Panel1.Cursor := crSizeWE;
Panel1.Tag := 2;
end
end
else
begin
if (Y<8) then
begin
Panel1.Cursor := crSizeNS;
Panel1.Tag := 3;
end
else if(Y>Panel1.Height-9) then
begin
Panel1.Cursor := crSizeNS;
Panel1.Tag := 6;
end
else
begin
Panel1.Cursor := crDefault;
Panel1.Tag := 0;
end
end;
end;
 
如果想用左键控制的话,在MouseDown事件的if语句
前加入ReleaseCapture;
 
如果能使动态建立的具有增加宽度或者高度的功能那就更酷了----就是
不知道怎么实现?不知道那位高手知道?在下先谢了!!!
 
ArJianzeng: 看书,书上都有,还是我说的那一本书,那一个章节。
 
那好办,给你改一下:)
dEdit: TEdit;
procedure TForm1.WinControlMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
ReleaseCapture;
with Sender as TWinControl do
begin
if Cursor = crDefault then
Perform(WM_SYSCOMMAND,SC_MOVE+1,0)
else
Perform(WM_SYSCOMMAND,SC_SIZE+Tag,0);
end;
end;
procedure TForm1.WinControlMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
with Sender as TWinControl do
begin
if (X<8) then
begin
if (Y<8) then
begin
Cursor := crSizeNWSE;
Tag := 4;
end
else if(Y>Height-9) then
begin
Cursor := crSizeNESW;
Tag := 7;
end
else
begin
Cursor := crSizeWE;
Tag := 1;
end
end
else if (X>Width-9) then
begin
if (Y<8) then
begin
Cursor := crSizeNESW;
Tag := 5;
end
else if(Y>Height-9) then
begin
Cursor := crSizeNWSE;
Tag := 8;
end
else
begin
Cursor := crSizeWE;
Tag := 2;
end
end
else
begin
if (Y<8) then
begin
Cursor := crSizeNS;
Tag := 3;
end
else if(Y>Height-9) then
begin
Cursor := crSizeNS;
Tag := 6;
end
else
begin
Cursor := crDefault;
Tag := 0;
end
end;
end;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
dEdit := TEdit.Create(Self);
dEdit.Parent := Self;
dEdit.Left := 64;
dEdit.Top := 64;
dEdit.Width := 128;
dEdit.Height := 32;
dEdit.OnMouseDown := WinControlMouseDown;
dEdit.OnMouseMove := WinControlMouseMove;
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
dEdit.Free;
dEdit := nil;
end;
 
多人接受答案了。
 
后退
顶部