unit testsneg;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls;
type
TSnegForm = class(TForm)
Timer1: TTimer;
procedure FormCreate(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
procedure PaintSneg(x1, y1, x2, y2: integer);
private
{ Private declarations }
public
{ Public declarations }
end;
TPointExt = record
x, y, Xstart, Ystart: extended;
RND: integer;
Sdvig: extended;
stop:boolean;
stopcount:longword;
end;
var
SnegForm: TSnegForm;
S: array [word] of TPointExt;
SnegCount: word;
NofTim: longword;
Veter: extended;
implementation
{$R *.dfm}
procedure TSnegForm.FormCreate(Sender: TObject);
var
i: word;
begin
enablewindow(handle,false);
SetWindowLong(handle, GWL_EXSTYLE,GetWindowLong(Handle, GWL_EXSTYLE)
or WS_EX_NOACTIVATE or WS_EX_PALETTEWINDOW or WS_EX_TOPMOST);
SnegCount := 500;
Veter:=10;
for i := 0 to SnegCount - 1 do
begin
S[i].Xstart := random(screen.Width+100)-50;
S[i].Ystart := random(screen.height) - screen.height;
S[i].y := S[i].Ystart;
S[i].Sdvig := 0;
S[i].RND := 0;
s[i].stop:=false;
end;
end;
procedure TSnegForm.PaintSneg(x1, y1, x2, y2: integer);
begin
canvas.MoveTo(x1, y1);
canvas.lineto(x2+1, y2+1);
canvas.MoveTo(x1, y2);
canvas.lineto(x2+1, y1-1);
canvas.MoveTo((x1 + x2) div 2, y1);
canvas.lineto((x1 + x2) div 2, y2+1);
canvas.MoveTo(x1, (y1 + y2) div 2);
canvas.lineto(x2+1, (y1 + y2) div 2);
//Canvas.Rectangle(x1,y1,x1+2,y1+2);
end;
procedure TSnegForm.Timer1Timer(Sender: TObject);
var
i,j: word;
fl: boolean;
TempX,TempY:integer;
cv1,cv2:longword;
Cur:TPoint;
begin
//BringWindowToTop(handle);
GetCursorPos(Cur);
Veter:=20*(cur.X-screen.Width div 2)/screen.Width;
inc(NofTim);
fl := true;
if NofTim >= 100 + random(10) then
begin
fl := true;
NofTim := 0;
end;
for i := 0 to SnegCount - 1 do
begin
if fl then
begin
S[i].RND := random(3) - 1;
end;
S[i].Sdvig := S[i].Sdvig + 2 * S[i].RND+Veter;
Canvas.Pen.Color:=Color;
TempX:=round(S[i].x);
TempY:=round(S[i].y);
PaintSneg(TempX, TempY, TempX+6, TempY+6);
S[i].y := S[i].y + 5;
if s[i].y>screen.height then
s[i].y:=0;
S[i].x := S[i].Xstart + (10+s[i].rnd) * sin((S[i].y) / 10) + S[i].Sdvig;
if s[i].x>screen.Width+50 then
s[i].xStart:=s[i].xStart-screen.Width-100
else if s[i].x<-50 then
s[i].xStart:=s[i].xStart+screen.Width+100;
canvas.Pen.Color := clWhite;
TempX:=round(S[i].x);
TempY:=round(S[i].y);
PaintSneg(TempX, TempY, TempX+6, TempY+6);
end;
end;
end.