Форум по программированию Delphi Sources

 



Вернуться   Форум по программированию Delphi Sources > Все о Delphi > Графика и игры
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 28.05.2017, 19:40
scorpiX scorpiX вне форума
Прохожий
 
Регистрация: 28.05.2017
Сообщения: 1
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию Хранитель экрана

Доброго всем дня, прогеры) В коде, который я привел ниже не увеличивается значение переменной kolvo(стоит на нуле) и я вообще не понимаю почему( Буду рад, если поможете разобраться, заранее всем спасибо)
Код:
unit Scrn;

interface

uses

  SysUtils, WinTypes, WinProcs, Messages, Classes, Graphics, Controls,
  Forms, Dialogs, ExtCtrls, UnitList;

type

  TScrnFrm = class(TForm)
    tmrTick: TTimer;
    procedure tmrTickTimer(Sender: TObject);
    procedure FormShow(Sender: TObject);
    procedure FormHide(Sender: TObject);
    procedure FormActivate(Sender: TObject);
  private
    { Private declarations }
    procedure DrawVolna(x, y, size: integer; color: TColor);
    procedure DeactivateScrnSaver(var Msg: TMsg; var Handled: boolean);
    
  public
    { Public declarations }
  end;

var

  ScrnFrm: TScrnFrm;
   i:cardinal;
implementation

{$R *.DFM}

uses

  Cfg;

var
  crs: TPoint; {Îðèãèíàëüíàÿ ïîçèöèÿ êóðñîðà ìûøè.}
  kolvo: Cardinal;
  
function Min(a, b: integer): integer;
begin
  if b < a then
    Result := b
  else
    Result := a;
end; {Min}

procedure TScrnFrm.DrawVolna(x, y, size: integer; color: TColor);
var
  i, radius: cardinal;
  //cx, cy: integer;
  //xy1, xy2: integer;
  //r, g, b: byte;
begin
  with Canvas do
  begin
    {Ïàðàìåòðû êàðàíäàøà è êèñòè.}
    Pen.Style := psClear;
    Brush.Style := bsSolid;
    Brush.Color := color;
    {Ðèñóþ êðóãè.}
   radius := size div 16;
    {for i := 0 to 2 do
    begin
      xy1 := (2 * dw) div 2;
      xy2 := size - xy1;
      Brush.Color := RGB(0, Min(g + (i * 8), 255), Min(b + (i * 8), 255));
      Ellipse(x + xy1, y + xy1, x + xy2, y + xy2);
    end;  }


  end;
end; {TScrnFrm.DrawVolna}

procedure TScrnFrm.DeactivateScrnSaver(var Msg: TMsg; var Handled: boolean);
var
  done: boolean;
begin
  if Msg.message = WM_MOUSEMOVE then
    done := (Abs(LOWORD(Msg.lParam) - crs.x) > 5) or
      (Abs(HIWORD(Msg.lParam) - crs.y) > 5)
  else
    done := (Msg.message = WM_KEYDOWN) or (Msg.message = WM_KEYUP) or
      (Msg.message = WM_SYSKEYDOWN) or (Msg.message = WM_SYSKEYUP) or
      (Msg.message = WM_ACTIVATE) or (Msg.message = WM_NCACTIVATE) or
      (Msg.message = WM_ACTIVATEAPP) or (Msg.message = WM_LBUTTONDOWN) or
      (Msg.message = WM_RBUTTONDOWN) or (Msg.message = WM_MBUTTONDOWN);
  if done then
    Close;
end; {TScrnFrm.DeactivateScrnSaver}

function GetItem (x, y:cardinal): TItem;
begin
  result.scr.x:= x;
  result.scr.y:= y;
  result.scr.razmer:=15;
  //result.scr.max_razmer:= size div 5;
end;

procedure TScrnFrm.tmrTickTimer(Sender: TObject);
var
  x, y: integer;
  size: integer;
  r, g, b: byte;
  color: TColor;
begin
  {if sphcount >= CfgFrm.spnVolna.Value then
  begin
    Refresh;
    //sphcount:=0;
  end;}
  x := Random(ClientWidth);
  y := Random(ClientHeight);
  size := CfgFrm.spnSize.Value;
  x := x - size mod 2;
  y := y - size mod 2;
  r := Random($80);
  g := Random($80);
  b := Random($80);
  if not IsEmpty(list) then
  begin
   //ShowMessage('Ñïèñîê íå ïóñò!');
    while List<>nil do  // ïåðåáèðàåì âñå ýëåìåíòû ñïèñêà
    begin
      if (list.item.scr.razmer=5) then
      begin
        list.item.scr.x:= x;
        list.item.scr.y:= y;
        list.item.scr.razmer:=15;
        //ShowMessage('Ýëåìåíò îáíîâèëñÿ');
        //list.item.scr.max_razmer:= size div 5;
      end
      else
      begin
        list.item.scr.razmer:=list.item.scr.razmer-1;
         //ShowMessage('Ðàçìåð óìåíüøåí');
      end;
      List:=List^.Next; // ïåðåõîä ê ñëäóþùåìó ýëåìåíòó ñïèñêà
    end;
  end;
  ShowMessage(inttostr(kolvo));
  //ShowMessage(inttostr(CfgFrm.spnVolna.Value));
  if IsEmpty(list) or (kolvo < CfgFrm.spnVolna.Value) then //Åñëè ñïèñîê ïóñò èëè êîë-âî êàïåëü íà ýêðàíå ìåíüøå, ÷åì ìàêñèìàëüíî âîçìîæíîå ÷èñëî êàïåëü
    begin
      kolvo:=kolvo+1;
      //ShowMessage(inttostr(kolvo));
      AddToFirst (list, GetItem(x, y));
      //ShowMessage('Äîáàâëåí íîâûé ýëåìåíò');
    end;
  DrawVolna(x, y, size, RGB(r, g, b));
end; {TScrnFrm.tmrTickTimer}

procedure TScrnFrm.FormShow(Sender: TObject);
begin
  //kolvo:=0;
  i:=0;
  GetCursorPos(crs);
  tmrTick.Interval := 1000 - CfgFrm.spnSpeed.Value * 90;
  tmrTick.Enabled := true;
  Application.OnMessage := DeactivateScrnSaver;
  ShowCursor(false);
end; {TScrnFrm.FormShow}

procedure TScrnFrm.FormHide(Sender: TObject);
begin
  Application.OnMessage := nil;
  tmrTick.Enabled := false;
  ShowCursor(true);
end; {TScrnFrm.FormHide}
procedure TScrnFrm.FormActivate(Sender: TObject);
begin
  WindowState := wsMaximized;
end; {TScrnFrm.FormActivate}
end.
Ответить с цитированием
Ответ



Delphi XE8

Embarcadero® Delphi XE8 — это самое быстрое решение для разработки программного обеспечения, ускоряющее проектирование, программирование и создание взаимодействующих приложений для Windows, Mac, iOS, Android и IoT. Создавайте готовые решения корпоративного класса, включая в него разные клиентские native-платформы, мобильные расширения, интеллектуальные устройства, облачные службы, корпоративные и встроенные базы данных.


Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 15:51.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources", 2004-2018

ВКонтакте   Facebook   Twitter