gpt4 book ai didi

delphi - 如何一次将 "Sender"参数与 "As"运算符一起用于多个类?

转载 作者:行者123 更新时间:2023-12-03 15:15:03 26 4
gpt4 key购买 nike

在Delphi中,有时我们需要这样做......

function TForm1.EDIT_Click(Sender: TObject);
begin
(Sender As TEdit).Text := '';
end;

...但有时我们需要使用其他对象类重复该功能,例如...

function TForm1.COMBOBOX_Click(Sender: TObject);
begin
(Sender As TComboBox).Text := '';
end;

...因为运算符 As 不接受灵 active 。它必须知道类才能允许 () 之后的 .Text

有时,代码会充满类似的函数过程,因为我们需要使用无法指定的类似可视控件执行相同的操作。

这只是一个使用示例。通常,我在更复杂的代码上使用这些代码,以在许多控件和其他类型的对象上实现标准目标。

是否有替代方案或技巧可以使这些任务更加灵活?

最佳答案

使用 RTTI 对不相关类的类似名称的属性执行常见任务,例如:

Uses
..., TypInfo;

// Assigned to both TEdit and TComboBox
function TForm1.ControlClick(Sender: TObject);
var
PropInfo: PPropInfo;
begin
PropInfo := GetPropInfo(Sender, 'Text', []);
if Assigned(PropInfo) then
SetStrProp(Sender, PropInfo, '');
end;

在某些情况下,某些控件使用 Text,有些控件使用 Caption,例如;

function TForm1.ControlClick(Sender: TObject);
var
PropInfo: PPropInfo;
begin
PropInfo := GetPropInfo(Sender, 'Text', []);
if not Assigned(PropInfo) then
PropInfo := GetPropInfo(Sender, 'Caption', []);
if Assigned(PropInfo) then
SetStrProp(Sender, PropInfo, '');
end;

关于delphi - 如何一次将 "Sender"参数与 "As"运算符一起用于多个类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11335829/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com