╒ЁрэшЄхы№ ¤ъЁрэр╣2

╩юфшэу Spheres.dpr

program spheres;

 

uses

а Forms,

а SysUtils,

а cfg in 'cfg.pas' {CfgFrm},

а scrn in 'scrn.pas' {ScrnFrm};

 

{$R *.RES}

{$D SCRNSAVE Spheres Screen Saver}

 

begin

if hPrevInst = 0 then begin

аif (ParamCount > 0) and (UpperCase(ParamStr(1)) = '/S')

а then

аа begin

ааа Application.CreateForm(TScrnFrm, ScrnFrm);

а Application.CreateForm(TCfgFrm, CfgFrm);

а end

а else

аа begin

ааа Application.CreateForm(TCfgFrm, CfgFrm);

ааа Application.CreateForm(TScrnFrm, ScrnFrm);

аа end;

аApplication.Run;

end;

end.

 

 

╩юфшэу scrn.pas

unit scrn;

 

interface

 

uses

а Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,

а ExtCtrls;

 

type

а TScrnFrm = class(TForm)

ааа tmrTick: TTimer;

ааа procedure FormShow(Sender: TObject);

ааа procedure tmrTickTimer(Sender: TObject);

ааа procedure FormHide(Sender: TObject);

ааа procedure FormActivate(Sender: TObject);

а private

ааа { Private declarations }

ааа procedure DrawSphere(x, y, size : integer; color : TColor);

ааа procedure DeactivateScrnSaver(var Msg : TMsg; var Handled : boolean);

а public

ааа { Public declarations }

а end;

 

var

а ScrnFrm: TScrnFrm;

 

implementation

 

uses cfg;

 

var

аcrs:TPoint;

 

{$R *.DFM}

 

function Min(a, b : integer) : integer;

begin

if b < a

аthen

а Result := b

аelse

а Result := a;

end; {Min}

 

procedure TScrnFrm.DrawSphere(x, y, size : integer; color : TColor);

var

аi, dwааа : integer;

аcx, cyаа : integer;

аxy1, xy2 : integer;

аr, g, bа : byte;

begin

with Canvas do

begin

аPen.Style := psClear;

аBrush.Style := bsSolid;

аBrush.Color := color;

аr := GetRValue(color);

аg := GetGValue(color);

аb := GetBValue(color);

аdw := size div 16;

аfor i := 0 to 15 do

а begin

аа xy1 := (i * dw) div 2;

аа xy2 := size - xy1;

аа Brush.Color := RGB(Min(r + (i * 8), 255), Min(g + (i * 8), 255),

аа Min(b + (i * 8), 255));

аа Ellipse(x + xy1, y + xy1, x + xy2, y + xy2);

а end;

end;

end; {TScrnFrm.DrawSphere}

 

procedure TScrnFrm.DeactivateScrnSaver(var Msg : TMsg; var Handled : boolean);

var

аdone : boolean;

begin

if Msg.message = WM_MOUSEMOVE

аthen

а done := (Abs(LOWORD(Msg.lParam) - crs.x) > 5) or

ааааааааа (Abs(HIWORD(Msg.lParam) - crs.y) > 5)

аelse

а done := (Msg.message = WM_KEYDOWN)аааа or (Msg.message = WM_KEYUP)а or

аааааа (Msg.message = WM_SYSKEYDOWN)а or (Msg.message = WM_SYSKEYUP)а or

аааа (Msg.message = WM_ACTIVATE)ааа or (Msg.message = WM_NCACTIVATE)а or

ааа (Msg.message = WM_ACTIVATEAPP) or (Msg.message = WM_LBUTTONDOWN)а or

ааа (Msg.message = WM_RBUTTONDOWN) or (Msg.message = WM_MBUTTONDOWN);

if done

аthen

а Close;

end; {TScrnFrm.DeactivateScrnSaver}

 

 

 

procedure TScrnFrm.FormShow(Sender: TObject);

begin

