Delphi中from.tag和edit.tag这两个属性指的是啥呀,具体有啥用?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Delphi中from.tag和edit.tag这两个属性指的是啥呀,具体有啥用?相关的知识,希望对你有一定的参考价值。

这个属性用来保存你所需要的一些数据什么的都可以,也可以保存字符串什么的,也就是此窗体或控件的一些用得着的数据。比如你在一个控件数组中(图片框控件数组),要达到将点击过的控件不再能进行点击操作,就可以在此INDEX的控件的TAG属性中添加上数据(PICTURE1(INDEX).tag=1),下次在点击时只要检测是否此控件的TAG属性为“1”就行了。就算是省掉了一个变量,而且记什么数据都可以,而且也省去了控件与变量之间的联接的操作。再比如也能记录一下你对此控件所进行的上一次操作什么的,比如你按过什么键,你可以将你此次按过的键值记录在TAG中,当下次再进行按键时检测上次是何操作,这个属性用好了也满好的。
由于各个控件的tag初始值都是0,所以举个简单的例子,
例如用button2按键判断button1按键是否按下过:
procedure TForm1.Button1Click(Sender: TObject);
begin
button1.tag:=1;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
if button1.tag=0 then
showmessage('button1没有按下过')
else
showmessage('button1按下过');
end;
参考技术A 这两个属性可以用来存放一些用户数据。

我经常用他来存放一个指针或是整型变量。

Delphi中的EProgrammerNotFound异常?

【中文标题】Delphi中的EProgrammerNotFound异常?【英文标题】:EProgrammerNotFound exception in Delphi? 【发布时间】:2011-01-06 05:57:00 【问题描述】:

在 Delphi 2009 中,SysUtils.pas 在第 425 行包含此内容:

EProgrammerNotFound = class(Exception);
这仅仅是easter egg 还是什么严重的问题? 何时应引发此异常? 它是否也存在于 Delphi Prism 和/或 Free Pascal 中?

问:这个异常类是否仍然在 Delphi(目前是 XE7)中声明? A:是的,甚至是documented!

指示软件故障的非标准方式。

您可以使用 EProgrammerNotFound 作为替代来指示软件 运行时检测到的故障。

【问题讨论】:

这个异常最近在一个answer关于Androids UserManager.isUserAGoat()函数中被提及 System.SysUtils.EProgrammerNotFound XE7 我认为这种设计模式应该有一个正式的名称。我在这里也看到了:YourCodeSucksException 【参考方案1】:

起源是有争议的,但它已经为人所知了一段时间...... Marco Cantu 在“德尔福有趣的一面”会议上开玩笑说。 IMO,应该更频繁地使用它;-)

继续阅读:http://wings-of-wind.com/2010/01/12/best-programming-feature-ever/http://blog.barrkel.com/2008/11/reference-counted-pointers-revisited.html

PS:我不认为它存在于 Delphi Prism、FreePascal 或 C# 中(但它应该存在)。 <G>

【讨论】:

【参考方案2】:

对于程序员,引用的不是坐在 Delphi 后面的程序员。我认为这是因为他们在 D2009 及更高版本中计划(从未使用它不知道它是否有效)每个对象都是可等待的。

【讨论】:

其实是可以用的。您可以将任何对象传递给TMonitor.EnterTMonitor.Exit。而且我不确定它是否是复活节彩蛋...... 等待的对象与程序员或是否被发现有什么关系?什么程序员被引用?【参考方案3】:

它与要求程序员必须链接到exe文件的“fix-inline”技术结合使用;-)

【讨论】:

【参考方案4】:

我是程序员,难道我是个例外吗?

Marco Cantù 还在他的书“Delphi 2009 手册”-第 242 页中描述了这一点。他说在 VCL 源代码中从来没有开玩笑。

【讨论】:

【参考方案5】:

它在 Delphi 2009 中引入,在 Delphi 2010 中仍然存在,recently 在internet 上获得了一些more 的关注。

我认为这是一个复活节彩蛋,类似于“EBCAK”(椅子和键盘之间的错误)和skipping of Delphi version number 13。

EProgrammerNotFound

在 SysUtils 单元的 Win32 分支中声明,但未在 RTL 或 VCL 中的任何地方使用 在 Delphi Prism 中不存在 在 Delphi 2009 中引入,因此在 VCL.NET 中不存在 目前(版本 3.5)在 .NET 框架中没有类似的东西(不知道为什么,这些家伙 do have humour)

我不认为 EProgrammerNotFound 实际上是要使用的,但是既然它在那里,人们会开玩笑地使用它(类似于在其他人中放置一个流浪的“const False = True; True = not False;”源代码)。

--杰罗恩

【讨论】:

嗯,程序员不仅是一个人,也是一个设备(用于编程,例如嵌入式设备的闪存)。我在这里闻到 iPhone 的味道吗?不,那么它将在 IDE 源代码中,而不是 sysutils。 EBCAK?我总是听到它表示为PEBKAC。 (键盘和椅子之间存在问题)。【参考方案6】:

这只是漫长的一天的结果,我们有点头晕目眩。很多很多年(自从我加入团队以来),我们总是开玩笑说用类似的消息替换编译器中的一些错误消息,以替换最常见的错误之一。在内部,我们总是对不同的事情和人(主要是团队本身)开玩笑和取笑。如果你没有幽默感,你就注定要早早死去。

这是一次简单的对话;

“哦,你应该在那个函数中引发 EProgrammerNotFound 异常。” “哈哈!我们应该添加那个例外,看看谁注意到了。” “我想知道为什么会有多少猜测?”

所以,我想我只能说,“你们都玩到我们手里了 ;-)... Buwahahaha!pwned!”

【讨论】:

这不是 Tron 中最常见的异常吗? 有这样的例外是很合理的。我一直将此异常视为 ENotImplementedException @stanleyxu2005,为此您可以使用ENotImplemented 异常。 我有一个自定义的EProgrammerException。当代码洞察力向我显示EProgrammerNotFound 时,我正在输入代码以完成EProgr...。遗憾的是我不能使用EProgrammerNotFound,因为我的EProgrammerExceptionEInvisibleException 的后裔;因为它意味着断言失败和EAbort 异常之间的交叉(我发现一个程序员搞砸了,我要在这里停下来)。【参考方案7】:

它是编译器“语法错误:程序员预期”的运行时模拟。 ;>

【讨论】:

您应该已经看到编译器字符串本地化为 Jive 的构建!【参考方案8】:

这是一种自我描述的笑话,你可以试试这段代码

raise EProgrammerNotFound.Create('Jack is away');

raise ENotImplemented.Create('May be in future this will work');

以上在 Delphi 10 Seattle 有效。

【讨论】:

以上是关于Delphi中from.tag和edit.tag这两个属性指的是啥呀,具体有啥用?的主要内容,如果未能解决你的问题,请参考以下文章

delphi中枚举类型和子界,数组,集合的详解以及类型说明

delphi中最小化其他程序及所有程序最小化(使用 shell.minimizeAll 和自己寻找窗口这两种办法)

DELPHI中枚举类型数据的介绍和使用方法

如何安装Delphi5

Delphi7中快速得到本机IP地址

Delphi中赋值(:=)与分配(Assign)有啥区别?