2026/01/28(水) [n年前の日記]
#2 [lazarus] Lazarusでスクリーンセーバを作りたかったけどまたハマった
Windows11 x64 25H2 + Lazarus 4.4 でWindows用のスクリーンセーバを作れそうか試していたけれど、また問題が…。
フルスクリーン表示モードが、期待通りに動かない…。
AI君に尋ねながら色々試していたのだけど、どうやらフォームの OnCreate でフルスクリーン表示を指定するとダメらしい。OnShow のタイミングでフルスクリーン表示を指定したところ、期待した動作になってくれた。
Delphi でスクリーンセーバを作った際は、OnCreate のタイミングでフルスクリーン表示を指定したら問題無く動いてくれたのだけど…。Lazarus は処理するタイミングが違うらしいなと…。
つまり、スクリーンセーバを作りたい場合、Delphi と Lazarus では以下の違いがある、ということになるのかな…。
Lazarus は Delphi の100%互換を目指して開発されているわけではなく、Windows、Linux、Mac上でも動作させられることを目指して開発されているらしいので、他のOSとの兼ね合いで、細かいところでは動作が違ってくるのだろう…。たぶん。
フルスクリーン表示モードが、期待通りに動かない…。
- Lazarus IDE から「/s」付きで .exe を実行して動作確認。
- 「スクリーンセーバーの変更」ウインドウでプレビューボタンをクリック。
AI君に尋ねながら色々試していたのだけど、どうやらフォームの OnCreate でフルスクリーン表示を指定するとダメらしい。OnShow のタイミングでフルスクリーン表示を指定したところ、期待した動作になってくれた。
Delphi でスクリーンセーバを作った際は、OnCreate のタイミングでフルスクリーン表示を指定したら問題無く動いてくれたのだけど…。Lazarus は処理するタイミングが違うらしいなと…。
つまり、スクリーンセーバを作りたい場合、Delphi と Lazarus では以下の違いがある、ということになるのかな…。
- フルスクリーン表示を指定する場合、Delphi は OnCreate、Lazarus は OnShow のタイミングで行う。
- プレビュー画面モードは、Delphi の場合、.ParentWindow にウインドウハンドルを渡すだけで済む。Lazarus は、TTimer 等を使って、親ウインドウが存在していない or 自身が非表示に設定されたかを常時監視して終了するように作らないといけない。
Lazarus は Delphi の100%互換を目指して開発されているわけではなく、Windows、Linux、Mac上でも動作させられることを目指して開発されているらしいので、他のOSとの兼ね合いで、細かいところでは動作が違ってくるのだろう…。たぶん。
[ ツッコむ ]
以上です。