mieki256's diary



2026/01/28(水) [n年前の日記]

#1 [lazarus] Lazarusで作ったアプリにSTRINGTABLEを含めたい

Windows11 x64 25H2 + Lazarus 4.4 で作成したWindows用スクリーンセーバに、リソースファイルを含めたい。

リソースファイル内の STRINGTABLE にスクリーンセーバ名を記述してバイナリに含めてしまうことで、「スクリーンセーバーの変更」ウインドウのリスト上に表示される名前を指定できるはず。

Delphiなら、.rc ファイルをテキストファイルとして書いて、リソースを追加することで含めてくれるのだけど…。Lazarus ではどうすればいいのやら。

windresでresに変換 :

AI(Google Gemini)に尋ねてみたら、windres を使って .rc を .res に変換しろと言ってきた。

windres はFPC (Free Pascal)に同梱されている。自分の環境では、D:\Dev\lazarus\ に Lazarus をインストールしてあるので、以下にFPC(とwindres)が入ってる。
D:\Dev\lazarus\fpc\3.2.2\bin\x86_64-win64

DOS窓上で FPC が使えるようにするためのbatファイル、D:\home2\bin\fpcenable.bat を作成しておいた。とメモ。実行すると環境変数PATHの先頭にFPCのパスが追加されて、FPCに同梱されたアレコレが利用できるようになる。
@echo off
@rem FPC (Free Pascal) enable
set FPCPATH=D:\Dev\lazarus\fpc\3.2.2\bin\x86_64-win64
set PATH=%FPCPATH%;%PATH%
echo Enable FPC (Free Pascal). Add path : %FPCPATH%

リソースファイル(リソーススクリプトファイル) strings.rc を作成。中身は以下。スクリーンセーバ名を記述してる。
STRINGTABLE
BEGIN
  1, "Lazarus SSaver 1"
END

windres で .rc を .res に変換。
windres strings.rc strings.res

.lpr にリソースファイル strings.res を読み込むように記述を追加。
  {$R *.res}

↓

  {$R *.res}
  {$R strings.res}

この状態でビルドして、出来上がった .scr を所定の場所にコピーして確認。「スクリーンセーバーの変更」ウインドウのリスト上に、今回指定した名前が表示された。

しかし、ソース内では *.res が記述されているから、プロジェクトフォルダ内に .res があるだけで読み込んでくれそうな気もするのだけど…。わざわざ別途指定しなくてもいいのかな…?

自動で変換 :

頻繁に .rc を修正するなら、自動で .res に変換するように指定することもできそう。

  • プロジェクト → プロジェクトオプション → コンパイラオプション → コンパイラコマンド。
  • 次の前に実行、の「コンパイル」「構築」にチェックを入れて、「実行」のチェックを外す。
  • コマンド入力欄に windres strings.rc strings.res と打ち込んでおく。

これで、ビルドする前に strings.rc を strings.res に変換してからビルドしてくれる。

ただ、これだと毎回変換されそうな…。そう頻繁に変換するものでもないよな…。手作業で .res に変換してもさほど困らない気もする。

.rcを直接記述 :

以下を眺めていたら…。

_Lazarus Resources - Free Pascal wiki

FPC 2.4 以降、かつ、windres にパスが通っていれば、ソース中に直接 .rc を記述してもいける、と書いてあるように見える…。


また、FPC 3.3.1 以降なら、コンパイラに -FF を指定することで、windres ではなく fpcres を使うように指示できる、とも書いてあるような…。でも、その -FF ってどこで指定すればいいのやら…。


_lazres - Free Pascal wiki

lazres なるツールもあるっぽい。tools/ の中にあると書いてある。

試しに .res を削除してから、ソースコード内に .res ではなく .rc と書いてみた。
  {$R *.res}
  {$R strings.rc}

ビルドが通ってしまった。もしかして、これだけで良かったのか…。

余談。Perl側のwindresのほうが新しかった :

余談。自分の環境の場合、環境変数 PATH の中に Perlのインストール場所も入っているけれど、その Perl も windres を持っているので、Perl と FPC のどっちの windres が使われてしまうのかちょっと分からないなと…。手作業で .res に変換したほうが確実だろうか?

確認してみたら、Perl のほうが windres 2.32 で、FPC のほうが windres 2.28 だった。FPC側よりPerl側の windres のほうが新しいから、仮にそちらが使われても問題は無いのかもしれない。とメモしておく。
> which windres
"D:\Perls\strawberry\5.32.1.1-x64\c\bin\windres.exe"

> windres -V
GNU windres (GNU Binutils) 2.32
Copyright (C) 2019 Free Software Foundation, Inc.
...

> fpcenable
Enable FPC (Free Pascal). Add path : D:\Dev\lazarus\fpc\3.2.2\bin\x86_64-win64

> which windres
"D:\Dev\lazarus\fpc\3.2.2\bin\x86_64-win64\windres.exe"

> windres -V
GNU windres (GNU Binutils) 2.28
Copyright (C) 2017 Free Software Foundation, Inc.
...

以上です。

過去ログ表示

Prev - 2026/01 - Next
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31

カテゴリで表示

検索機能は Namazu for hns で提供されています。(詳細指定/ヘルプ


注意: 現在使用の日記自動生成システムは Version 2.19.6 です。
公開されている日記自動生成システムは Version 2.19.5 です。

Powered by hns-2.19.6, HyperNikkiSystem Project