0

この質問に関するさまざまな説明を使用して、Delphi 10 Lite でスクリーン セーバーを作成しました。Web で入手できます。現在、スクリーン セーバーは正常に動作していますが、1 つ足りないことがあります。それは、[スクリーン セーバーの設定] ダイアログ ボックスで正常に動作するプレビューです。どのように作成できますか?この説明を読みました: Delphi でスクリーン セーバーのプレビューを作成する方法は? しかし、もっと具体的なものが欲しいです。おそらく例を挙げてください。Windows 7 Ultimate SP1 を使用しています。ありがとう。

4

2 に答える 2

5

Embarcadero サイトでは、通常の実行 (実行)、プレビュー、パスワード設定などを含む、完全に機能するスクリーン セーバーのサンプルを提供しています。この記事を試してみてください。ソース コードはここRandom Images Screen Saver - a complete screen saver exampleからダウンロードできます。

于 2013-04-23T16:59:25.253 に答える
0

これが私の小さなスクラブスクリーンセーバーテストで行ったことです(洗練されたものではなく、どのように機能するかを確認するために行われました):

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;

それが役立つことを願っています。

于 2013-04-23T18:44:58.273 に答える