Недавно добавленные исходники

•  DeLiKaTeS Tetris (Тетрис)  4 187

•  TDictionary Custom Sort  6 240

•  Fast Watermark Sources  6 045

•  3D Designer  8 944

•  Sik Screen Capture  6 367

•  Patch Maker  6 790

•  Айболит (remote control)  6 771

•  ListBox Drag & Drop  5 648

•  Доска для игры Реверси  96 290

•  Графические эффекты  6 989

•  Рисование по маске  6 272

•  Перетаскивание изображений  5 165

•  Canvas Drawing  5 535

•  Рисование Луны  5 235

•  Поворот изображения  4 782

•  Рисование стержней  3 380

•  Paint on Shape  2 638

•  Генератор кроссвордов  3 524

•  Головоломка Paletto  2 813

•  Теорема Монжа об окружностях  3 625

•  Пазл Numbrix  2 369

•  Заборы и коммивояжеры  3 052

•  Игра HIP  2 008

•  Игра Go (Го)  1 931

•  Симулятор лифта  2 292

•  Программа укладки плитки  1 995

•  Генератор лабиринта  2 450

•  Проверка числового ввода  2 131

•  HEX View  2 465

•  Физический маятник  2 084

 
скрыть

  Форум  

Delphi FAQ - Часто задаваемые вопросы

| Базы данных | Графика и Игры | Интернет и Сети | Компоненты и Классы | Мультимедиа |
| ОС и Железо | Программа и Интерфейс | Рабочий стол | Синтаксис | Технологии | Файловая система |



Delphi Sources

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



Никогда не видели экранного вируса? Представьте, что Ваш экран заболел и покрылся красными пятнами :) А если эта болезнь нападёт на какое-нибудь окно ? Всё, что нам надо, это получить контекст устройства при помощи 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 © 2004-2025 "Delphi Sources" by BrokenByte Software. Delphi World FAQ

Группа ВКонтакте