この質問に関するさまざまな説明を使用して、Delphi 10 Lite でスクリーン セーバーを作成しました。Web で入手できます。現在、スクリーン セーバーは正常に動作していますが、1 つ足りないことがあります。それは、[スクリーン セーバーの設定] ダイアログ ボックスで正常に動作するプレビューです。どのように作成できますか?この説明を読みました: Delphi でスクリーン セーバーのプレビューを作成する方法は? しかし、もっと具体的なものが欲しいです。おそらく例を挙げてください。Windows 7 Ultimate SP1 を使用しています。ありがとう。
2 に答える
Embarcadero サイトでは、通常の実行 (実行)、プレビュー、パスワード設定などを含む、完全に機能するスクリーン セーバーのサンプルを提供しています。この記事を試してみてください。ソース コードはここRandom Images Screen Saver - a complete screen saver example
からダウンロードできます。
これが私の小さなスクラブスクリーンセーバーテストで行ったことです(洗練されたものではなく、どのように機能するかを確認するために行われました):
WinHandle は、/P スイッチ中に渡されるウィンドウ ID です。スクリーン セーバーがウィンドウ ハンドルで動作するように (スクリーン セーバーは定義されたテキストをさまざまな色で表示し、その間に定義された遅延を設定するだけです) 装備したので、スクリーン セーバー コード自体を複製する必要はありませんでした。SS_Init はスクリーン セーバーの初期化を行い、SS_Start はその 1 ステップを実行し、SS_End は処理を終了します。
if program_state = Preview then // code before indicates /P was passed
begin
{ spindle off messages until window is visible }
while not IsWindowVisible(WinHandle) do
Application.ProcessMessages;
{ initialize and do screen saver draw }
start_time := WinMSSinceStart; // timeGetTime
SS_Init(WinHandle);
while IsWindowVisible(Winhandle) do
begin
if (WinMSSinceStart - Start_Time) >= config_rec.Delay then
begin
SS_Start(WinHandle);
start_time := WinMSSinceStart;
end;
Application.ProcessMessages;
sleep(10);
end;
SS_End(Winhandle);
end;
渡されたウィンドウ ハンドルを描画するように TCanvas を設定する方法を次に示します (これは SS_Init にあります (ただし、すべてではありません))。MyCanvas は、このコードに沿って定義したプロパティです。
{ get window dimensions and set up TCanvas }
GetClientRect(WinHandle, WinRect);
MyCanvas := TCanvas.Create;
MyCanvas.Handle := GetDC(Winhandle);
次に、完了したら (これは私の SS_End 関数全体です):
ReleaseDC(WinHandle, MyCanvas.Handle);
MyCanvas.Free;
それが役立つことを願っています。