Présentation :
Réaliser un économiseur d’écran pour windows, consiste simplement
à réaliser un programme exécutable.
Aucune gestion d’activation, aucun timer pour savoir depuis combien de
temps l’utilisateur n’a pas bougé sa souris ou pressé une touche ne sont
nécessaire. Windows se charge de tout, et démarre notre économiseur
d’écran en temps voulu.
De la même manière, lorsque notre économiseur se ferme parce qu’un
utilisateur a effectué une action (ex : touche pressé..), Windows restitue
l’écran exactement comme il le fait avec un programme normal.
Afin de remplir son rôle d’économiseur, le comportement du programme
que l’on crée doit tout de même remplir quelques conditions telles que
s’exécuter au premier plan, faire évoluer régulièrement la couleur de chaque
point de l’écran et se fermer dès que l’utilisateur exécute une action sur le
clavier ou la souris.
Transformer l’exécutable en économiseur :
Les économiseurs d’écrans sont donc des fichiers exécutables ayant pour
extension SCR. Apparemment, sous windows NT4, il suffit de renommer
notre exécutable en .scr, pour qu’il soit reconnu en temps qu’économiseur
d’écran. Sous windows95 et windows 3.x, il faut en outre ajouter une partie
description à l’en-tête du fichier, l’ajout fonctionnant également sous NT.
En utilisant Delphi, il y a deux façons d’ajouter cette description à l’exécutable
produit.
On peut utiliser la directive {$D .. que l’on place dans le fichier source du projet
(.dpr).
Ex :


uses
Forms,
dialogs,
windows,
messages,
sysUtils,
Unit1 in 'Unit1.pas' {screenSaver};
{$R *.RES}
{$D mon économiseur}
procedure RunApplication;
begin
repeat
application.HandleMessage;
until Application.Terminated;
end;
begin
if (paramCount > 0) and
(pos('c', lowerCase(paramStr(1))) > 0) then
showMessage('Pas de paramètres')
else
if (paramCount > 0) and
(pos('s', lowerCase(paramStr(1))) > 0) then
begin
Application.Initialize;
screenSaver := TScreenSaver.create(application);
screenSaver.show;
RunApplication;
end;
end.
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs;
type
TscreenSaver = class(TForm)
procedure FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
procedure FormMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure FormMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
procedure FormCreate(Sender: TObject);
private
FXMouse : integer;
FYmouse : integer;
public
//--
end;
var
screenSaver: TscreenSaver;
implementation
{$R *.DFM}
//----------------
//-- kernel --
//----------------
procedure TscreenSaver.FormCreate(Sender: TObject);
begin
FXMouse := 0;
FYmouse := 0;
//-- do wat you want
end;
//----------------
//-- sortie --
//----------------
procedure TscreenSaver.FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
application.terminate;
end;
procedure TscreenSaver.FormMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
Application.Terminate;
end;
procedure TscreenSaver.FormMouseMove(Sender: TObject; Shift: TShiftState;
X, Y: Integer);
begin
if (FXMouse + FYmouse <> 0) and
(((FXMouse - X)>5) or
((FYMouse - Y)>5)) then
application.terminate
else
begin
FXMouse := X;
FYMouse := Y;
end;
end;
end.