`
美丽的小岛
  • 浏览: 297513 次
  • 性别: Icon_minigender_1
  • 来自: 大连
社区版块
存档分类
最新评论

Owner、Parent、Self、Sender

 
阅读更多

OwnerParent的区别
Parent
属性是指构件的包容器,构件只能在此范围内显示和移动。举例子如下: 
  (1)Form1的窗体上,放一个Panel1,并将Panel1拉大, 
  (2)Panel1上放一Button1 
  (3)Form1上放一Button2 
  现在如果移动Panel1,Button1随着Panel1移动,这是因为Button1ParentPanel1。现在将Button2移到Panel1上,再次移动Panel1,Button2并不跟着移动,这是因为Button2ParentForm1。除在窗体设计中,应注意构件的Parent是谁外,在动态创建构件时,也应指出构件的Parent,如在上例中继续操作: 
  Procedure Tform1.Button2click(Sender:Tobjet); 
  Var 
   Button:Tbutton; 
   Begin 
       Button:Tbutton.cerate(self); 
      Button.parent=panel1; 
       Button.lleft=0; 
      Button.top=0; 
       Button.caption:='OK'; 
   End 
  当按Button2时,将在Panel1上创建一个Button,而如果把第6句改为Button.parent:=self;按Button2时,将在Form1上创建一个Button了。如果将第6句删除,按Button2时,什么都不会发生,这是因为创建方法无法知道应在哪里显示构件。 
  Owner属性是指构件的所有者,它负责构件的创建和释放。如在上例中,系统默认窗体上所有构件的所有者是窗体,而窗体的所有者是Application。顺便指出,create方法应带有表示构件所有者的参数,如在上例中,构件所有者是窗体,即self 
  Parent属性和Owner属性是运行阶段的属性,只能在运行阶段,通过代码设置。


Self
Sender的区别
  在事件处理程序参数表中,至少含有一个参数Sender,它代表触发事件处理程序的构件,如在上例中,Sender就指Button2,有了Sender参数,可以使多个构件共用相同的事件处理程序,如下例: 
  Procedure Tform1.Buttonclick(Sender:Tobject); 
  Begin 
  If sender=button1 then 
   Label1.caption:='看庭前花开花落 '
  Else Label2.caption:='望天上云卷云舒' 
  End 
  在此例中,Button1,Button2共用了Buttonclick事件处理程序。 
  Self是指所编的程序范围是在哪一个类中,Delphi中大都在窗体范围内编程,因此,self即指窗体,如果在编写一个类或是一个组件,则self指该类或组件。我们在函数或过程的声明中可看出self是代表哪个组件,即self代表‘.’号之前的组件,如在第一个例子中,self代表Tform1。另外应注意,self只能用在类方法中,而不能用在过程或函数中,如下例用法是错的: 
Function a1(B:Integer):Integer;
 
  Begin 
  …… 
  Button:=tbutton.create(self);…… 
  End;  

-----------------------------------------------------
Sender,Self,Owner
parent 
-----------------------------------------------------
Sender--
意义:指本对象。Sender在什么对象相关代码里,那么Sender就是什么。
Self--
意义:指本类,也就是Self被引用的类。比如若在类TMyClass内引用了Self,那么Self=TMyClass.
Owner--
意义:哪个对象释放我的内存啊?

如:Pan:=TPanel.Create(Self);其中Create的参数是:AOwner:TComponentOwner释放Pan的内存。因为窗口释放Pan的内存,但窗口类的对象是Self.一般给OwnerSelf就可以。
比如:
代码段一:
pan:=TPanel.Create(Self);
with Pan do begin
try
Left:=20;
Top:=20;
parent:=Self;
 //Parent:=Form1也可以。
Visible:=true;
ShowMessage('Created');
finally
Pan.free;
end;
end;
-----------------------------------------------------
Parent--
意义:此对象包括在哪个对象里那?
说明:若组件不是从TControl继承来的,那么在创建组件后不必声明此属性。

parent owner的含义区别及举例


=================================================================
{
单元文件名称: Unit1
开发人员名称: tulater
编写日期: 25-八月-2005
单元功能:
parent
即 养父
是指拥有该组件的父类,即parent组件必定是一个窗口控制组件(Windowed control 由于组件就是容纳该组件的父类,因此当父类移动时,附着其内的组件也会移动.
Object TreeVIew
里表示的就是这种关系.
修改历史:
-----------------------------------------------------------------------------}
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;

type
TForm1 = class(TForm)
GroupBox1: TGroupBox;
Button1: TButton;
Button2: TButton;
Button3: TButton;
Button4: TButton;
Button5: TButton;
procedure Button5Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure Button4Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

uses Unit2;

VAR
PB: boolean;
{$R *.dfm}

procedure TForm1.Button5Click(Sender: TObject);
begin
Form2.show
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
GroupBox1.Top := GroupBox1.Top - 10;
end;

procedure TForm1.Button4Click(Sender: TObject);
begin
if PB then
BEGIN
Button2.Parent := Form2;
PB := false;
END
else
BEGIN
Button2.Parent := Form1.GroupBox1;
PB := true;
END;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
Pb := false;
end;

end.
=================================================================
{-----------------------------------------------------------------------------
单元文件名称: Unit1
开发人员名称: tulater
编写日期: 25-八月-2005
单元功能:
Owner
  生父 
何谓 Owner?就组件而言 Owner是指作为其他组件的Owner的父组件,在负责自身 析构时,一起析构它所拥有的其下所Own 的组件,也就是于此时释放它自己与它所拥有 组件所占的内存.
修改历史:
-----------------------------------------------------------------------------}
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;

type
TForm1 = class(TForm)
Edit1: TEdit;
Button1: TButton;
Button2: TButton;
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation
uses
unit2;
{$R *.dfm}

procedure TForm1.Button2Click(Sender: TObject);
begin
Form2.show
end;

end.
=================================================================

 

 

分享到:
评论

相关推荐

    WA Self Sender - Send Messages Free-crx插件

    语言:English 将Whatsapp消息发送给单个用户或总和发送给用户,而不保存号码 使用whatsapp网站上的免费whatsapp消息传递功能,免费发送whatsapp消息并在whatsapp上将用户连接起来。 注意:1.这是WhatsApp网站的非...

    浅析C# 中object sender与EventArgs e

    了解C#中的预定义事件处理机制 在写代码前我们先来熟悉.net框架... 注意这里的参数,前者是一个对象(其实这里传递的是对象的引用,如果是button1的click事件则sender就是button1),后面是包含事件数据的类的基类。

    UDP_Sender调试助手

    UDP sender,通过UDP协议发送信息的软件。

    mirrorop sender PC发射端

    mirrorop sender PC发射端

    Universal Gcode Sender v2.0

    Universal Gcode Sender使用Maven构建项目。它使用maven模块来分离核心库/经典GUI和UGS平台项目。在最高级别,UGS目标定义 ugs-core和ugs-platform-parent模块,可以分别或全部构建它们。 经典gui是ugs-core模块中...

    packetSender.源码

    数据包发送工具packetSender

    UDPSender发包器工具

    udpsender主要用于udp测试和压力测试,自定义EPS,支持syslog和snmp协议。 使用方便,快捷,自定义性强

    Mirrorop sender for android

    mirrorop sender安卓破解版是一款非常实用的闪电传输文件应用。使用mirrorop sender apk能够实现多屏互动,多平台之间的文件传输、分享,传输速度更快! 注:资源来源于网络。

    浅析C#中object-sender与EventArgs-e

    浅析C#中object_sender与EventArgs_e

    Sender-receiver 消息

    Sender-receiver 消息 ,还是老话,学习JMS和activemq必看资料一直

    Sender 的使用方法

    1.QQ:513187410 2.保证无毒 3.简单,方便,实用 4.实例可以自行改用 5.如有非法,本人无法律责任,由改动代码人负责! 6.需要更多本人作品,查找标签“朱建强” 7.请下载,杀毒后再使用!

    UDPSender.rar

    udpsender,udp发送工具,UDPSender UDP发包工具,支持自动及手动发送,可以进行压力测试等

    MirrorOp Windows Sender 电脑发送端无线投屏软件

    MirrorOp Windows Sender是MirrorOp家族的成员。MirrorOp Windows Sender通过包含用于显示网页的内置浏览器,用于共享非数字化内容(如印刷材料甚至3D实物)的内置浏览器,为演示者和教师增加了更多的灵活性。还介绍...

    PacketSender_tcpudp_x64_v7.0.6.rar

    PacketSender,TCPUDP,64BIT

    UDPSender UDP发包工具

    UDPSender UDP发包工具,支持自动及手动发送,可以进行压力测试等

    MirrorOp-Sender

    MirrorOp-Sender

    WP7 Update Cab Sender

    运行工具内WP7 Update Cab Sender.bat文件。

    发包器_udp_sender.rar

    udpsender 非常难得的资源,全网jf最低,良心上传

    postgresql walsender

    postgresql walsender

Global site tag (gtag.js) - Google Analytics