Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 19.05.2010, 12:13   #1
clubnace
Новичок
Джуниор
 
Регистрация: 16.03.2010
Сообщений: 1
По умолчанию по за просу пользователя

курсовик!
Задание: image делится по запросу пользователя;
картинку Выбирет пользователь( тобишь заместо Рабочего стола)
Скорость Позапросу пользователя
Цвет квадрата по запросу пользователя))

Код:
unit Mw;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  ExtCtrls, StdCtrls, Buttons;

type
  TForm1 = class(TForm)
    Timer1: TTimer;
    Image1: TImage;
    Button1: TButton;
    procedure FormCreate(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  DesktopBitmap   : TBitmap;
  gx, gy          : Integer;
  redRect         : TBitmap;
  rW, rH          : Integer;

const
  Delta=8;//число квадратов на которые будет разбито окно (должно быть 2*n)

implementation

{$R *.DFM}

procedure TForm1.FormCreate(Sender: TObject);

procedure InitScreen;
var
 i:integer;
begin
//получаем битмап десктопа
 DesktopBitmap:=TBitmap.Create;
 with DesktopBitmap do
  begin
   Width:=Screen.Width;
   Height:=Screen.Height;
  end;
 BitBlt(DesktopBitmap.Canvas.Handle,
                 0,0,Screen.Width,Screen.Height,
                            GetDC(GetDesktopWindow),0,0,SrcCopy);
 Form1.Image1.Picture.Bitmap:=DesktopBitmap;
 //изначальные координаты redRect
 Randomize;
 gx:=Trunc(Random*Delta);
 gy:=Trunc(Random*Delta);
 Form1.Image1.Canvas.CopyRect(
            Rect(rW*gx, rH*gy, rW*gx+rW, rH*gy+rH),
                                 redRect.Canvas, Rect(0,0,rW,rH));
 //рисуем сетку
 for i:=0 to DELTA-1 do
  begin
   Form1.Image1.Canvas.MoveTo(rW*i,0);
   Form1.Image1.Canvas.LineTo(rW*i,Screen.Height);
   Form1.Image1.Canvas.MoveTo(0, rH*i);
   Form1.Image1.Canvas.LineTo(Screen.Width, rH*i);
  end;
end;

begin
 ShowCursor(False);
 SystemParametersInfo(SPI_SCREENSAVERRUNNING,1,0,0); 
 //SystemParametersInfo(spi_ScreenSaverRunning,1,@Dummy,0);
 Button1.Cancel:=true;//выход на "Esc"
 //Panel1.Left:=Button1.Left-10;
 //Panel1.Top:=Button1.Top-10;
 rW:=Screen.Width div Delta;
 rH:=Screen.Height div Delta;
 redRect:=TBitmap.Create;
 with redRect do
  begin
   Width:=rW;
   Height:=rH;
   Canvas.Brush.Color:=clRed;
   Canvas.Brush.Style:=bssolid;
   Canvas.Rectangle(0,0,rW,rH);
   Canvas.Font.Color:=clNavy;
   Canvas.Font.Style:=Canvas.Font.Style+[fsBold];
   Canvas.TextOut(2,2,'About');
   Canvas.Font.Style:=Canvas.Font.Style-[fsBold];
   Canvas.TextOut(2,17,'Delphi');
   Canvas.TextOut(2,32,'Programming');
  end;
 Timer1.Enabled:=False;
 Image1.Align:=alClient;
 Visible:=False;
 BorderStyle:=bsNone;
 Top:=0;
 Left:=0;
 Width:=Screen.Width;
 Height:=Screen.Height;
 InitScreen;
 Visible:=True;
 Timer1.Interval:=10; // меньше-быстрее
 Timer1.Enabled:=True; // Запускаем вызов DrawScreen
end;

procedure TForm1.Timer1Timer(Sender: TObject);

procedure DrawScreen;
var
 r1,r2:TRect;
 Direction:integer;
begin
 r1:=Rect(rW*gx , rH*gy,  rW*gx+rW  , rH*gy+rH);
 Direction:=Trunc(Random*4);
  case Direction of
   0: gx:=Abs((gx+1) mod Delta);    //право
   1: gx:=Abs((gx-1) mod Delta);    //лево
   2: gy:=Abs((gy+1) mod Delta);    //низ
   3: gy:=Abs((gy-1) mod Delta);    //верх
  end; //case
 r2:=Rect(rW*gx , rH*gy,  rW*gx+rW  , rH*gy+rH);
 with Form1.Image1.Canvas do
  begin
   CopyRect(r1, Form1.Image1.Canvas, r2);
   CopyRect(r2, redRect.Canvas, redRect.Canvas.ClipRect);
  end;
end;

begin
 DrawScreen;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
 ShowCursor(True);
 Close;
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
 SystemParametersInfo(SPI_SCREENSAVERRUNNING,0,0,0);
end;

end.

Последний раз редактировалось Stilet; 19.05.2010 в 12:23.
clubnace вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Создание пользователя 4sense Общие вопросы Delphi 5 11.11.2009 20:04
Аутентификация пользователя didar_ Общие вопросы Delphi 18 10.11.2009 17:11
Идентификация пользователя Gorychev PHP 9 10.02.2009 08:56
Права пользователя Zloy_Doomer Операционные системы общие вопросы 5 18.12.2008 17:11
Удаление пользователя треч О форуме и сайтах клуба 4 26.05.2008 21:38