Screensaver preview:

How do I create a preview of my screensaver in the screensaver properties, I need some samples that aren't to hard to understand.
kogerAsked:
Who is Participating?
 
dwwangConnect With a Mentor Commented:
Oh, I see, so this site will help you for sure, it describe how to build screen savers as well as how to write the preview part. Full source is included.

http://www.inprise.com/devsupport/delphi/ti_list/TI3335.html
0
 
MadshiCommented:
Do you need a "little" preview in stamp size or is it ok to watch the preview in full-screen?
I don't know how to do a stamp preview. But a full-screen preview is very easy:

var si : TStartupInfo;
    pi : TProcessInformation;
begin
  ZeroMemory(@si,sizeOf(si)); si.cb:=sizeOf(si);
  if CreateProcess(nil,'c:\windows\system\marquee.scr',nil,nil,false,0,nil,nil,si,pi) then begin
    CloseHandle(pi.hThread); CloseHandle(pi.hProcess); // Never forget to close handles...
  end;

Regards, Madshi.
0
 
trilloCommented:
When previewing, The preview window calls your program (with SCR extension) with two commandline parameters the first is a "p" and the second one is the handle of the preview window.

I'll paste here some code I used for a screensaver I made.

-----------------begin of code------------
unit Unit_InitProcs;

interface
uses Windows, extctrls, Classes, Graphics, SysUtils, Messages;

procedure ExecPreview;

var
  SaverMode:        Integer;  {one of the consts above}
  ParamHandle:      THandle;  {the Handle passed on command line as parameter}
  ConfigParent:     hWnd;     {the parent window for config-dialog}

  PrevRect:         TRect;
  MyBmp:        TBitmap;
  PreviewCanvas : TCanvas;
  R:    TRect;
implementation

{this is the window-proc for the preview window, it only implements 3 messages}
function MyWndProc (Wnd : HWnd; Msg : Integer; wParam : Word; lParam : Integer) : Integer; far; stdcall;
var
    x,y,cx,cy:  Integer;
begin {I don't know if it is ok to quit on WM_CLOSE, but I had no problems doing so}
    if (Msg = WM_DESTROY) or (Msg = WM_CLOSE) then
        PostMessage (Wnd, WM_QUIT, 0, 0);
    if Msg = WM_PAINT then begin
        x:=Round((PrevRect.Right-R.Right)/2);
        y:=Round((PrevRect.Bottom-R.Bottom)/2);
        cx:=x + R.Right-R.Left;
        cy:=y + R.Bottom-R.Top;
        PreviewCanvas.CopyRect(Rect(x,y,cx,cy),MyBmp.Canvas,R);
    end;
    DefWindowProc (Wnd, Msg, wParam, lParam);
end;
{This executes the preview window,
 and goes in a message loop to keep it running}
procedure ExecPreview;
var
  WndClass : TWndClass;
  Atom     : TAtom;
  DC       : hDC;
  MyWnd    : hWnd;
  Msg      : TMsg;
begin
  {create a new window class}
  with WndClass do begin
    style := CS_PARENTDC;
    lpfnWndProc := @MyWndProc;
    cbClsExtra := 0;
    cbWndExtra := 0;
    hIcon := 0;
    hCursor := 0;
    hbrBackground := 0;
    lpszMenuName := nil;
    lpszClassName := 'Delphi2ScreenSaverPreview';
  end;
  WndClass.hInstance := hInstance;
  Atom := Windows.RegisterClass (WndClass);
  {get some info on parent window}
  GetWindowRect (ParamHandle, PrevRect);
  PrevRect.Right := PrevRect.Right - PrevRect.Left;
  PrevRect.Bottom := PrevRect.Bottom - PrevREct.Top;
  PrevRect.Left := 0;
  PrevRect.Top := 0;
  {and now create the window as child of the window given in ParamHandle}
  MyWnd := CreateWindow ('Delphi2ScreenSaverPreview', 'FunSaver',
    WS_CHILD or WS_DISABLED or WS_VISIBLE, 0, 0, PrevRect.Right,
    PrevRect.Bottom, ParamHandle, 0, hInstance, nil);
  {get the DC for the new created window}
  DC := GetDC (MyWnd);
  PreviewCanvas := TCanvas.Create;
  PreviewCanvas.Handle := DC;
  MyBmp:=TBitmap.Create;
  MyBmp.LoadFromResourceName(hInstance,'INQUILINO');
  R:=Rect(0,0,MyBmp.Width,MyBmp.Height);
  {and now do the message loop, I think I cannot use any predifined loop here}
  while GetMessage(Msg, 0, 0, 0) do begin
    TranslateMessage(Msg);
    DispatchMessage(Msg);
  end;
  MyBmp.Free;
  PreviewCanvas.Free;
  ReleaseDC(0,DC);
  {I don't care about other resources here, as my app terminates immediately and
   Win95 cleans up after me}
end;

----------------end of code-------------
This block of code makes use of some unusual-in-Delphi functions and structures but it's not so hard to understand. In fact, we only create a new window and we make it a Child of the preview dialog box. Our window doesn't have a border and this is the window we will use to draw our screensaver.

Just tell me when you encounter any problem or if you have any question.

Trillo
0
[Webinar] Kill tickets & tabs using PowerShell

Are you tired of cycling through the same browser tabs everyday to close the same repetitive tickets? In this webinar JumpCloud will show how you can leverage RESTful APIs to build your own PowerShell modules to kill tickets & tabs using the PowerShell command Invoke-RestMethod.

 
kogerAuthor Commented:
I have got this sample from somewhere (can't remember where) but I still don't get it, could you perhaps create a quick sample that would e.g. display an image.
0
 
dwwangCommented:
Supose you want to preview a screen saver in a panel named panel1:

var
   s:string;
begin
     s:='c:\windows\system\YourScrName.scr /P '+trim(IntToStr(panel1.handle));
      WinExec(pchar(s),0);
end;

0
 
kogerAuthor Commented:
This is not what I'm looking for I don't have a preview in my screensaver.
0
 
kogerAuthor Commented:
just what I needed
0
All Courses

From novice to tech pro — start learning today.