0

我在 Delphi 10 Lite 中创建了一个屏幕保护程序,使用关于这个问题的不同描述,可在网络上找到。现在,屏幕保护程序运行良好,但缺少一件事:“屏幕保护程序设置”对话框中的良好工作预览。它是如何被创造出来的?我已阅读此说明:如何在 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 完成其中一步,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 回答