【问题标题】:Add Forms from another project in Borland C++在 Borland C++ 中从另一个项目添加表单
【发布时间】:2014-05-15 13:34:11
【问题描述】:

我目前正在使用 Borland C++ 进行一个项目,到目前为止我有两个表单,但每个表单都在一个独立的项目中,我希望将这两个项目合并为一个项目,以便我可以在表单之间切换。

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

如果有办法这样做,我希望你能指导我或给我一些提示。

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

【问题讨论】:

    标签: project borland-c++


    【解决方案1】:

    我习惯了 BDS2006,所以对于较新的 IDE/编译器,它可能会有所不同

    1.表格复制

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

    2.在IDE中打开目标项目

    3.向项目中添加表单

    • 在IDE主菜单中找到添加到项目(我认为是在项目标签中)
    • 然后选择新表单的 *.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.动态表单

    • 将所有动态/使用的表单文件的 *.h 的#include 添加到主表单 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.静态使用的表格

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

    [注释]

    • 如果您的表单有一些全局变量
    • 那么您不能使用超过 1 种该类型的表单
    • 全局变量名称在使用的表单之间也必须不同
    • 不要为他们更改命名空间,这会让 VCL 发疯

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-07-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多