Delphi XE2 の VCL フォーム アプリケーションまたは Windows サービス アプリケーションとしてコンパイルできるように、条件を使用するアプリケーションがあります。ただし、プロジェクトのメイン ソース ファイルを手動で変更したため、IDE では、標準の [プロジェクト オプション] ウィンドウを使用して特定の変更を行うことができなくなりました。具体的には、含めるまたは実装する VCL スタイルを選択できません。
したがって、VCL スタイルを手動で実装する必要があります。そのため、必要な 2 つのユニット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 がコードを破棄するためです。
編集
私が試したことの1つは、作業中のプロジェクトがこのスタイルを使用していたが、運がなかったため、作業中のプロジェクトの.dproj
ファイルを開き、そこで何らかの構成を見つけたいと思ってこのスタイルを検索したことです。carbon
その単語はそのファイルのどこにも存在しません。