如何在我的应用程序中手动包含 VCL 样式?

问题描述 投票:0回答:2

我有一个应用程序,它使用条件能够将其编译为 VCL 表单应用程序或 Delphi XE2 中的 Windows 服务应用程序。但是,由于我手动更改了项目的主源文件,IDE 将不再允许我使用标准项目选项窗口进行某些修改。具体来说,我无法选择要包含或实现的 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
希望在那里找到它的一些配置,因为工作项目使用了这种风格,但没有运气。该单词在该文件中的任何位置都不存在。

delphi delphi-xe2 vcl-styles
2个回答
17
投票

TStyleManager
正在从可执行文件的“VCLSTYLE”资源部分加载可用样式(除非您将
TStyleManager.AutoDiscoverStyleResources
设置为 false)。该资源是您的场景中缺少的内容。 基本上,可以通过三种方式将样式添加为 exe 中的资源。

  • 通过“项目”->“资源和图像..”菜单。单击对话框中的“添加”按钮添加样式,将其类型设置为“VCLSTYLE”,将标识符设置为“CARBON”。

  • 正如Ken在问题评论中提到的那样,通过 .rc 文件。这是一个文本文件,每个样式(和/或其他资源)可以包含一行。喜欢

    CARBON VCLSTYLE "C:\..\RAD Studio\9.0\Redist\Styles\Vcl\Carbon.vsf"
    (如果可行的话可以使用相对路径)。我们将文件命名为“styles.rc”,通过项目管理器将文件添加到项目中(或使用 bin 文件夹中的 brcc32.exe 将其编译为 .res 文件),然后将
    "C:\..\RAD Studio\9.0\Redist\Styles\Vcl\Carbon.vsf"
    行添加到您的单元中。

  • 正如RRUZ他的回答中所说,他通过编辑 .dproj 文件在评论中链接到该问题。在

    {$R styles.res}
    键下,添加一个
    <PropertyGroup Condition="'$(Base)'!=''">
    条目(他的示例包括多种样式):
    VCL_Custom_Styles


0
投票
  1. 将所选样式文件的“*.vsf”放入.exe目录中。

  2. 在 .dpr 添加/更改

    <VCL_Custom_Styles>&quot;Amakrits|VCLSTYLE|$(PUBLIC)\Documents\RAD Studio\9.0\Styles\Amakrits.vsf&quot;;&quot;Amethyst Kamri|VCLSTYLE|$(PUBLIC)\Documents\RAD Studio\9.0\Styles\AmethystKamri.vsf&quot;;&quot;Aqua Graphite|VCLSTYLE|$(PUBLIC)\Documents\RAD Studio\9.0\Styles\AquaGraphite.vsf&quot;</VCL_Custom_Styles>
  3. Copmile/跑步。

© www.soinside.com 2019 - 2024. All rights reserved.