如何运行时移动label控件和保存移动控件后的窗体(在线)

No_1gogo 2002-07-10 02:10:43
为什么Edit控件能移动,label不能呢,都是同属于TControl类的啊。
还有,移动控件后,我想把各个控件的位置保存起来,本来是把各个控件的位置保存在文件里,请问还有没有更简单的方法啊?谢谢了
...全文
66 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
很土 2002-07-12
  • 打赏
  • 举报
回复
若还不行,只要做个判断即可。

if Sender is TLabel then
with TLabel(Sender) do
begin
Left := curPos.x;
Top := curPos.y;
end;
很土 2002-07-12
  • 打赏
  • 举报
回复
with TWinControl(Sender) do
改为:
with TControl(Sender) do

就行了,若还不行,只要:

with TControl(Sender) do
begin
Left := curPos.x;
Top := curPos.y;
end;

我用过,行的,不信就试试!
No_1gogo 2002-07-12
  • 打赏
  • 举报
回复
楼上的,label是属于Tcontrol-Tgraphiccontrol类的,不是Twincontrol类的,所以是不行的,不是随鼠标动的
dext 2002-07-12
  • 打赏
  • 举报
回复
至于保存,放在注册表里,或INI文件里都行!
TRegistry,TINIFile;
dext 2002-07-12
  • 打赏
  • 举报
回复
彻底解决:彻底解决:彻底解决:彻底解决:彻底解决:彻底解决:

In FormOnCreate,you add
Label1.DragMode:= dmAutomatic
In FormOnDragOver you add
Label1.Top:=y;
Label1.Left:=x;
dext 2002-07-12
  • 打赏
  • 举报
回复
彻底解决:彻底解决:彻底解决:彻底解决:彻底解决:彻底解决:

In FormOnCreate,you add
Label1.DragMode:= dmAutomatic
In FormOnDragOver you add
Label1.Top:=y;
Label1.Left:=x;
Kingron 2002-07-12
  • 打赏
  • 举报
回复
用TStaticText代替TLabel即可解决问题。
No_1gogo 2002-07-12
  • 打赏
  • 举报
回复
得改一下,还要判断鼠标按下的是左键:)不过,还是很感谢楼上的
procedure TForm1.Label1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
var
curPos: TPoint;
begin
GetCursorPos(curPos);
curPos := Self.ScreenToClient(curPos);
if (ssleft in shift) then
with TLabel(Sender) do
begin
Left := curPos.x;
Top := curPos.y;
end;
end;
很土 2002-07-11
  • 打赏
  • 举报
回复
在 OnMouseMove 事件过程中,程序如下:
var
curPos: TPoint;
begin
// 当前鼠标位置
GetCursorPos(curPos);
curPos := Self.ScreenToClient(curPos);

// 设置位置
with TWinControl(Sender) do
SetBounds(curPos.x, curPos.y, Width, Height);
end;

试试?
很土 2002-07-11
  • 打赏
  • 举报
回复
在 OnMouseMove 事件中,程序如下:
var
curPos: TPoint;
begin
// 得到当前鼠标的位置
GetCursorPos(curPos);
curPos := Self.ScreenToClient(curPos);

// 设置新的位置
with TWinControl(Sender) do
SetBounds(curPos.x, curPos.y, Width, Height);
end;

不妨试试,效果肯定很好。
xiaoxingchi 2002-07-11
  • 打赏
  • 举报
回复
Tinifiles类是用来操作ini文件的!
给你一例子!(保存颜色的)


var
inif:Tinifile;
begin
inif:=Tinifile.Create('E:\Colors.ini');
inif.WriteInteger('Option','FontColor',label1.font.color);
end;


var
inif:Tinifile;
begin
inif:=Tinifile.Create('E:\Colors.ini');
label1.font.color:=inif.ReadInteger('Option','FontColor',clBlack);//clblack一定要加,不
end; //然颜色会改变
No_1gogo 2002-07-11
  • 打赏
  • 举报
回复
不好意思,是我没有说清楚。运行时移动是指,运行时鼠标可以拖着label控件在窗体上到处走。
我现在用的是这样:
procedure TForm1.Label1MouseDown
begin
dx:=x;
dy:=y;
end;

procedure TForm1.Label1MouseMove
begin
if (ssleft in shift) then
begin
label1.Top:=Label1.Top+y-dy;
label1.Left:=label1.Left+x-dx;
end;
end;

而我想用的是:
procedure TForm1.Label1MouseMove
const SC_DRAGMOVE = $F012;
begin
ReleaseCapture;
(Sender as TControl).Perform(WM_SYSCOMMAND, SC_DRAGMOVE, 0);
end;
这条语句可以移动除label外的大多数控件,就是不能移动label,令我郁闷:(
winglion 2002-07-10
  • 打赏
  • 举报
回复
label1.Left:=20;
label1.Top:=30;
指的就是通过修改属性达到移动的目的阿!
不保存到文件就保存到注册表罗,但我认为更繁!
zhxfzhxf1 2002-07-10
  • 打赏
  • 举报
回复
"我说的是程序运行时让label移动啊",程序运行时移动是什么意思?
TINIFile是专门用来读写 *.ini文件的类,对INI文件操作进行了封装。
便于使用。具体方法查阅帮助吧。
Drate(小虫) 的意思是在退出时,对控件位置进行保存;下次运行时,读取位置,根据位置值进行设置。
dreamfan 2002-07-10
  • 打赏
  • 举报
回复
楼上说的有道理
dreamfan 2002-07-10
  • 打赏
  • 举报
回复
楼上说的有道理
No_1gogo 2002-07-10
  • 打赏
  • 举报
回复
楼上的,我说的是程序运行时让label移动啊!!
~~~~
TINIFile是什么类,能给仔细点吗?
Drate 2002-07-10
  • 打赏
  • 举报
回复
LABEL控件可以移动呀:
label1.Left:=20;
label1.Top:=30;
如果要保存这个控件的位置的话,建议你使用TINIFile类来完成这项工作。
netlib 2002-07-10
  • 打赏
  • 举报
回复
没有更简单的方法了,你还是好好的作吧,呵呵。

5,386

社区成员

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

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