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


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

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:44 chulia 阅读(126) 评论(0)编辑 收藏


======================================================
在最后,我邀请大家参加新浪APP,就是新浪免费送大家的一个空间,支持PHP+MySql,免费二级域名,免费域名绑定 这个是我邀请的地址,您通过这个链接注册即为我的好友,并获赠云豆500个,价值5元哦!短网址是http://t.cn/SXOiLh我创建的小站每天访客已经达到2000+了,每天挂广告赚50+元哦,呵呵,饭钱不愁了,\(^o^)/
Delphi是一种使用可视化编程方式的集成开发环境(IDE),可用于创建Windows应用程序。在Delphi中,设计窗体是一种运行时特性,允许程序员在程序运行期间对窗体进行设计和修改。 运行时设计窗体Delphi中是通过使用窗体设计器来实现的。通过窗体设计器,我们可以在设计时创建窗体并添加控件,设置窗体属性,以及编写事件处理程序。而运行时设计窗体允许我们在程序运行期间对窗体进行更改和编辑。 在运行时设计窗体模式下,我们可以通过双击窗体来打开设计器,对窗体进行修改。我们可以添加、删除、移控件,设置控件属性和事件处理程序。这样,我们可以实时地修改窗体的外观和行为,使得程序能够更加灵活和交互性。 运行时设计窗体还使得我们能够动态地创建和销毁窗体。我们可以通过编写代码来创建窗体对象,设置窗体属性和事件,然后将窗体显示在屏幕上。这使得我们能够在程序运行过程中根据需要创建新的窗口或销毁已有的窗口。 总的来说,Delphi运行时设计窗体程序开发者提供了更大的灵活性和可扩展性。通过运行时设计窗体,我们能够以可视化的方式设计和修改窗体,使得程序的界面更加美观和易用。此外,运行时设计窗体还允许我们动态地创建和销毁窗体,实现更加灵活的程序结构。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值