0

JEDI JCL パッケージの優れた TExceptionDialog を使用して、C++ ビルダー XE プロジェクト内の未処理の例外を表示しています。これまでのところすべて正常に動作しています。クラッシュ レポートを FTP 経由でサーバーにアップロードする独自のカスタム フォームを作成して、少し強化することにしました。

問題は、Delphi PAS ユニットからカスタム フォームを開くことができず、外部として定義しようとしたことです (ここには Delphi プログラマーはいません。申し訳ありません :( )。しかし、それを適切にコーディングする方法がわかりません。多くのチュートリアルを読みました。しかし、カスタム フォーム用の DLL または OLE コンテナーを作成する以外に役立つものは何も見つかりませんでした。このプロジェクトではやり過ぎです。

質問は、このタスクを適切に実行するにはどうすればよいですか? C++ ユニットで定義されたフォームの ShowModal() を PAS デルファイ ユニットから実行する方法は?

4

1 に答える 1

0

私はそれを行うための簡単で実用的な方法を見つけました、ちょっと醜いですがうまくいきます!

秘訣は、Screen.Formsオブジェクトを使用してすべてのフォームを反復処理することでフォームを取得することです。フォームの簡単なIDを取得するために、フォームのTAGプロパティを事前定義された番号に設定しました。

要するに、私のフォームのC ++ユニット内で、これを実行します。

MyForm->Tag=9999; // easy way of Iding my form

次に、TExceptionDialogのdelphiユニット内で、[送信]ボタンのクリックメソッドで次のようにします。

procedure TExceptionDialog.SendBtnClick(Sender: TObject);
var
   i: integer;
   form: TForm;
begin
  for i := 0 to Screen.FormCount-1 do // all forms
  begin
    form := Screen.Forms[i]; // get a form
    if(form.Tag = 9999) then // check if its my form
    begin
      form.ShowModal; // if its mine, call showmodal
      break;
    end;
  end;
  ModalResult := mrOk;  // return to my app
end;
于 2012-07-11T13:33:30.540 に答える