私は多くの子フォームを使用してmdiアプリケーションを作成していますが、そのうちの1つはレポートを表示するためのフォームです。レポートフォームでは、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;
EInvalidCastエラーを取得せずにcoreclyでコードを作成する方法です。
ところで、このコードを他のユニットで書くと、dllとbplプログラムでエラーが発生しますが、同じユニットでそのコードを書くと(ユニットレポート)、コードはうまく機能します。よろしくお願いします。