delphi窗体动态设计 在系统运行时动态更改控件属性

来源:互联网 发布:斗鱼妃凌雪淘宝店多少 编辑:程序博客网 时间:2024/05/22 04:47

======================================================
注:本文源代码点此下载
======================================================

delphi窗体动态设计 在系统运行时动态更改控件属性

http://hi.baidu.com/xtfnpgy/blog/item/e3eab3e7c95f2239b93820c9.html

在应用程序的开发中,常常要将某些控件对象(如标签)用鼠标选中后进行拖动操作,用以改变控件的位置,在delphi中如何实现这一功能呢?笔者想了一个

方法:通过在 public 中定义全局变量用以跟踪 鼠标在移动和拖动控件时的坐标,然后在拖动结束时将鼠标的坐标值赋给控件的

top和left属性,以达到拖动的目的。

举例如下:创建一个 panel,再创建一个label,通过编程使控件 lable 可以在 panel 中被拖放到任意位置。以下是具体实现过程:

1. 首先做一下准备工作,运行delphi3.0,进入集成开发环境,在 file 菜单中选择new application 。

2. 在form1中创建对象 panel1,并在 panel1 中创建另一对象 label1。

3. 选中label1,修改其下列属性的值:

属性值:

caption:标签移动测试!

cursor:crhandpoint

dragcursor:crdrag

dragmode:dmautomatic

4.在程序的开头部分声明全局变量 x_panel,y_panel,x_label,y_label,其中,x_panel,y_panel :鼠标在panel1上的坐标;x_label,y_label :鼠标在label1上的坐标。

注:这里分别获取在panel1和label1上的坐标是为了更精确地计算出label1实际的移动距离。

5.在panel1的ondragover 和onmousemove 事件中添加如下代码:

x_panel:=x;

y_panel:=y;

注:该操作是获得 mouse 在panel1上的坐标。

6.在label1的onmousemove 事件中添加如下代码:

x_labell:=x;

y_label1:=y;

注:该操作是获得 mouse 在label1上的坐标。

7.在label1的onenddrag 事件中添加如下代码:

label1.left :=x_panel-x_label;

label1.top :=y_panel-y_label;

说明:两者相减是为了求得 label1 实际的移动距离。

8.创建一个对象 button1 ,并在其 onclick 事件中添加如下代码:

close; //用以关闭应用程序。

好了,现在运行程序,测试一下结果。

以下是程序源代码,在delphi3.0、windows95/98中测试通过。

unit test_move;

interface

uses

windows, messages, sysutils, classes, graphics, controls, forms, dialogs,

stdctrls, extctrls;

type

tform1 = class(tform)

panel1: tpanel;

label1: tlabel;

button1: tbutton;

procedure button1click(sender: tobject);

procedure panel1mousemove(sender: tobject; shift: tshiftstate; x,y: integer);

procedure panel1dragover(sender, source: tobject; x, y: integer;

state: tdragstate; var accept: boolean);

procedure label1mousemove(sender: tobject; shift: tshiftstate; x,y: integer);

procedure label1enddrag(sender, target: tobject; x, y: integer);

private

{ private declarations }

public

{ public declarations }

x_panel,y_panel,x_label,y_label:integer;

end;

var

form1: tform1;

implementation

{$r *.dfm}

procedure tform1.button1click(sender: tobject);

begin

close;

end;

procedure ftorm1.panel1mousemove(sender: tobject; shift: tshiftstate;x,y: integer);

begin

x_panel:=x;

y_panel:=y;

end;

procedure tform1.panel1dragover(sender, source: tobject; x, y: integer;

state: tdragstate; var accept: boolean);

begin

x_panel:=x;

y_panel:=y;

end;

procedure tform1.label1mousemove(sender: tobject; shift: tshiftstate;x,y: integer);

begin

x_label:=x;

y_label:=y;

end;

procedure tform1.label1enddrag(sender, target: tobject; x, y: integer);

begin

label1.left :=x_panel-x_label;

label1.top:=y_panel-y_label;

end;

end.

绿色通道:好文要顶关注我收藏该文与我联系

posted on 2011-05-05 16:44chulia 阅读(126) 评论(0)编辑 收藏


======================================================
在最后,我邀请大家参加新浪APP,就是新浪免费送大家的一个空间,支持PHP+MySql,免费二级域名,免费域名绑定 这个是我邀请的地址,您通过这个链接注册即为我的好友,并获赠云豆500个,价值5元哦!短网址是http://t.cn/SXOiLh我创建的小站每天访客已经达到2000+了,每天挂广告赚50+元哦,呵呵,饭钱不愁了,\(^o^)/
原创粉丝点击