社区
Delphi
帖子详情
procedure of object; 有什么功能?(新手)
L3nnon
2010-08-26 05:23:19
TMyEvent = procedure of object; <---它。
它是不是和以下有链接?
FOnHundred: TMyEvent;
procedure SetOnHundred1;
procedure SetOnHundred2;
property OnHundred: TMyEvent read FOnHundred write FOnHundred;
...全文
385
10
打赏
收藏
procedure of object; 有什么功能?(新手)
TMyEvent = procedure of object; <---它。 它是不是和以下有链接? FOnHundred: TMyEvent; procedure SetOnHundred1; procedure SetOnHundred2; property OnHundred: TMyEvent read FOnHundred write FOnHundred;
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
10 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
L3nnon
2010-09-14
打赏
举报
回复
[Quote=引用 9 楼 goodhj 的回复:]
最简单的解释:根据英文意思你就知道了啊,procedure of object(一个对象的过程)。5楼和7楼的解释好好看看
[/Quote]
茅塞顿开。。 谢啦。。
goodhj
2010-09-14
打赏
举报
回复
最简单的解释:根据英文意思你就知道了啊,procedure of object(一个对象的过程)。5楼和7楼的解释好好看看
L3nnon
2010-09-14
打赏
举报
回复
唔唔。。
但还是很模糊。。
关于
type
TMyEvent = procedure of object;
>.<;; 希望有更简单的解释。。
谢谢。。
wxieyang
2010-09-01
打赏
举报
回复
type
TMyEvent = procedure of object;
这是一种数据类型的定义,他定义了一个可以在类中使用的函数类型
区别于
type
TMyProc = procedure;
TMyEvent 和 TMyProc 都定义了一个函数类型,他们的差别是,TMyProc 不可以用在类中定义事件,TMyEvent 却可以。
如果你想知道问什么,那就需要深入了解事件类型以及函数类型到底是个什么?
procedure a();
begin
ShowMessage()
end;
var
Func1: TMyProc;
Func2: TMyEvent;
func1 := A;
func1 := A;
这句到底发生了什么事情呢?
在32位的windows操作系统中,任何一个进程被执行,操作系统要完成的工作基本上包括:为这个进程开辟一个线性的虚拟地址表(从$00000000到$FFFFFFFF),然后把exe程序加载到这个地址表对应的内存中,然后跳入到exe程序的入口点,剩下的事情,就是exe自己从入口点开始一步一步干自己的事情了。
程序中,所有的函数都被编译到固定的位置,也就是每个函数都有一个地址与之对应,对函数的调用,实际上就是在寄存器或者堆栈中准备好参数,然后跳入到函数对应的地址继续执行。
func1 := A;
这个动作,完成的就是把函数A的地址赋值给func1这个变量。
那么,为Func2: TMyEvent 赋值又是完成了什么呢?
类中的函数也是有地址的,编译后,类中的函数也会被编译到一个固定的地址上。
但是,func2不是表示一个函数地址,他是一个记录类型的变量
这个可以通过 SizeOf(TMyEvent) 看到 SizeOf(TMyEvent) 返回值是8,而SizeOf(TMyProc)返回的是4
实际上,TMyEvent类型是包含两个域的一个记录,其中一个域是Code,也就是和TMyProc一样的,另一个域是Data,他保存着一个对象。
Button2.OnClick := Button1Click;
这样的赋值,实际上是将窗体类的对象form1给data域,将Button1Click这个函数的地址给Code域
SeaSon_Lang
2010-08-30
打赏
举报
回复
1.
TMyEvent = procedure of object; TMyEvent 是方法类型 就等于 String 是一种数据类型
如在一个Txxx类中定义了一个过程
procedure Txxx.test;
begin
showmessage('1');
end;
那么就可以把 Txxx.test 赋给 TMyEvent 了 (TMyEvent := Txxx.test);
因为 TMyEvent 的定义中有 of object 所以赋值给它的只能是类中的过程,而不能是普通过程。
2.
FOnHundred: TMyEvent; --> FOnHundred 是一个变量 它的类型是 TMyEvent,
就等于 icount : integer 这么简单
3.
property OnHundred: TMyEvent read FOnHundred write FOnHundred
OnHundred 是一个属性 它的类型也是 TMyEvent 通过 FOnHundred 变量来存取 这个属性的值。
当属性不用过程去存取的时候 (如上例)调用 OnHundred 和 FOnHundred 是相同的
L3nnon
2010-08-30
打赏
举报
回复
[Quote=引用 5 楼 season_lang 的回复:]
1.
TMyEvent = procedure of object; TMyEvent 是方法类型 就等于 String 是一种数据类型
如在一个Txxx类中定义了一个过程
procedure Txxx.test;
begin
showmessage('1');
end;
那么就可以把 Txxx.test 赋给 TMyEvent 了 (TMyEvent := Txxx……
[/Quote]
谢谢,你的详细的解释。。
万分感激。。
L3nnon
2010-08-29
打赏
举报
回复
经过我研究了三天三夜,已经明白了很多。。
谢谢大家的用心,万分感激大家的无私。
L3nnon
2010-08-26
打赏
举报
回复
我就觉得奇怪,为什么属性里有隐藏式Boolean 值。。
kye_jufei
2010-08-26
打赏
举报
回复
1.SetOnHundred1 和 SetOnHundred2估計是自定議的過程名,類型是TMyEvent;
2.OnHundred是一個處理函數的屬性;
3.FOnHundred是OnHundred對應的成員......
亮剑_
2010-08-26
打赏
举报
回复
当然有联系。
OnHundred 就是事件处理函数,实际是一个属性
FOnHundred 是该属性对应的成员
类型是 TMyEvent,实际是一个过程/函数,没有参数
SetOnHundred1 和 SetOnHundred2 过程从命名上看一般就是用作 FOnHundred 的写方法,但由于没有相应代码且并没有指明 OnHundred 属性的 read write 方法,不好判定
演示Delphi如何清空TImage组件中的图片.rar
本源码向大家演示Delphi如何清空TImage组件中的图片,如示例截图所示,TImage组件中已经装载了一张图片,单击“清空图片”按钮,将调用以下代码清空TImage组件中的图片数据:
procedure
TForm1.Button1Click(Sender: T
Object
); begin image1.picture.graphic := nil; end; 这是一个比较初级的Delphi图像组件用法示例,Delphi
新手
可参考学习。
object
(mysql_stmt)_MySQL优化汇总(一)
转自:http://cloudbbs.org/forum.php?mod=viewthread&tid=17236数据库的操作越来越成为整个应用的性能瓶颈了,这点对于Web应用尤其明显。关于数据库的性能,这并不只是DBA才需要担心的事,而这更是我们程序员需要去关注的事情。当我们去设计数据库表结构,对操作数据库时(尤其是查表时的SQL语句),我们都需要注意数据操作的性能。这里,我们不会讲过多...
Python使用gRPC入门到实战,把握就业先机
本门课程是带大家进入微服务领域入门的课程,很适合
新手
小白学习的课程。1: 什么是rpc?RPC(Remote
Procedure
Call)是函数对函数的远程调用,传输协议tcp,http,主要是基于xml,json序列化协议(这里的序列化协议是对数据编解码的方式),项目中我们真正用到的是grpc,grpc是一个框架,基于http2.0的长链接,性能有所改进,重要的是grpc用的是Google开源的protobuf序列化协议,它比json,xml性能更快,在压缩数据方面也更小。总之我们选择grpc最主要的有两点:1:支持跨语言开发(如python,golang,java)2: grpc首先是一个框架,封装rpc,让程序员只关注代码逻辑即可 2: 为什么用grpc,而不用flask,django,tornado,即http协议?1:http的调用是根据url的(即restful),它跟rpc的调用最大的区别就是这里,rpc的调用,你就像调用一个本地函数一样简单,而且微服务,分布式也是从rpc开始的,学好rpc对以后做好分布式会更有帮助,其实go语言和python语言里都有rpc(如xmlrpc,jsonrpc,zerorpc),我们之所以学习go语言里的rpc是因为go语言的rpc相对更加灵活,go语言本身也支持高并发,这一点对于分布式来说更好。2:其次http协议,用过flask框架的人都知道,请求一次数据后就断开,而grpc基于http2.0,它不但可以保持长链接,传输效率也更高,使用方面,因为http2.0相当于tcp一样使用,现在很多大厂也都开始用http2.0了。http2.0相比http的优势很明显,头部压缩,分流,针对tcp的多路复用。所以基于http2.0的grpc无论从生态和性能方面都更好。 这张图是一个gRPC相关的架构图,同学们可以通过这张图了解gRPC在项目中的使用。
KETTLE常见问题和优化
1.创建MySQL空资源库报错问题:因为boolean类型的问题,Mysql中的boolean类型实际上保存为TINYINT,需要手动的修改生成资源库的sql脚本,将其中的插入用户ENABLED的值由Y修改为1,在数据同步的时候也特别要注意TINYINT类型的字段,ETL在读取数据以后会将值显示为Y或者N,保存到另外一张表的TINYINT中就会报错。 2.乱码问题:数据库连接在选项中添...
新手
如何设置和优化关键词_大规模超参数优化的
新手
指南
新手
如何设置和优化关键词Despite the tremendous success of machine learning (ML), modern algorithms still depend on a variety of free non-trainable hyperparameters. Ultimately, our ability to select quality hyperp...
Delphi
5,515
社区成员
262,734
社区内容
发帖
与我相关
我的任务
Delphi
Delphi 开发及应用
复制链接
扫一扫
分享
社区描述
Delphi 开发及应用
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章