аGetCursorPos(crs);

аtmrTick.Interval:=1000-CfgFrm.spnSpeed.Value*90;

аtmrTick.Enabled:=true;

аApplication.OnMessage := DeactivateScrnSaver;

аShowCursor(false);

end;

 

procedure TScrnFrm.tmrTickTimer(Sender: TObject);

const

аsphcount:integer=0;

var

аx, yааа : integer;

аsizeааа : integer;

аr, g, b : byte;

аcolorаа : TColor;

begin

if sphcount > CfgFrm.spnSpheres.Value then begin

Refresh;

sphcount := 0;

end;

Inc(sphcount);

x := Random(ClientWidth);

y := Random(ClientHeight);

size := CfgFrm.spnSize.Value + Random(50) - 25;

x := x - size div 2;

y := y - size div 2;

r := Random($80);

g := Random($80);

b := Random($80);

DrawSphere(x, y, size, RGB(r, g, b));

end; {TScrnFrm.tmrTickTimer}

 

procedure TScrnFrm.FormHide(Sender: TObject);

begin

аApplication.OnMessage:=nil;

аtmrTick.Enabled:=false;

аShowCursor(true);

end;

 

procedure TScrnFrm.FormActivate(Sender: TObject);

begin

аWindowState:=wsMaximized;

end;

 

end.

 

╩юфшэу Cfg.pas

unit cfg;

 

interface

 

uses

а Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,

а StdCtrls, Buttons, Spin, IniFiles;

 

type

а TCfgFrm = class(TForm)

ааа Label1: TLabel;

ааа Label2: TLabel;

ааа Label3: TLabel;

ааа spnSpheres: TSpinEdit;

ааа spnSize: TSpinEdit;

ааа spnSpeed: TSpinEdit;

ааа btnOK: TBitBtn;

ааа btnCancel: TBitBtn;

ааа btnTest: TBitBtn;

ааа procedure FormCreate(Sender: TObject);

ааа procedure btnOKClick(Sender: TObject);

ааа procedure btnCancelClick(Sender: TObject);

ааа procedure btnTestClick(Sender: TObject);

а private

ааа { Private declarations }

ааа procedure LoadConfig;

ааа procedure SaveConfig;

а public

ааа { Public declarations }

а end;

 

var

а CfgFrm: TCfgFrm;

 

implementation

 

uses scrn;

 

{$R *.DFM}

 

const

а CfgFile = 'SPHERES.INI';

 

procedure TCfgFrm.LoadConfig;

var

а inifile : TIniFile;

begin

inifile := TIniFile.Create(CfgFile);

try

аwith inifile do

аbegin

а spnSpheres.Value := ReadInteger('Config', 'Spheres', 50);

а spnSize.Valueааа := ReadInteger('Config', 'Size', 100);

а spnSpeed.Valueаа := ReadInteger('Config', 'Speed', 10);

аend;

finally

аinifile.Free;

end;

end; {TCfgFrm.LoadConfig}

 

procedure TCfgFrm.SaveConfig;

var

а inifile : TIniFile;

begin

inifile := TIniFile.Create(CfgFile);

try

аwith inifile do

аbegin

а WriteInteger('Config', 'Spheres', spnSpheres.Value);

а WriteInteger('Config', 'Size', spnSize.Value);

а WriteInteger('Config', 'Speed', spnSpeed.Value);

аend;

finally

аinifile.Free;

end;

end; {TCfgFrm.SaveConfig}

 

procedure TCfgFrm.FormCreate(Sender: TObject);

begin

аLoadConfig;

end;

 

procedure TCfgFrm.btnOKClick(Sender: TObject);

begin

аSaveConfig;

аClose;

end;

 

procedure TCfgFrm.btnCancelClick(Sender: TObject);

begin

аClose;

end;

 

procedure TCfgFrm.btnTestClick(Sender: TObject);

begin

аScrnFrm.Show;

end;

 

end.

Hosted by uCoz