我有一个应用程序使用条件,以便能够将其编译为VCL Forms应用程序或Delphi XE2中的Windows Service Application。但是,由于我手动更改了项目的主源文件,IDE将不再允许我使用标准的“项目选项”窗口进行某些修改。具体而言,我无法选择包含或实施VCL样式。如何在我的应用程序中手动添加VCL样式?
因此,我必须手动实现VCL样式。因此,我将两个必要的单元Vcl.Themes
和Vcl.Styles
添加到我的项目的初始化单元中(在这种情况下,它与项目的主单元不同),并将代码从工作应用程序复制到此新应用程序中。
下面是该项目的主要单元:
program MyServiceApplication;
uses
uMyService in 'uMyService.pas' {MyService: TService},
uMyServiceMain in 'uMyServiceMain.pas',
uMyServiceInit in 'uMyServiceInit.pas',
uMyServiceTest in 'uMyServiceTest.pas' {frmMyServiceTest};
{$R *.RES}
begin
RunMyService;
end.
然后在该项目的初始化单元:
unit uMyServiceInit;
interface
uses
{$IFDEF TESTAPP}
Vcl.Forms,
Vcl.Themes,
Vcl.Styles,
uMyServiceTest,
{$ELSE}
Vcl.SvcMgr,
uMyService,
{$ENDIF TESTAPP}
uMyServiceMain
;
procedure RunMyService;
implementation
procedure RunMyService;
begin
{$IFDEF TESTAPP}
Application.Initialize;
Application.MainFormOnTaskbar := True;
TStyleManager.TrySetStyle('Carbon'); //<--- WILL NOT RUN - STYLE DOES NOT EXIST
Application.Title := 'My Windows Service Application';
Application.CreateForm(TfrmMyServiceTest, frmMyServiceTest);
{$ELSE}
if not Application.DelayInitialize or Application.Installing then
Application.Initialize;
Application.CreateForm(TMyService, MyService);
{$ENDIF TESTAPP}
Application.Run;
end;
end.
麻烦的是,当应用程序运行时,我得到一个错误Style 'Carbon' could not be found.
仅仅是因为这种风格未被列入并编入应用程序。
如何将此样式手动编译到此应用程序中,以便VCL样式可以实现它?
PS:初始化在单独单元中的原因是因为如果条件在应用程序的主单元内部执行,IDE将破坏的代码。
编辑
一件事,我曾尝试:我开了一个工作项目的.dproj
文件和搜索这种风格carbon
希望能找到一些配置为它在那里,因为工作项目中使用这种风格,但没有运气。该文件中的任何位置都不存在该单词。
从快速检查,以'资源Editor',看来该样式添加到资源作为'VCLSTYLE'资源类型。这似乎意味着您可以创建一个带有样式文件列表的标准'.rc'文件($(BDS)\ Redist \ Styles \ Vcl'文件夹中的'.vsf'文件)。不过,我还没有机会测试它。您也可以在代码中将样式与样式管理器一起注册。 –
或者,您可以使用project-> resources&images添加ID = CARBON,type = VCLSTYLE的carbon.vsf。 –
Eureka,谢谢@Sertac,这是我认为最好的解决方案。 –