前回のアーティクルでプログラムにフォントをリソースとして埋め込んで使用する方法を見てきましたが、Delphi 12.3 Athensおよびそれ以前の環境ではコンパイルしようとすると、埋め込もうとしたフォントによっては
[BRCC32 エラー] "brcc32" はコード 1 を伴って終了しました。
とリソースコンパイラでエラーになることがあります。Delphiのリソースのコンパイルはデフォルトではbrcc32.exe→cgrc.exe→rc.exeと、最終的にMicrosoftのリソースコンパイラが使われるのですが、このrc.exeに多数の不具合と未定義動作があり、フォントを解析するときの処理の不具合でこのような状況になるようです(下記記事参照)。
一方Delphi 13 Florenceでは新機能ページのIDEツールの改善のリソース コンパイラの項にあるように、Ryan Liptakさんによるrc.exe互換のオープンソース実装であるresinatorをデフォルトで使用するように変更されています。
そこでこのresinatorをDelphi 12.3までの環境で使用する手順を確認していきます。
同じ環境にDelphi 13 Florence(またはそれ以降のバージョン)がインストールされている場合はパスが通った場所に既にresinatorが配置されているため、別途インストールする必要はありません。そうでない場合は、まずGitHubのリポジトリにアクセスし、最新版のWindows x64のバイナリ(2025/10/23現在ではv0.1.0にあるwindows-x86_64-resinator.zip)をダウンロードし、resinator.exeを(できればパスが通った)適切な場所に展開します(簡単なのはDelphiのインストール先のbinフォルダの下あたりかも)。
次にDelphiのIDEでエラーになるプロジェクトを開き、"メインメニュー"→"プロジェクト"→"リソースと画像"で"<プロジェクト名>のリソース"ダイアログを開いてすべての項目を削除して"OK"で閉じます(<プロジェクト名>Resource.rcファイルは削除されませんので、これをresinatorでコンパイルします)。
"メインメニュー"→"プロジェクト"→"オプション"で"プロジェクトオプション"ダイアログを開き、"ビルド"→"ビルドイベント"のターゲットで"全ての構成 - Windows 32 ビットプラットフォーム"(または"全ての構成 - Windows 64 ビットプラットフォーム")を選択し、"ビルド前イベント"の"コマンド"に
resinator.exe -v $(PROJECTNAME)Resource.rc $(PROJECTNAME).dres
と設定します(もしパスが通っていない場所にresinator.exeを配置した場合は"resinator.exe"を絶対パスで指定してください)。最後にプロジェクトファイル(*.dpr)の "program プロジェクト名;" の次に "{$R *.dres}" の行を追加します(リソースダイアログで全項目削除すると自動的に削除されてしまうので)。
program Project1;
{$R *.dres}
uses
Vcl.Forms,
...
こんな感じです。これでコンパイルするとビルド前イベントで"(プロジェクト名)を信頼しますか?"という警告ダイアログが表示されるので、"このプロジェクトを常に信頼する"にチェックを入れて"はい"をクリックします。これによって、プロジェクトをコンパイルするときのビルド前イベントでリソーススクリプトファイル(.rc)をresinatorでコンパイルしてリソースファイル(.dres)を生成しておき、リンカでこのリソースファイルをリンクする、という動作になります。
Skia4Delphiの描画(TSkLabelやISkCanvas)でもリソースとして埋め込んだフォントを使用する方法については次のアーティクルで説明します。
なおMicrosoftのリソースコンパイラrc.exeにどのような不具合があり、resinatorではどのような動作に修正されているのかについてはRyan LiptakさんのblogのEvery bug/quirk of the Windows resource compiler (rc.exe), probably - ryanliptak.comというアーティクルにまとめられています。
0 件のコメント:
コメントを投稿