高見知英の技術ログ

技術関係のログをQiitaから移行してきました。プログラミングのほか、使っているアプリの細かい仕様についてなど書いていきます。

Lazarusでリソースを使う

このブログはLazarus(FreePascal)アドベントカレンダー3日目の記事です。

qiita.com

Lazarusでリソースを使う画像やアイコン、スクリプトファイルなどのファイルはリソースとしてプロジェクトに取り込んでおくと便利です。

Lazarusで扱えるリソースには2種類があります。

  • resファイル:プロジェクトオプションから追加できるリソース形式。TResourceStreamオブジェクトで読み込みが可能。
  • lrsファイル:LazResというユーティリティファイルによって生成するリソース形式。LazarusResourcesというTLResourceList型のオブジェクトにより取得が可能。

どちらもリソースの名前を指定することができるという点では同じですが、resファイル形式はn番目のリソース取得したり、リソースの名前一覧を取得することができない(っぽい)のに対し、lrsファイルはリソースの個数を取得したり、n番目のリソースを取得するなどといったことができます。

res形式 lrs形式
作成方法 プロジェクトオプションより LazResユーティリティより
読み取り方法 TResourceStreamを使う LazarusResourceを使う
クラスの定義ユニット Classes LResources
for文で走査 できない できる

TResourceStreamはTStreamの子オブジェクトなので、画像などのバイナリファイルを基本に、内部のスクリプトファイルなどにはLazarusResourcesを使うと良いでしょう。

LazResをいちいち呼ぶのが面倒くさい

LazResユーティリティはLazarusインストールディレクトリの\tools\lazres.exeにあります。そこで、プロジェクトオプションより起動前にpython .\resourcemaker.py --lazarus_dir $(LazarusDir)などとしてリソースを整理するためのスクリプトを実行しておくと良いでしょう。実例は以下のあたりを参照。

github.com

lrsファイルの中身が古い?

なお、とくにlrs形式の場合、ファイルをせっかく書き換えたのになぜか参照されるリソースファイルが古い ということがあります。

どうもlrs形式の場合、ただ「実行」しただけではlrsが更新されないことがあるようです。

コンパイルまたは構築を実行してみましょう。