Lac*_*anG 10 delphi design-time rtti
我想使用RTTI在设计时而不是运行时检查项目源文件中包含的类型.
据我所知,这是不受支持的,但是这个问题的评论中的讨论表明它可能并且已经有几个Delphi版本.这是我第一次听说这个功能可用但是我一直无法为自己重现它.
这是我的测试示例.它使用一个简单的TListBox后代TMyListBox,它具有一个string属性TypeToExplore,该属性在设置时使用输入的限定类型名称的属性填充列表框.
unit MyListBox;
interface
uses
SysUtils, Classes, Controls, StdCtrls;
type
TMyListBox = class(TListBox)
private
FTypeToExplore : string;
procedure SetTypeToExplore(const inValue: string);
procedure FillWithTypeDetails;
published
property TypeToExplore : string read FTypeToExplore write SetTypeToExplore;
end;
procedure Register;
implementation
uses
RTTI, TypInfo;
procedure TMyListBox.SetTypeToExplore(const inValue: string);
begin
if inValue = FTypeToExplore then
Exit;
FTypeToExplore := inValue;
Clear;
FillWithTypeDetails;
end;
procedure TMyListBox.FillWithTypeDetails;
var
context : TRTTIContext;
theType : TRttiType;
properties : TArray<TRttiProperty>;
prop : TRttiProperty;
begin
theType := context.FindType(FTypeToExplore);
if Assigned(theType) then begin
properties := theType.GetProperties;
for prop in properties do
Items.Add(prop.Name);
end else
Items.Add('No type found');
end;
procedure Register;
begin
RegisterComponents('Samples', [TMyListBox]);
end;
end.
Run Code Online (Sandbox Code Playgroud)
使用这个TMyListBox组件我
Project1MyListBox1到TForm1Project1Project1应用程序(但不是项目)MyListBox1.TypeToExplore为Unit1.TForm1而MyListBox1报告"未发现型",这是我的RTTI是如何工作的理解一致,即在设计时,只能探索包含安装到IDE中,而不是项目源文件包中的类型.
如果IDE确实能够检查项目中声明的类型我缺少什么?
我对 RTTI.pas 源代码的阅读使我得出结论:Delphi RTTI 无法检查 IDE 的当前项目。在设计时,RTTI 能够检查 IDE 托管的包内的类型。除此之外它无法进行更多检查。
| 归档时间: |
|
| 查看次数: |
567 次 |
| 最近记录: |