gpt4 book ai didi

delphi - Delphi 中的动态赋值

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

我正在创建一个类似于对象检查器的控件,因此我想将对属性的任何更改分配给相关对象。

var

v:TValue ;
ctx : TRttiContext;
begin

// k.IsOrdinal := true ;
v := v.FromVariant(2) ;


ctx.GetType(tButton).GetProperty('Style').SetValue(Button1, v.AsOrdinal);

end;

上面是我的代码,但我收到无效类型转换错误。

是否可以处理任何变量和枚举。(不需要对象和记录,因为它非常复杂)

最佳答案

对 SetValue 的调用需要如下所示:

SetValue(Button1, TValue.From(TButton.TButtonStyle(2)))

在您的代码中,使用 AsOrdinal是不正确的。这是一个返回 TRttiOrdinalType 的函数。 。但是TRttiOrdinalTypedescribed thus :

TRttiOrdinalType is the class used to describe all the Delphi ordinal value types, such as Integer, Byte, Word, and so on.

但是您需要提供TValue代表 TButtonStyle ,这就是上面的代码实现的效果。

<小时/>

顺便说一句,我最初尝试使用通用 TValue.From<T>() 功能如下:

SetValue(Button1, TValue.From<TButton.TButtonStyle>(TButton.TButtonStyle(2)));

但这只会导致以下内部编译器错误:

[DCC Fatal Error] Unit58.pas(38): F2084 Internal Error: URW1147

QC#103129

每次我尝试使用泛型时,我都会被这些内部错误击败!

感谢 Serg 指出调用 parameterised method 的替代形式使用类型推断不会发生内部错误。

关于delphi - Delphi 中的动态赋值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9128626/

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