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

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

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

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 09.05.2012, 14:29   #1
Андрей19930323
Пользователь
 
Регистрация: 18.04.2012
Сообщений: 17
По умолчанию Заставка "Движение по тоннелю"

Ребята, я делаю по программмированию заставку "Движение по тоннелю" (Набор концентрических прямоугольников, которые расширяясь, пропадают за пределами экрана и появляются в самом маленьком размере (вдалеке) в центре экрана.
У меня не получается создать так, чтобы как только прямоугольник, достигнув края экрана, появлялся в центре. Помогите пожалуйста). Внизу мои наработки.

Код:
unit Unit1;

interface

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

type
   TForm1 = class(TForm)
   Timer1: TTimer;
   procedure Timer1Timer(Sender: TObject);
   procedure FormActivate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
   Form1: TForm1;
   x,dx: byte;

implementation

{$R *.dfm}

procedure Ris;
begin
   Form1.Canvas.Pen.Color:= Form1.Color;
   Form1.Canvas.Rectangle(round(259-1.78*x),149-x,round(1351+1.78*x),691+x);
   Form1.Canvas.Rectangle(round(379-1.78*x),209-x,round(1231+1.78*x),631+x);
   Form1.Canvas.Rectangle(round(479-1.78*x),259-x,round(1131+1.78*x),581+x);
   Form1.Canvas.Rectangle(round(559-1.78*x),299-x,round(1051+1.78*x),541+x);
   Form1.Canvas.Rectangle(round(619-1.78*x),329-x,round(991+1.78*x),511+x);
   x:= x + dx;
   Form1.Canvas.Pen.Color:=clBlack;
   Form1.Canvas.Rectangle(round(259-1.78*x),149-x,round(1351+1.78*x),691+x);
   Form1.Canvas.Rectangle(round(379-1.78*x),209-x,round(1231+1.78*x),631+x);
   Form1.Canvas.Rectangle(round(479-1.78*x),259-x,round(1131+1.78*x),581+x);
   Form1.Canvas.Rectangle(round(559-1.78*x),299-x,round(1051+1.78*x),541+x);
   Form1.Canvas.Rectangle(round(619-1.78*x),329-x,round(991+1.78*x),511+x);
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
   Ris;
end;

procedure TForm1.FormActivate(Sender: TObject);
begin
   dx:= 5;
   timer1.Interval:= 50;
   form1.Canvas.Brush.Color:= form1.Color;
end;

end.
Андрей19930323 вне форума Ответить с цитированием
Старый 09.05.2012, 14:58   #2
Rin
Негодник
Форумчанин
 
Аватар для Rin
 
Регистрация: 10.11.2009
Сообщений: 880
По умолчанию

Я делал зацикливанием. Как только только самый большой квадрат достигал конца экрана, то x сбрасывал в первоначальное положение.
Вложения
Тип файла: rar тоннель балавство.rar (12.0 Кб, 14 просмотров)
Если помог, проси поставить минус. Будь оригинален!

Последний раз редактировалось Rin; 09.05.2012 в 15:35. Причина: добавление сурса
Rin вне форума Ответить с цитированием
Старый 09.05.2012, 15:44   #3
Андрей19930323
Пользователь
 
Регистрация: 18.04.2012
Сообщений: 17
По умолчанию

Цитата:
Сообщение от Rin Посмотреть сообщение
Я делал зацикливанием. Как только только самый большой квадрат достигал конца экрана, то x сбрасывал в первоначальное положение.
мне попроще надо) у Вас очень навороченный тоннель.
можно как нибудь попроще?

Последний раз редактировалось Андрей19930323; 09.05.2012 в 16:03.
Андрей19930323 вне форума Ответить с цитированием
Старый 09.05.2012, 16:27   #4
Rin
Негодник
Форумчанин
 
Аватар для Rin
 
Регистрация: 10.11.2009
Сообщений: 880
По умолчанию

Ну раз так, то вот:
Код:
const n=26;
      ndiv2=13;
var
  Form1: TForm1;
  dx,nx,ny,x:integer;

procedure TForm1.FormCreate(Sender: TObject);
begin
nx:=round(clientwidth/n);
ny:=round(clientheight/n);
dx:=5;x:=0;
Canvas.Brush.Color:=form1.Color;
end;

procedure TForm1.FormPaint(Sender: TObject);
var i:byte;
begin
  for I := 1 to ndiv2 do
  begin
    Canvas.Pen.Color:=clBtnFace;
    Canvas.Rectangle(nx*i-x,ny*i-x,nx*(n-i)+x,ny*(n-i)+x);
  end;
  x:=x+dx;
  for I := 1 to ndiv2 do
  begin
    Canvas.Pen.Color:=clBlack;
    Canvas.Rectangle(nx*i-x,ny*i-x,nx*(n-i)+x,ny*(n-i)+x);
  end;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
var i:byte;
begin
  if (ny-x)<=0 then
  begin
    for I := 1 to ndiv2 do
    begin
      Canvas.Pen.Color:=clBtnFace;
      Canvas.Rectangle(nx*i-x,ny*i-x,nx*(n-i)+x,ny*(n-i)+x);
    end;
    x:=0;
  end;
  formpaint(nil);
end;
Если помог, проси поставить минус. Будь оригинален!
Rin вне форума Ответить с цитированием
Старый 09.05.2012, 16:34   #5
Андрей19930323
Пользователь
 
Регистрация: 18.04.2012
Сообщений: 17
По умолчанию

Цитата:
Сообщение от Rin Посмотреть сообщение
Ну раз так, то вот:
Код:
const n=26;
      ndiv2=13;
var
  Form1: TForm1;
  nx,ny:integer;
огромное спасибо за программу. объясните, пожалуйста, назначение объявленных констант и глобальных переменных.
Андрей19930323 вне форума Ответить с цитированием
Старый 09.05.2012, 16:46   #6
Rin
Негодник
Форумчанин
 
Аватар для Rin
 
Регистрация: 10.11.2009
Сообщений: 880
По умолчанию

n=26 - количество частей, на которое разбиваем размеры(то есть ширину и высоту) клиентской части формы;
ndiv2=13 - количество прямоугольников;
nx - величина одной части по ширине формы;
ny - величина одной части по высоте формы.
Чем больше прямоугольников(ndiv2) вы хотите, тем больше будет количество частей(n).
n=ndiv2*2;
Если помог, проси поставить минус. Будь оригинален!

Последний раз редактировалось Rin; 09.05.2012 в 16:51.
Rin вне форума Ответить с цитированием
Ответ


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

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

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Подсчитать количество букв "й", "ы" и "я", содержащихся в заданной строке. VoltZZZ Помощь студентам 2 01.03.2012 23:39
Вывести название соответствующей карты вида "шестерка бубен", "дама червей","туз треф" и т.п. воваава Помощь студентам 3 01.12.2011 12:50
Как обойти "преобразование типа из "string" в "float" невозможно" lexluter1988 Помощь студентам 1 07.08.2010 12:23
при вводе на листе "магазин"- код товара появлялось "описание" товара из "склада" с "продажной ценой" aleksei78 Microsoft Office Excel 13 25.08.2009 12:04