
23.12.2012, 12:24
|
Прохожий
|
|
Регистрация: 18.02.2011
Сообщения: 38
Репутация: 156
|
|
Всем привет. Задачу выполнил. Вот само ее полное условие:
При нажатии кнопки "Пуск" одна точка диаметром 6 пикселей начинает двигаться вниз, а вторая - вверх. Расстояние между траекториями по горизонтали - 100 пикселей. Надо щелкнуть мышью по форме в момент минимального расстояния между точками. В окне должно выводиться расстояние между точками в момент щелчка по вертикали (+ точки не дошли, - перешли). Два радионабора задают скорости точек (10, 20, 30 пикселей/с). При щелчке кнопки останавливаются, а контекстным меню возвращаются в исходное состояние.
Вот сам код. Решил сделать через Shape:
Код:
unit Unit1;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.ExtCtrls, Vcl.Menus, Vcl.StdCtrls;
type
TForm1 = class(TForm)
Shape1: TShape;
MainMenu1: TMainMenu;
N1: TMenuItem;
N2: TMenuItem;
PopupMenu1: TPopupMenu;
N3: TMenuItem;
Shape2: TShape;
Timer1: TTimer;
Panel1: TPanel;
Button1: TButton;
Button2: TButton;
RadioGroup1: TRadioGroup;
procedure Timer1Timer(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure N3Click(Sender: TObject);
procedure FormClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
begin
timer1.Enabled:=True; // Включаем таймер
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
timer1.Enabled:=False; // Приостанавливаем таимер
end;
procedure TForm1.FormClick(Sender: TObject);
var a, b,c: integer;
begin
timer1.Enabled:=False; // Приостанавливаем таимер
a:=Shape1.Top; // Запонимаем, где в текущий момент располагается первая точка;
b:=Shape2.Top; // Запонимаем, где в текущий момент располагается вторая точка;
c:=b-a; // Определяем расстояние между двумя точками
//Если расстояние между точками - число положительное!!
if c>0 then
begin
messagedlg('Расстояние между точками равно '+IntToStr(c) + #13+'Точки не дошли(+)',mtInformation,[mbOk],0); //Выводим сообщение
end;
//Если расстояние между точками - число отрицательное!!
if c<0 then
begin
messagedlg('Расстояние между точками равно '+IntToStr(c)+#13+'Точки перешли(-)',mtInformation,[mbOk],0); //Выводим сообщение
end;
//Если расстояние между точками равно нулю!!
if c=0 then
begin
messagedlg('Расстояние между точками равно '+IntToStr(c)+#13+'Точки параллельны',mtInformation,[mbOk],0); //Выводим сообщение
end;
end;
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
application.Terminate; // Завершаем работу. Принудительно удаляем программу из памяти.
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
timer1.Enabled:=False; // Сделаем таймер неактивным
RadioGroup1.ItemIndex:=0; // При запуске формы по умолчанию скорость равна
end;
procedure TForm1.N3Click(Sender: TObject);
begin
timer1.Enabled:=False; // Сделаем таймер неактивным
shape1.Top:=237; // исходное состояние точки в момент запуска формы
shape2.Top:=237; // исходное состояние точки в момент запуска формы
end;
procedure TForm1.Timer1Timer(Sender: TObject);
begin
// Множественный выбор
case RadioGroup1.ItemIndex of
0: begin // Если выбрано 10 пикселей/c
Shape1.Top:=Shape1.Top+10;
Shape2.Top:=Shape2.Top-10;
end;
1: begin // Если выбрано 20 пикселей/c
Shape1.Top:=Shape1.Top+20 ;
Shape2.Top:=Shape2.Top-20;
end;
2: begin // Если выбрано 30 пикселей/c
Shape1.Top:=Shape1.Top+30 ;
Shape2.Top:=Shape2.Top-30;
end;
end;
//Анализируем первую точку, т.е Shape1
if shape1.Top>=474 then shape1.Top:=0; // т.е. если первая точка достигла нижней границы формы
// то перемещаем её в верхную границу формы и точка продолжает свое движение
//Анализируем вторую точку, т.е. Shape2
if shape2.Top<=0 then shape2.Top:=474 // т.е. если вторая точка достигла верхней границы формы
// то перемещаем ее в нижнюю границу формы и точка продолжает свое движение
end;
end.
Сам скомпилированный проект вместе с кодом загрузить не удается. Ошибку выдает!!
|