9

Delphi XE2 の VCL フォーム アプリケーションまたは Windows サービス アプリケーションとしてコンパイルできるように、条件を使用するアプリケーションがあります。ただし、プロジェクトのメイン ソース ファイルを手動で変更したため、IDE では、標準の [プロジェクト オプション] ウィンドウを使用して特定の変更を行うことができなくなりました。具体的には、含めるまたは実装する VCL スタイルを選択できません。

したがって、VCL スタイルを手動で実装する必要があります。そのため、必要な 2 つのユニット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.

Style 'Carbon' could not be found.問題は、このスタイルがアプリケーションに組み込まれてコンパイルされていないという理由だけで、アプリケーションの実行時にエラーが発生することです。

このスタイルをこのアプリケーションに手動でコンパイルして、VCL スタイルが実装できるようにするにはどうすればよいですか?

PS: 初期化が別のユニットにある理由は、条件がアプリケーションのメイン ユニット内に実装されている場合、IDE がコードを破棄するためです。

編集

私が試したことの1つは、作業中のプロジェクトがこのスタイルを使用していたが、運がなかったため、作業中のプロジェクトの.dprojファイルを開き、そこで何らかの構成を見つけたいと思ってこのスタイルを検索したことです。carbonその単語はそのファイルのどこにも存在しません。

4

1 に答える 1

16

TStyleManager実行可能ファイルの 'VCLSTYLE' リソース セクションから利用可能なスタイルをロードしています ( TStyleManager.AutoDiscoverStyleResourcesfalse に設定していない場合)。リソースは、シナリオに欠けているものです。基本的に、スタイルをリソースとして exe に追加するには 3 つの方法があります。

  • [プロジェクト] -> [リソースと画像..] メニューから。ダイアログの「追加」ボタンをクリックしてスタイルを追加し、そのタイプを「VCLSTYLE」に、識別子を「CARBON」に設定します。

  • ケンが質問へのコメントで述べたように、.rc ファイルを介して。これは、スタイル (および/またはその他のリソース) ごとに 1 行を含むことができるテキスト ファイルです。お気に入り

    CARBON VCLSTYLE "C:\..\RAD Studio\9.0\Redist\Styles\Vcl\Carbon.vsf"
    (可能であれば相対パスを使用できます)。ファイルに 'styles.rc' という名前を付け、プロジェクト マネージャーを使用してファイルをプロジェクトに追加し (または bin フォルダー内の brcc32.exe を使用して .res ファイルにコンパイルし)、{$R styles.res}ユニットに行を追加します。

  • RRUZが回答で言ったように、.dproj ファイルを編集して、質問へのコメントにリンクしました。キーの下にエントリ <PropertyGroup Condition="'$(Base)'!=''">を追加します(この例にはいくつかのスタイルが含まれています)。VCL_Custom_Styles

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

于 2012-09-25T01:36:11.537 に答える