Class Inno安装程序在事件处理程序中获取对象类型/类

Class Inno安装程序在事件处理程序中获取对象类型/类,class,object,inno-setup,pascalscript,tobject,Class,Object,Inno Setup,Pascalscript,Tobject,我有一个事件过程,用于检查两个对象/控件(TNewEdit和TNewComboBox)的OnKeyUp按键。两个对象都需要在启用TNewButton之前完成 但是,如果是TNewEdit或TNewComboBox,我无法找到一种方法来知道如何获取发送者的类型:TObject 有人可以帮忙吗?你不需要知道任何东西的类型/类别 这样的需求是一个糟糕设计的标志 如果每个类型/类的事件处理方式不同,请为每个类型/类创建单独的处理程序 如果部分处理是公共的,则从特定处理程序调用公共处理程序 var 编辑

我有一个事件过程,用于检查两个对象/控件(
TNewEdit
TNewComboBox
)的
OnKeyUp
按键。两个对象都需要在启用
TNewButton
之前完成

但是,如果是
TNewEdit
TNewComboBox
,我无法找到一种方法来知道如何获取发送者的类型:TObject


有人可以帮忙吗?

你不需要知道任何东西的类型/类别

这样的需求是一个糟糕设计的标志


如果每个类型/类的事件处理方式不同,请为每个类型/类创建单独的处理程序

如果部分处理是公共的,则从特定处理程序调用公共处理程序

var
编辑:TNewEdit;
组合框:TNewComboBox;
过程CommonKeyUp(发送方:ToObject;变量关键字:Word;Shift:TShiftState);
开始
日志(“通用处理”);
结束;
程序EditKeyUp(发送方:ToObject;变量关键字:Word;Shift:TShiftState);
开始
日志(“编辑键向上”);
CommonKeyUp(发送器、键、移位);
结束;
过程ComboBoxKeyUp(发送方:ToObject;变量关键字:Word;Shift:TShiftState);
开始
日志(“组合框键向上”);
CommonKeyUp(发送器、键、移位);
结束;
过程初始化Wizard();
开始
{ ... }
Edit.OnKeyUp:=@EditKeyUp;
Combobox.OnKeyUp:=@ComboBoxKeyUp;
结束;

虽然您实际上有两个控件,但可能需要区分引发事件的控件

这就是
Sender
参数的作用。下面的代码显示了如何使用它。但总的来说,这不是正确的方向

var
编辑:TNewEdit;
组合框:TNewComboBox;
过程控制键控向上(发送方:ToObject;变量键:Word;Shift:TShiftState);
开始
如果发件人=编辑,则
开始
日志(“编辑键向上”);
结束
其他的
如果发送方=组合框,则
开始
日志(“组合框键向上”);
结束
其他的
开始
日志(“其他键向上”);
结束;
结束;
过程初始化Wizard();
开始
{ ... }
Edit.OnKeyUp:=@ControlKeyUp;
Combobox.OnKeyUp:=@ControlKeyUp;
结束;

虽然我仍然不明白,你为什么需要这个

你每次都必须检查两个控件,那么为什么你需要知道,什么控件发生了变化

此外,要检测更改,请不要使用
OnKeyUp
,而要使用
OnChange
。这样您就可以捕获所有更改(按键、拖放、复制和粘贴等)

var
编辑:TNewEdit;
组合框:TNewComboBox;
按钮:TNewButton;
程序控制变更(发送方:TObject);
开始
按钮。已启用:=(Edit.Text“”)和(ComboBox.Text“”);
结束;
过程初始化Wizard();
开始
{ ... }
Edit.OnChange:=@ControlChange;
Combobox.OnChange:=@ControlChange;
结束;

您需要知道该类型的用途是什么?向我们展示一些代码!非常感谢,这真的很有帮助!