IPB
ЛогинПароль:

> ВНИМАНИЕ!

Прежде чем задать вопрос, смотрите FAQ.
Рекомендуем загрузить DRKB.

Наладить общение поможет, если вы подпишитесь по почте на новые темы в этом форуме.

 
 Ответить  Открыть новую тему 
> Движение квадрата, с изменением цвета
сообщение
Сообщение #1


Новичок
*

Группа: Пользователи
Сообщений: 21
Пол: Мужской

Репутация: -  0  +


Добрый день товарищи программисты.
Собственно задание вот такое : Отобразить квадрат , длина стороны которого задаётся пользователем , бегущим по экрану и на каждой четверти пути (длина экрана) меняющим свой цвет .

Код программы :


unit Unit1;



interface



uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, ExtCtrls, StdCtrls;



type

TForm1 = class(TForm)

Timer1: TTimer;
ListBox1: TListBox;
Edit1: TEdit;
Button1: TButton;


procedure Timer1Timer(Sender: TObject);
procedure Button1Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;



var

Form1: TForm1;

x, y , a: byte;

dx: byte;



implementation



{$R *.dfm}





procedure Ris;

begin


form1.ListBox1.Canvas.Pen.Color := form1.Color;
form1.ListBox1.Canvas.Rectangle(x,y,x+a,y+a);

x := x + dx;

form1.ListBox1.Canvas.Pen.Color := clBlack;
form1.ListBox1.Canvas.Rectangle(x,y,x+a,y+a);

end;



procedure TForm1.Timer1Timer(Sender: TObject);

begin

Ris;

end;



procedure TForm1.Button1Click(Sender: TObject);
begin
a:=strtoint(edit1.text);

x := 10;

y := 10;

dx := 10;

form1.Timer1.Interval := 50;

end;

end.



Ввод стороны знаю как делать , как он должен двигаться тоже представляю ... идея на счёт смены цвета вроде тоже есть (делим число пикселей формы на 4 части и следим в процессе перемещения квадрата за координатой икс , в какой она области , и меняем цвет карандаша ) , но сам квадрат двигаться не хочет nea.gif укажите , в чём ошибка wacko.gif использую Delphi 7
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Гость






blink.gif blink.gif
Цитата
Отобразить квадрат , длина стороны которого задаётся пользователем , бегущим по экрану
Ну ладно, фиг с ним, с пользователем, "бегущим по экрану". Ты лучше расскажи, зачем тебе
а) рисовать не сразу на форме, а на ListBox-е
б) пользоваться Canvas.Rectangle вместо того, чтоб просто взять TShape (есть он в D7, я даже в D6 им пользовался, насколько помню) и менять его позицию, и цвет, а не стирать/перерисовывать что-то?

Цитата
сам квадрат двигаться не хочет
Двигается он нормально, если у тебя Timer1.Enabled установлено в True...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Новичок
*

Группа: Пользователи
Сообщений: 21
Пол: Мужской

Репутация: -  0  +


a) в принципе значения не имеет ... так красивее по моему ))
б) учили только как Canvas юзать ... вот сделал с Shape'ом , но всё равно не движется ... timer1.enable:=true;

unit Unit1;



interface



uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, ExtCtrls, StdCtrls;



type

TForm1 = class(TForm)

Timer1: TTimer;
Edit1: TEdit;
Button1: TButton;
Shape1: TShape;


procedure Timer1Timer(Sender: TObject);
procedure Button1Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;



var

Form1: TForm1;

x, y , a: byte;

dx: byte;



implementation



{$R *.dfm}





procedure Ris;
begin
x:=10;
dx:=5;
x:=x+dx;
form1.Shape1.Left:=x;
end;

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

procedure TForm1.Button1Click(Sender: TObject);
begin
a:=strtoint(edit1.text);
timer1.Enabled:=true;
form1.Shape1.Height:=a;
form1.Shape1.Width:=a;
timer1.Interval:=50;
end;
end.


 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Гость






procedure TForm1.Button1Click(Sender: TObject);
begin
a:=strtoint(edit1.text);
timer1.Enabled:=true;
form1.Shape1.Height:=a;
form1.Shape1.Width:=a;
timer1.Interval:=50;

x:=10; // <--- Здесь, а не там, где ты делаешь !!!
dx:=5;
end;
, иначе ты каждый раз рисуешь на одном и том же месте.
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Новичок
*

Группа: Пользователи
Сообщений: 21
Пол: Мужской

Репутация: -  0  +


ой ... извиняюсь , в ивентах не поставил что будет обрабатываться при OnTimer smile.gif всё , забегал ) ... но бегает только до середины формы , дальше ни в какую ... не подскажите как заставить бегать до конца , а потом начинать сначало ?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


Гость






Цитата
бегает только до середины формы , дальше ни в какую
А емкости типа Byte на большее не хватает, только до 255, а потом опять с нуля. Во-первых:

x, y , a: integer; // вот это !!!
, во вторых - вот это:
procedure Ris;
begin
x:=x+dx;
if x + Form1.Shape1.Width >= Form1.Width then x := 10; // проверяем, не пора ли начать сначала
form1.Shape1.Left:=x;
end;
И вообще, внеси Ris в класс формы, оно тебе надо все время Form1 дописывать впереди?
 К началу страницы 
+ Ответить 
сообщение
Сообщение #7


Новичок
*

Группа: Пользователи
Сообщений: 21
Пол: Мужской

Репутация: -  0  +


Спс , разобрался ))
Тему можна закрыть.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 20.04.2024 14:29
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name