从Borland C ++中的另一个项目添加表单

时间:2014-05-15 13:34:12

标签: project borland-c++

我目前正在使用Borland C ++开发一个项目,到目前为止我有两个表单,但每个表单都在一个独立的项目中,我希望将这两个项目加入到一个项目中,这样我就可以在表单之间切换。

我想只有一个可执行文件(出于安全目的),我尝试阅读一些关于borland c ++的pdf,也尝试使用谷歌搜索,但没有运气。

如果有办法,我希望你可以指导我或给我一些提示。

注意:我在Windows 8.1下使用Borland C ++ Builder 6.

1 个答案:

答案 0 :(得分:0)

我已经习惯了BDS2006,所以对于较新的IDE /编译器,它可以是不同的

1.形成副本

  • .h, .cpp,*。dfm文件
  • 将它们复制到目标项目目录

2.在IDE中打开目标项目

3.add表格投影

  • 在IDE主菜单中找到添加项目(我认为它在Project标签中)
  • 然后选择新表单的* .dfm文件,单击“添加”或“确定...”

4.打开目标项目源代码(* .cpp)

应如下所示:

//$$---- EXE CPP ----
//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop
//---------------------------------------------------------------------------
//*** here you have line for each form type and its name in forms menu
USEFORM("win_view.cpp", win_view);
USEFORM("win_main.cpp", win_main);
USEFORM("win_editor\win_editor_setup.cpp", win_EditorSetup);
USEFORM("win_editor\win_editor.cpp", win_editor);
USEFORM("win_editor\win_editor_find.cpp", win_EditorFind);
//---------------------------------------------------------------------------
WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
{
    try
    {
        Application->Initialize();
        //*** here create form for each static form you want
        //*** dynamic windows (created in runtime are not here !!!
        Application->CreateForm(__classid(Twin_main), &win_main);
        //*** here load cross references to forms if needed
        Application->Run();
    }
    catch (Exception &exception)
    {
        Application->ShowException(&exception);
    }
    catch (...)
    {
        try
        {
            throw Exception("");
        }
        catch (Exception &exception)
        {
            Application->ShowException(&exception);
        }
    }
    return 0;
}
//---------------------------------------------------------------------------

5.dynamic表格

  • 为所有动态/使用的内部表单文件添加#include * .h到主表单cpp文件
  • 这使得它们可以从主窗体
  • 访问
  • 现在你可以创建/销毁窗口

应如下所示:

    //---------------------------------------------------------------------------
    #include <vcl.h>
    #pragma hdrstop
    #include "win_main.h"
    //*** add the dynamic/used forms *.h files
    #include "win_view.h"
    #include "win_editor\win_editor.h"
    //---------------------------------------------------------------------------
    //*** add pointer to dynamic forms
    Twin_view       *win_view=NULL;
    //---------------------------------------------------------------------------
    void __fastcall Twin_main::some_event(...)
        {
        win_view=new Twin_view(win_main);
        if (win_view)
            {
            win_view->OnResize(win_view);
            win_view->_can_close=false;
            }
        }
    //---------------------------------------------------------------------------
    void __fastcall Twin_main::FormDestroy(TObject *Sender)
        {
        //*** destroy form before exiting also can call ->Close() and wait few [ms]  before
        if (win_view) { delete win_view; win_view=NULL; }
        }
    //-------------------------------------------------------------------
  • 您还可以将表单指针移动到所有者表单类,以使其更加客观c ++,如
  • 并允许将来创建多个原始主要表单(稍后在另一个项目中)

6.static used forms

  • 只包含* .cpp文件而不是* .h
  • 指向这些表单的指针直接位于* .cpp文件中(在开头)

[注释]

  • 如果您的表单有一些全局变量
  • 然后你不能使用超过1种那种类型的形式
  • 全局变量名称在使用的表单之间也必须不同
  • 不要为它们更改命名空间,这会让VCL变得疯狂