(德尔福 7)
我也试过了。
看看下面的第一个代码版本和我的 cmets:
program Project1;
{$IFDEF TESTIFDEF}
uses
Forms,
Unit1 in 'Unit1.pas' {Form1},
Unit2 in 'Unit2.pas' {Form2};
{$ELSE}
uses
Forms,
Unit1 in 'Unit1.pas' {Form1};
{$ENDIF TESTIFDEF}
{$R *.res}
begin
Application.Initialize;
Application.CreateForm(TForm1, Form1);
Application.CreateForm(TForm2, Form2);
Application.Run;
end.
那时,我刚刚插入了 2nd Form 并注意到相应的单元 (Unit2.pas) 被插入到 IFDEF 的第一部分内,即在“TESTIFDEF”标签部分内 - 因此没有覆盖第二个块(在 {$ELSE} 之后)。
因此您的解决方案应该是:
- 定义一个像“{$IFDEF DELPHIBASISCONFIGURATION}”这样的 IFDEF 语句来代替我的“{$IFDEF TESTIFDEF}”,所有表单都将在其中添加。
- 为您要使用的不同配置定义尽可能多的替代标签。
- 每次向项目添加表单时,将第一个块的插入行复制到下面的相应块中 - 取决于您的需要...
- 使用定义语句或选项对话框激活所需的配置
- 永远不要定义“DELPHIBASISCONFIGURATION”;)
因此,它应该如下所示:
program Project1;
{$DEFINE MYCONFIG1} // THIS ONE IS NOW ACTIVE
{$IFDEF DELPHIBASISCONFIGURATION}
uses
Forms,
Unit1 in 'Unit1.pas' {Form1},
Unit2 in 'Unit2.pas' {Form2},
Unit3 in 'Unit3.pas' {Form3};
{$ELSE}
// THIS IS A "COMMON TO ALL CONFIG" PART
uses
Forms,
// FIRST CONFIGURATION
{$IFDEF MYCONFIG1}
Unit1 in 'Unit1.pas' {Form1},
Unit3 in 'Unit3.pas' {Form3}
{$ENDIF MYCONFIG1}
// SECOND CONFIGURATION
{$IFDEF MYCONFIG2}
Unit1 in 'Unit1.pas' {Form1},
Unit2 in 'Unit2.pas' {Form2}
{$ENDIF MYCONFIG2}
// THIS IS THE "COMMON TO ALL CONFIG" END :)
;
{$ENDIF TESTIFDEF}
{$R *.res}
begin
Application.Initialize;
Application.CreateForm(TForm1, Form1);
//Application.CreateForm(TForm3, Form3);
//Application.CreateForm(TForm2, Form2);
Application.Run;
end.
如您所见,我已经放弃了对 Form2 和 Form3 的 Application.CreateForm(...) 的调用。
恕我直言,通常最好在您真正需要的时候动态创建补充表格,即并非所有表格都在程序启动时...