Экранный вирус

Экранный вирус Никогда не видели экранного вируса? Представьте, что Ваш экран заболел и покрылся красными пятнами :) А если эта болезнь нападёт на какое-нибудь окно ? Всё, что нам надо, это получить контекст устройства при помощи API функции GetWindowDC и рисовать, что душе угодно. К исходному коду особых комментариев не требуется, скажу лишь только то, что основная часть кода находится в обработчике события OnTimer:

type
 TScreenVirus = class(TComponent)
 private
  FTimer: TTimer;
  FInterval: Cardinal;
  FColor: TColor;
  FRadius: Integer;
 protected
  procedure OnTimer(Sender: TObject);
  procedure SetInterval(Value: Cardinal);
 public
  constructor Create(AOwner: TComponent); override;
  procedure StartInfection;
 published
  property Interval: Cardinal
  read FInterval write SetInterval;
  property Color: TColor
  read FColor write FColor default clRed;
  property Radius: Integer
  read FRadius write FRadius default 10;
 end;
constructor TScreenVirus.Create(AOwner: TComponent);
begin
 inherited Create(AOwner);
 FTimer := TTimer.Create(Owner);
 FInterval := FTimer.Interval;
 FTimer.Enabled := False;
 FTimer.OnTimer := OnTimer;
 FColor := clRed;
 FRadius := 10;
end;
procedure TScreenVirus.StartInfection;
begin
 if Assigned(FTimer) then
  FTimer.Enabled := True;
end;
procedure TScreenVirus.SetInterval(Value: Cardinal);
begin
 if Value <> FInterval then
 begin
  FInterval := Value;
  FTimer.Interval := Interval;
 end;
end;
procedure TScreenVirus.OnTimer(Sender: TObject);
var
 hdcDesk: THandle;
 Brush: TBrush;
 X, Y: Integer;
begin
 hdcDesk := GetWindowDC(GetDesktopWindow);
 Brush := TBrush.Create;
 Brush.Color := FColor;
 SelectObject(hdcDesk, Brush.Handle);
 X := Random(Screen.Width);
 Y := Random(Screen.Height);
 Ellipse(hdcDesk, X - FRadius, Y - FRadius,
  X + FRadius, Y + FRadius);
 ReleaseDC(hdcDesk, GetDesktopWindow);
 Brush.Free;
end;

Отправить комментарий

Проверка
Антиспам проверка
Image CAPTCHA
...