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

Советы » Монитор и Экран » Экранный вирус

Никогда не видели экранного вируса? Представьте, что Ваш экран заболел и покрылся красными пятнами :) А если эта болезнь нападёт на какое-нибудь окно ? Всё, что нам надо, это получить контекст устройства при помощи 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

;

Другое по теме:

Категории

Статьи

Советы

Copyright © 2022 - All Rights Reserved - www.delphirus.com