Embarcadero c++ builder中的声明表单:

Declaring Form in Embarcadero C++ builder:

本文关键字:声明 表单 c++ builder Embarcadero      更新时间:2023-10-16

开始使用Embarcadero XE-5,对象模型让我感到困惑。我的项目从一开始就涉及到Canvas,所以我的hello world就是画一条或两条线。建立一个SDI项目,并添加一个快速调用直接从c++构建器帮助中取出,但无法编译。Form1在所有示例中都使用了,但我实例化它的努力没有工作。我试着用各种方式宣布Form1,但都没有成功。

有谁能指出我的错误吗?
// ----------------------------------------------------
#include <vcl.h>
#pragma hdrstop>  
#include <tchar.h>
//-----------------------------------------------------
USEFORM("SDIMAIN.CPP", SDIAppForm);
USEFORM("ABOUT.CPP", AboutBox);
//-----------------------------------------------------
int WINAPI _tWinMain(HINSTANCE, HINSTANCE, LPTSTR, int)
    {
    Application->Initialize();
    Application->CreateForm(__classid(TSDIAppForm), &SDIAppForm);
 // ** Following line gives error: Form1 undefined. ** 
     Application->CreateForm(__classid(TCanvas), &Form1);   
     Application->CreateForm(__classid(TAboutBox), &AboutBox);
     Application->Run();
     return 0;
     }
 //------------------------------------------------------
/*  SDIMAIN - copied from the help screens  */
void __fastcall TForm1::FormPaint(TObject *Sender) 
{
Canvas->MoveTo(0,0);
Canvas->LineTo(ClientWidth, ClientHeight);
Canvas->MoveTo(0, ClientHeight);
Canvas->LineTo(ClientWidth, 0);
}

不使用TApplication::CreateForm()来创建TCanvas对象。将__classid(TCanvas)改为__classid(TForm1):

// ----------------------------------------------------
#include <vcl.h>
#pragma hdrstop>  
#include <tchar.h>
//-----------------------------------------------------
USEFORM("SDIMAIN.CPP", SDIAppForm);
USEFORM("Unit1.cpp", Form1);
USEFORM("ABOUT.CPP", AboutBox);
//-----------------------------------------------------
int WINAPI _tWinMain(HINSTANCE, HINSTANCE, LPTSTR, int)
{
    Application->Initialize();
    Application->CreateForm(__classid(TSDIAppForm), &SDIAppForm);
    Application->CreateForm(__classid(TForm1), &Form1);   
    Application->CreateForm(__classid(TAboutBox), &AboutBox);
    Application->Run();
    return 0;
}
//------------------------------------------------------

当然,这需要你有一个TForm1类开始:

File> New> VCL Form