简体   繁体   English

从delphi代码调用C ++ Builder XE Form

[英]calling C++ builder XE Form from delphi code

I'm using great TExceptionDialog from JEDI JCL package to show unhandled exceptions inside a C++ builder XE project, everything running ok so far. 我正在使用JEDI JCL软件包中的出色TExceptionDialog来显示C ++构建器XE项目中未处理的异常,到目前为止一切正常。 I've decided to enhance it a little bit by writing my own custom form to upload crash report to a server via FTP. 我已经决定通过编写自己的自定义表单以通过FTP将崩溃报告上传到服务器来对它进行一些增强。

Problem is that I can't open my custom form from delphi PAS unit, tried to define as an external (no delphi programmer here, sorry :( ) but don't know how to properly code that. I've read lots of tutorials but couldn't find anything useful besides writing a DLL or an OLE container for my custom form, realy overkill for this project. 问题是我无法从delphi PAS单元中打开我的自定义表单,试图将其定义为外部表单(此处没有delphi程序员,对不起:(),但不知道如何正确地编写代码。我已经阅读了很多教程但是除了为我的自定义表单编写DLL或OLE容器外,找不到任何有用的东西,对这个项目来说确实太过分了。

Question is, how can I properly execute this task? 问题是,如何正确执行此任务? how to do ShowModal() of a form defined in a C++ unit, from a PAS delphi unit? 如何从PAS delphi单元执行C ++单元中定义的表单的ShowModal()?

I've found an easy and practical way of doing it, kinda ugly but works! 我找到了一种简单实用的方法,虽然有点丑陋,但可以工作!

Trick is to get form by iterating thru all forms with Screen.Forms object. 技巧是通过使用Screen.Forms对象遍历所有表单来获取表单。 I've set TAG property for my form to a predefined number just to get an easy id of it. 我已经将表单的TAG属性设置为预定义的数字,只是为了获得它的简单ID。

In short, inside C++ unit of my form, I'll do this: 简而言之,在表单的C ++单元中,我将执行以下操作:

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

Then, inside my delphi unit of TExceptionDialog, in SEND button click method: 然后,在我的TExceptionDialog的delphi单元中,在SEND按钮中单击方法:

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;

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM