gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 14:50:57 33 4
gpt4 key购买 nike

我有一个应用程序,它使用条件能够将其编译为 VCL 表单应用程序或 Delphi XE2 中的 Windows 服务应用程序。但是,由于我手动更改了项目的主源文件,IDE 将不再允许我使用标准项目选项窗口进行某些修改。具体来说,我无法选择要包含或实现的 VCL 样式。

因此,我必须手动实现 VCL 样式。因此,我将两个必要的单元 Vcl.ThemesVcl.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.

问题是,当应用程序运行时,我收到错误找不到样式“Carbon”。只是因为该样式尚未包含并编译到应用程序中。

如何手动将此样式编译到此应用程序中,以便 VCL 样式可以实现它?

PS:初始化之所以在单独的单元中进行,是因为如果条件语句在应用程序的主单元内实现,IDE 将破坏代码。

编辑

我尝试过的一件事:我打开了一个工作项目的 .dproj 文件并搜索了这种样式 carbon 希望在那里找到它的一些配置,因为工作项目使用了这种风格,但没有运气。该单词在该文件中不存在。

最佳答案

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

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

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

    CARBON VCLSTYLE <code>"C:\..\RAD Studio\9.0\Redist\Styles\Vcl\Carbon.vsf"</code>
    (如果可行的话可以使用相对路径)。我们将文件命名为“styles.rc”,通过项目管理器将该文件添加到项目中(或者使用bin文件夹中的brcc32.exe将其编译为.res文件),然后添加{$R styles.res}线路连接到您的设备。

  • RRUZ告诉his answer他通过编辑 .dproj 文件在评论中链接到该问题。下<PropertyGroup Condition="'$(Base)'!=''">键,添加 VCL_Custom_Styles条目(他的示例包括几种样式):

    <code><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></code>

关于delphi - 如何在我的应用程序中手动包含 VCL 样式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12574234/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com