Delphi - объектно-ориентированный язык программирования, разработанный компанией Borland в 1995 году. Он основан на языке программирования Pascal, но имеет более расширенные возможности и добавлены новые функции.
Delphi является интегрированной средой разработки (IDE), которая позволяет разрабатывать программное обеспечение для различных платформ, включая Windows, macOS, Android и iOS. Delphi достигает многоплатформенности с помощью...
Никогда не видели экранного вируса? Представьте, что Ваш экран заболел и покрылся красными пятнами :) А если эта болезнь нападёт на какое-нибудь окно ? Всё, что нам надо, это получить контекст устройства при помощи API функции GetWindowDC и рисовать, что душе угодно.
К исходному коду особых комментариев не требуется, скажу лишь только то, что основная часть кода находится в обработчике события OnTimer:
typeTScreenVirus = 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
;