在Delphi中创建一个屏幕保护程序预览

时间:2013-04-23 16:41:39

标签: delphi preview screensaver

我在Delphi 10 Lite中创建了一个屏幕保护程序,使用有关此问题的不同描述,可在网上找到。现在,屏幕保护程序运行良好,缺少一件事:屏幕保护程序设置对话框上的良好工作预览。它怎么能被创造出来?我已阅读此说明:how to make a screen saver preview in Delphi? 但我想要一些更具体的东西,也许还有一个例子。我正在使用Windows 7 Ultimate SP1。 感谢。

2 个答案:

答案 0 :(得分:5)

Embarcadero网站提供了一个功能齐全的屏幕保护程序示例,其中包括正常执行(运行),预览,密码设置等。试试这篇文章Random Images Screen Saver - a complete screen saver example,源代码可以从here下载。

答案 1 :(得分:0)

这就是我在my little scrub screen saver test所做的事情(看看人们如何比抛光更有效):

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;

希望有所帮助。