怎么用鼠标拖拽方式移动、改变大小已有的控件,比如Panel

roc_fu 2003-12-02 11:44:02
在Form中的已有控件,怎么用鼠标拖动,改变其位置,当鼠标移动到panel边缘的时候,怎么拖动改变其大小?俺是UI白痴!
...全文
323 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
47522341 2003-12-02
  • 打赏
  • 举报
回复

给分吧
procedure TForm1.Button1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
ReleaseCapture;
Button1.Perform(wm_syscommand,$F012,0);
end;

frogshero 2003-12-02
  • 打赏
  • 举报
回复
俺也是
roc_fu 2003-12-02
  • 打赏
  • 举报
回复
zzh54zzh(我也要补钙!) 的答案最好,嘿嘿,今天真顺利,一下就找到答案了
zzh54zzh 2003-12-02
  • 打赏
  • 举报
回复
procedure ManipulateControl(WinControl: TControl; Shift: TShiftState;
X, Y, Precision: integer);
//Precision:精度,该方法可以在onmousemove中调用
var
SC_MANIPULATE: Word;
begin
//光标在控件的最左侧
if (X<=Precision) and (Y>Precision) and (Y<WinControl.Height-Precision) then
begin
SC_MANIPULATE := $F001;
WinControl.Cursor := crSizeWE;

end
else
//光标在控件的最右侧
if (X>=WinControl.Width-Precision) and (Y>Precision) and (Y<WinControl.Height-Precision) then
begin
SC_MANIPULATE := $F002;
WinControl.Cursor := crSizeWE;
end
else
//光标在控件的最上侧
if (X>Precision) and (X<WinControl.Width-Precision) and (Y<=Precision) then
begin
SC_MANIPULATE := $F003;
WinControl.Cursor := crSizeNS;
end
else
//光标在控件的最下侧
if (X>Precision) and (X<WinControl.Width-Precision) and (Y>=WinControl.Height-Precision) then
begin
SC_MANIPULATE := $F006;
WinControl.Cursor := crSizeNS;
end
else
//光标在控件的左上角
if (X<=Precision) and (Y<=Precision) then
begin
SC_MANIPULATE := $F004;
WinControl.Cursor := crSizeNWSE;
end
else
//光标在控件的右上角
if (X>=WinControl.Width-Precision) and (Y<=Precision) then
begin
SC_MANIPULATE := $F005;
WinControl.Cursor := crSizeNESW ;
end
else
//光标在控件的左下角
if (X<=Precision) and (Y>=WinControl.Height-Precision) then
begin
SC_MANIPULATE := $F007;
WinControl.Cursor := crSizeNESW;
end
else
//光标在控件的右下角
if (X>=WinControl.Width-Precision) and (Y>=WinControl.Height-Precision) then
begin
SC_MANIPULATE := $F008;
WinControl.Cursor := crSizeNWSE;
end
else
//光标在控件的客户区(移动整个控件)
if (X>5) and (Y>5) and (X<WinControl.Width-5) and
(Y<WinControl.Height-5) then
begin
SC_MANIPULATE := $F009;
WinControl.Cursor := crSizeAll;
end
else
begin
SC_MANIPULATE := $F000;
WinControl.Cursor := crDefault;
end;
if Shift=[ssLeft] then
begin
ReleaseCapture;
WinControl.Perform(WM_SYSCOMMAND, SC_MANIPULATE, 0);
end;
end;

//调用方法:
procedure TForm1.Panel1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
Caption := IntToStr(X) + '/' + IntToStr(Y);
ManipulateControl((Panel1 as TwinControl), Shift, X, Y, 10);
end;

注意: 只有从TWinControl继承的控件,才能用此方法。
constantine 2003-12-02
  • 打赏
  • 举报
回复
不知道。
roc_fu 2003-12-02
  • 打赏
  • 举报
回复
不是吧,用什么关键字可以搜到以前的贴?
flyforlove 2003-12-02
  • 打赏
  • 举报
回复
47522341(睡到8:30)

呵呵,同样的一个回帖,不知道“骗”了多少分了。
roc_fu 2003-12-02
  • 打赏
  • 举报
回复
果然是高人,还有一个问题,怎么通过鼠标改变控件大小咧?

5,388

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