怎末可以拖动,在线等待!!

woxiao123 2003-09-17 07:37:58
我想把一个组件放到form中,客户何以随意在form中拖放这个组件,还可以改变其大小形状。请问用哪个(些)组件的那个属性,怎末实现??谢谢!
...全文
61 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhuxiankun1980 2003-10-18
  • 打赏
  • 举报
回复
呵呵,,好东西..
FrameSniper 2003-09-18
  • 打赏
  • 举报
回复
揭贴吧!
woxiao123 2003-09-18
  • 打赏
  • 举报
回复
我试了,不错谢谢老王,呵呵!
woxiao123 2003-09-18
  • 打赏
  • 举报
回复
听说resize这个控件不错,哪里有下的,是免费的吗?
wdsimon 2003-09-17
  • 打赏
  • 举报
回复
其实所有的诀窍在perform()
pressman 2003-09-17
  • 打赏
  • 举报
回复
老王帖出来的代码很不错哦
呵呵,谢过了
收藏。
wdsimon 2003-09-17
  • 打赏
  • 举报
回复
呵呵,还要更简单的办法?这就是根据VCL里设计期间控件拖放缩小的原理来做的。
wdsimon 2003-09-17
  • 打赏
  • 举报
回复
上面完全可达到你的要求。
woxiao123 2003-09-17
  • 打赏
  • 举报
回复
有没有简单的方法,我还要可以改变其形状大小。就像在程序设计阶段对组件外观所作的操作那样。
wdsimon 2003-09-17
  • 打赏
  • 举报
回复
别人的经验:
适用于TWinControl派生类的对象:
procedure TForm1.ManipulateControl(WinControl: TWinControl; Shift: TShiftState;
X, Y, Precision: integer);
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 (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 (X<WinControl.Width-Precision) and (Y>=WinControl.Height-Precision)
then begin
SC_MANIPULATE := $F006;
WinControl.Cursor := crSizeNS;
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.Button1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
button1.Caption := IntToStr(X) + '/' + IntToStr(Y);
ManipulateControl((Sender as twincontrol), Shift, X, Y, 10);
end;
woxiao123 2003-09-17
  • 打赏
  • 举报
回复
up

5,392

社区成员

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

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