Тема: 2 точки
Показать сообщение отдельно
  #10  
Старый 23.12.2012, 12:24
StudentMarat StudentMarat вне форума
Прохожий
 
Регистрация: 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.

Сам скомпилированный проект вместе с кодом загрузить не удается. Ошибку выдает!!
Ответить с цитированием