我正在制作一个包含许多子表单的 mdi 应用程序,其中一个是显示报告的表单。在报表上,我使用 dll 文件来显示表单上的所有组件并在每个组件中查找值,我使用以下代码来执行此操作。
// this code i write in dll or bpl file
procedure getReportParams(Form : Tform); stdcall;
var
i : integer;
str, cbstr : string;
b : boolean;
begin
for i:=0 to Form.ComponentCount-1 do
begin
str:=str+Form.Components[i].Name+' - '+Form.Components[i].ClassName+', ';
if (Form.Components[i] is TcxLookupComboBox) then
begin
showmessage('test 1');
// if i uncomment the code below, the program get error Einvalidcast
// cbstr:=(Form.Components[i] as TcxDBLookupComboBox).Text;
// if (Form.Components[i] as TcxDBLookUpCombobox).Parent=Form.FindComponent('pnledit') then
// showmessage((Form.Components[i] as TcxDBLookUpCombobox).Name);
end;
end;
showmessage(str);
// this showmessage work well in dll, bpl, or other unit
if b then
showmessage(cbstr+' true') else showmessage(cbstr+' false');
end;
简单的问题是如何cbstr:=(Form.Components[i] as TcxDBLookupComboBox).Text;
使用 corecly 编写代码而不会出现 EInvalidCast 错误?
顺便说一句,如果我在其他单元中编写此代码,dll 和 bpl 程序会出错,但如果我在同一单元(单元报告)中编写该代码,则代码运行良好。感谢提前。