2026/01/16(金) [n年前の日記]
#1 [delphi] Delphiでリソースファイルの追加
Windows11 x64 25H2 + Delphi 12 でスクリーンセーバを作ろうとしているけれど、そのまま何もしないと、「スクリーンセーバの変更」ウインドウのリスト上にはファイル名が表示されてしまう。表示されるスクリーンセーバ名を指定したい。
_スクリーンセーバーを作ったが、名前を設定できずにファイル名になってしまう
リソースファイルを埋め込めば任意の名前を指定できるらしい。
コンパイルすれば .rc が .res に変換されて .exe に内包されるらしい。
また、ソース中の最初のあたりに、以下の一文が増えていた。myresources.rc から myresources.res を作成してリソースとして組み込め、という指定なのではないかな…。
.rc ファイルに書いた内容は以下。
前述のページによると、スクリーンセーバを作る場合は以下の条件を満たすファイル名にしたほうがいいらしい。
例えば、ファイル名が「SSHOGEPI.SCR」なら、スクリーンセーバ変更ウインドウのリスト上では「Hogepi」という名前で表示される。最初の「SS」は省略して表示される。
ただ、Windows11 x64 25H2上では、SSWrapDp.scr というファイル名でも ―― 8文字に収まってるが大文字小文字が混在してるファイル名でも、中のリソースを読み込んで、リストにその名前を出してくれた。
_スクリーンセーバーを作ったが、名前を設定できずにファイル名になってしまう
リソースファイルを埋め込めば任意の名前を指定できるらしい。
- プロジェクトフォルダ内に、myresource.rc というテキストファイル(リソーススクリプトファイル?)を作成。
- 中身をテキストで書く。
- プロジェクト → プロジェクトに追加。
- ファイル種類を「リソースファイル (.rc)」にして、myresources.rc を開く。
コンパイルすれば .rc が .res に変換されて .exe に内包されるらしい。
また、ソース中の最初のあたりに、以下の一文が増えていた。myresources.rc から myresources.res を作成してリソースとして組み込め、という指定なのではないかな…。
{$R 'myresources.res' 'myresources.rc'}
.rc ファイルに書いた内容は以下。
STRINGTABLE PRELOAD DISCARDABLE BEGIN 1 "スクリーンセーバ名" END
前述のページによると、スクリーンセーバを作る場合は以下の条件を満たすファイル名にしたほうがいいらしい。
- 8文字+拡張子3文字。
- 8文字は全部大文字。
- 拡張子は .scr。
- 最初の2文字を「SS」にする。この2文字は、スクリーンセーバ変更ウインドウ上では消えてくれる。
例えば、ファイル名が「SSHOGEPI.SCR」なら、スクリーンセーバ変更ウインドウのリスト上では「Hogepi」という名前で表示される。最初の「SS」は省略して表示される。
ただ、Windows11 x64 25H2上では、SSWrapDp.scr というファイル名でも ―― 8文字に収まってるが大文字小文字が混在してるファイル名でも、中のリソースを読み込んで、リストにその名前を出してくれた。
◎ 書いてる内容の意味 :
.rc に書いたテキストはどういう意味を持つのか少し調べた。
STRINGTABLE は文字列テーブルがここから書かれているよ、という記述だろうし、BEGIN - END は、ここからここまでが文字列テーブルだよ、という記述だろう。しかし、1 は何…?
_第128章 スクリーンセーバー その2
_winsdk-10/Include/10.0.16299.0/um/ScrnSave.h at master - tpn/winsdk-10
_リソースの作成 (mixi 日記アーカイブ)
_mieki256's diary - Windows用スクリーンセーバの作り方をまだもうちょっと調べてる
C/C++でスクリーンセーバを書く場合も .rcファイルにスクリーンセーバ名を書いておくのだけど、scrnsave.h の中で定義されている IDS_DESCRIPTION で指定された文字列がスクリーンセーバ名を示す、ということになっているらしい。ScrnSave.h のコメントで以下が書かれてる。
そして、IDS_DESCRIPTION は以下の数値が定義されている。
つまり、Delphi でスクリーンセーバを作る時も、.rc の中でIDが1になってる文字列を指定しておけば、それがスクリーンセーバ名として反映される、ということだろう…。
ただ、idsAppName という定義もあるようで…。そちらを指定するとスクリーンセーバ名になると解説してるページも見かけた…。
AIに尋ねてみたら以下の返答を出してきた。
レジストリキー名、ウインドウクラス名、エラーメッセージタイトル等で使われるのが idsAppName。とAIが言っている。
よく分からんけどスクリーンセーバ名を指定したいだけなら、IDS_DESCRIPTION (=1) だけを指定しておけばいいのかもしれない。
STRINGTABLE は文字列テーブルがここから書かれているよ、という記述だろうし、BEGIN - END は、ここからここまでが文字列テーブルだよ、という記述だろう。しかし、1 は何…?
_第128章 スクリーンセーバー その2
_winsdk-10/Include/10.0.16299.0/um/ScrnSave.h at master - tpn/winsdk-10
_リソースの作成 (mixi 日記アーカイブ)
_mieki256's diary - Windows用スクリーンセーバの作り方をまだもうちょっと調べてる
C/C++でスクリーンセーバを書く場合も .rcファイルにスクリーンセーバ名を書いておくのだけど、scrnsave.h の中で定義されている IDS_DESCRIPTION で指定された文字列がスクリーンセーバ名を示す、ということになっているらしい。ScrnSave.h のコメントで以下が書かれてる。
This string should contain a less than 25 char name/description of the screen saver. This string is what will be seen by the user in the Control Panel's Desktop applet screen saver listbox. この文字列には、スクリーンセーバーの名前/説明(25文字未満)を含める必要があります。 この文字列は、コントロールパネルのデスクトップアプレットのスクリーンセーバーリストボックスに表示されます。
そして、IDS_DESCRIPTION は以下の数値が定義されている。
#define IDS_DESCRIPTION 1
つまり、Delphi でスクリーンセーバを作る時も、.rc の中でIDが1になってる文字列を指定しておけば、それがスクリーンセーバ名として反映される、ということだろう…。
ただ、idsAppName という定義もあるようで…。そちらを指定するとスクリーンセーバ名になると解説してるページも見かけた…。
AIに尋ねてみたら以下の返答を出してきた。
`scrnsave.h` を使用してスクリーンセーバーを開発する場合、
`IDS_DESCRIPTION` と `idsAppName` はどちらも文字列リソースですが、
その役割と「誰が参照するか」が明確に異なります。
結論から言うと、`IDS_DESCRIPTION` は「外向き(設定画面用)」、
`idsAppName` は「内向き(プログラムの管理用)」の名前です。
レジストリキー名、ウインドウクラス名、エラーメッセージタイトル等で使われるのが idsAppName。とAIが言っている。
よく分からんけどスクリーンセーバ名を指定したいだけなら、IDS_DESCRIPTION (=1) だけを指定しておけばいいのかもしれない。
[ ツッコむ ]
#2 [cg_tools] 画像編集ソフトを少し触ってる
ちょっとしたテスト画像を作成したくて、起動が速い軽量な画像編集ソフトは無いか探してる。環境は Windows11 x64 25H2。
◎ Fotografixを試用 :
Fotografixという画像編集ソフトがあるっぽい。レイヤー機能付き。現行版は写真加工に特化して色んな機能が削除されてしまったらしいけど、1.x は画像編集機能があったそうで、Portable版は 1.5 Rev2 だから該当機能を持っている模様。
_Fotografix Portable | PortableApps.com
試用してみた。FotografixPortable_1.5_Rev_2.paf.exe を入手して実行して任意のフォルダにインストール。FotografixPortable.exe を実行すれば起動する。
圧倒的に起動が速い…。File → Choose Language で、lang_ja.ini を選べば日本語化もできる。
ただ、描画機能がほとんど無い…。マウスカーソルを素早く動かすとブラシが途切れ途切れになってしまうのもちょっと…。もっとも、昔のMicorosoftペイントにレイヤー機能がついた感じではあるので、状況によっては使えそうな気もする。
_Fotografix Portable | PortableApps.com
試用してみた。FotografixPortable_1.5_Rev_2.paf.exe を入手して実行して任意のフォルダにインストール。FotografixPortable.exe を実行すれば起動する。
圧倒的に起動が速い…。File → Choose Language で、lang_ja.ini を選べば日本語化もできる。
ただ、描画機能がほとんど無い…。マウスカーソルを素早く動かすとブラシが途切れ途切れになってしまうのもちょっと…。もっとも、昔のMicorosoftペイントにレイヤー機能がついた感じではあるので、状況によっては使えそうな気もする。
◎ AzPainter、AzPainter2を試用 :
Windows版は開発中止になって、Linux上でのみ開発が続いている画像編集ソフト。開発停止になった AzPainter 1.36、AzPainter2 2.12 を試用してみた。
_Windows Software
これまた起動が圧倒的に速い…。描画機能も比較的充実してる。これでいいのではないかな…。
AzPainter2 は AzPainter 1.x より機能が増えているのかと思ったけど、そういうわけでもないっぽい。テキスト描画時に中央揃えをする機能が 2.x には無いことに気づいた。
_Windows Software
これまた起動が圧倒的に速い…。描画機能も比較的充実してる。これでいいのではないかな…。
AzPainter2 は AzPainter 1.x より機能が増えているのかと思ったけど、そういうわけでもないっぽい。テキスト描画時に中央揃えをする機能が 2.x には無いことに気づいた。
◎ ペイントを試用 :
Microsoftペイントも試用してみた。デスクトップの検索バーで mspaint と打てば「ペイント」が出てくる。バージョンは 11.2511.291.0 となっていた。
これも起動が速い。昔の版と違って色んな図形も描けるようになってる。これで済む場合も多そう。ただ、レイヤー機能は無い…と思ったけどちゃんとあるじゃん! 知らなかった…。何時頃追加されたんだろう…。
描画される図形はアンチエリアスがかかってないのだな…。
_「ペイント」アプリになんとレイヤー機能、画像の透過にも対応へ - 窓の杜
2023年頃にはレイヤー機能が追加されてたのか…。
これも起動が速い。昔の版と違って色んな図形も描けるようになってる。これで済む場合も多そう。ただ、レイヤー機能は無い…と思ったけどちゃんとあるじゃん! 知らなかった…。何時頃追加されたんだろう…。
描画される図形はアンチエリアスがかかってないのだな…。
_「ペイント」アプリになんとレイヤー機能、画像の透過にも対応へ - 窓の杜
2023年頃にはレイヤー機能が追加されてたのか…。
[ ツッコむ ]
#3 [nitijyou] 小学生に叱られてしまった
犬の散歩で山寺池公園の周囲を回っていたら、公園の中で遊んでいた小学生に道路交通法的な面で叱られてしまった…。詳細はGRPでメモ。
小学生に叱られるおじさんの図。実に情けない。今もまだめちゃくちゃ凹んでる。そう言われてもなあ…こっちにも事情があるんや…。好き好んでこんなことしてるわけやないんや…。今のところ代替手段が無いんや…。大目に見てくれんか…。無理か…。
自分も子供の頃はそういうタイプの小学生だったから彼の憤りもよく分かる。許せないよな。法律違反。法律は何が何でも絶対に守らなきゃいけない! と自分も思い込んでたから分かってしまう…。でも、法律がおかしい場合もある…。どういう状況を改善しようとしてその法を作ったのかを想像すると首を捻ってしまうものもあるし、そのルールを守ろうとすることで誰かが苦しむ状況を無意味に招く場面もあるし、そこに力を入れるより他に優先すべきことがあるだろうと怒りすら感じることもある…。だからと言って自己判断で各々が勝手なことするわけにもいかない。法治国家だし。しかし法は人が作るものだから結構バグがあって…。だけど子供の頃はそういうの分からないよな…。しかし何を言ってみたところで彼の目には法を守らないクソな大人にしか見えないだろう。自分もそういうタイプの子供だったから分かる…。
まあ、とにかく凹んでしまった。どうしたもんか。
小学生に叱られるおじさんの図。実に情けない。今もまだめちゃくちゃ凹んでる。そう言われてもなあ…こっちにも事情があるんや…。好き好んでこんなことしてるわけやないんや…。今のところ代替手段が無いんや…。大目に見てくれんか…。無理か…。
自分も子供の頃はそういうタイプの小学生だったから彼の憤りもよく分かる。許せないよな。法律違反。法律は何が何でも絶対に守らなきゃいけない! と自分も思い込んでたから分かってしまう…。でも、法律がおかしい場合もある…。どういう状況を改善しようとしてその法を作ったのかを想像すると首を捻ってしまうものもあるし、そのルールを守ろうとすることで誰かが苦しむ状況を無意味に招く場面もあるし、そこに力を入れるより他に優先すべきことがあるだろうと怒りすら感じることもある…。だからと言って自己判断で各々が勝手なことするわけにもいかない。法治国家だし。しかし法は人が作るものだから結構バグがあって…。だけど子供の頃はそういうの分からないよな…。しかし何を言ってみたところで彼の目には法を守らないクソな大人にしか見えないだろう。自分もそういうタイプの子供だったから分かる…。
まあ、とにかく凹んでしまった。どうしたもんか。
[ ツッコむ ]
以上、1 日分です。