PAPERINO.DPR

{Questo programma è il codice sorgente per la creazione 
di uno screen saver per la piattaforma Microsoft Win32}

program paperino;
{$E scr}  {Direttiva per settare l'estensione del file compilato}
{$R Paperino.res}
{$R SSRes.res}

uses GlobalInit,
     GlobalVar,
     SysUtils,
     Windows,
     Messages,
     Classes,
     SSavRoutine,
     Preview,
     Registry;

{$D SCRNSAVE:paperino}
{INTERFACE}

{Funzione principale del programma, gestisce il ciclo dei messaggi
 si è scelta la gestione tramite Message Cracker}
function ScreenSaverProc(HWindow: HWND;
                          AMessage,
                          WParam: Word;
                         LParam: Longint): Longint;stdcall;export;forward;

{ Registra la classe Windows }
function WinRegister: boolean;forward;

{funzione per creare la finestra principale}
function WinCreate: HWnd;forward;

{setta le caratteristiche principali dello ScreenSaver}
procedure WinConfigure;forward;

{funzione per la gestione del ciclo dei messaggi del dialog
 di configurazione, per la piccola dimensione, si è scelto
 di gestire i messaggi in modo tradizionale (no message cracker)}
function DialogProc( HDlg :HWND;          // handle del dialog box
                     AMessage :UINT;      // messaggio
                     wParam :WPARAM;      // primo parametro messaggio
                     lParam :LPARAM       // secondo parametro messaggio
                     ):BOOL;stdcall;export;forward;


                                          {Handler dei messaggi}
procedure SS_OnSysCommand (HWin :HWnd; var AMsg :TWMSysCommand);forward;
procedure SS_OnKeyDown (HWin :HWnd; var AMsg :TWMKeyDown);forward;
procedure SS_OnSysKeyDown (HWin :HWnd; var AMsg :TWMSysKeyDown);forward;
procedure SS_OnMouseMove (HWin :HWnd; var AMsg :TWMMouseMove);forward;
procedure SS_OnLButtonDown (HWin :HWnd; var AMsg :TWMLButtonDown);forward;
procedure SS_OnMButtonDown (HWin :HWnd; var AMsg :TWMMButtonDown);forward;
procedure SS_OnRButtonDown (HWin :HWnd; var AMsg :TWMRButtonDown);forward;
procedure SS_OnDestroy (HWin :HWnd; var AMsg :TWMDestroy);forward;
procedure SS_OnTimer (HWin :HWnd; var AMsg :TWMTimer);forward;
procedure SS_OnPaint (HWin :HWnd; var AMsg :TWMPaint);forward;

{END INTERFACE}


{IMPLEMENTATION}

{$INCLUDE MessageHandler.inc}
{$INCLUDE MainRoutine.inc}

{END IMPLEMENTATION}

begin
  case SaverMode of

    ModeConfExpl: begin 
                    EnableWindow (ConfigParent, False); // fa il dialogo modale
                    DialogBox(HInstance,'DLG_SCRNSAVECONFIGURE',ParamHandle,@DialogProc);
                    EnableWindow (ConfigParent, True);  // riattiva la finestra
                  end;
    ModeConf:  begin 
                 EnableWindow (ConfigParent, False);  // fa il dialogo modale
                 DialogBox(HInstance,'DLG_SCRNSAVECONFIGURE',ParamHandle,@DialogProc);
                 EnableWindow (ConfigParent, True);   // riattiva la finestra
               end;

    ModeExec:  begin   //modo Full Screen
                 if not WinRegister  then
                   begin
                     MessageBox(0,Error1,nil,MB_OK);
                     Exit;
                   end;
                 HSSWnd:=WinCreate;
                 if HSSWnd = 0 then
                   begin
                     MessageBox(0,Error2,nil,MB_OK);
                     Exit;
                   end;
                   SSInit(200);  //TimeOut Inizializza lo ScreenSaver  
                   if (ConfigParent <> 0) then
                     SetForegroundWindow (ConfigParent);

                             WinConfigure;

                           while GetMessage(AMessage, 0, 0, 0) do  //Ciclo dei messaggi
                     begin
                        TranslateMessage(AMessage);
                       DispatchMessage(AMessage);
                     end;

                         DestroyWindow(HSSWnd); //Distruzione della finestra Principale
                   if (SaverMode = ModeExec) and (ConfigParent <> 0) then
                     // riattiva la finestra  prima della partenza
                     SetForegroundWindow (ConfigParent);
                     Halt(AMessage.WParam); //Uscita dal Programma
                end;

      ModePrev:  begin
                   if ParamHandle <> 0 then
                   ExecPreview;
                 end;

      ModeSetPwd:begin
                   if ParamHandle <> 0 then
                   ExecSetPwd;
                 end;
   end;
  Halt;
          end.

This page hosted by  Get your own Free Home Page