Применение средств графического отображения для организации непрерывного движения поездов с непрерывным переключением светофора по кольцевой железной дороге, страница 6

 end ;

end ;

Обоснования выбора визуальных компонентов:

Для текущего состояния программы и управления поведение воспользуемся следующими компонентами:

*  Класс компонента TListBox для отображения текущего списка светофоров и поездов, обеспечивающих также выбор данных объектов для удаления или редактирования. Это компонент удобен тем, что способен хранить не только строки, но и объекты.

*  Компонент TImage используется как поверхность графического отображения задачи. По сравнению с компонентами, так же имеющих поверхность рисования не требует описания полного отображения текущего состояния задачи, а самостоятельно сохраняет все изменения, вносимые входе программы.

*  Компонент TStatusBar позволяет визуально отображать данные, который необходимы для анализа текущего состояния задачи.

*  Компонент TGroupBox позволят выделить некоторую часть интерфейса. В отличии от TPanel, в  TGroupBox имеется Caption.

*  Компонент TBeve позволяет визуально выделить нужную часть программы, для более понятного обращения.

*  Компоненты TOpendialog и TSaveDialog облегчают сохранении и загрузку данных.

*  Компоненты TMeanMenu иTPopupMenu облегчают выбор действий, которые необходимо сделать в той или иной ситуации.  В отличии от TToolBar не отвлекает от самой поставленной задачи.

*  Компонент TActionList позволяет описать действия только один раз и в дальнейшем использовать их. В отличии от процедур, компоненты активно работают с TActionList.

*  Компонент TTimer позволяет осуществить движение и изменение объектов через определенный интервал времени.

Структура диалогов:

Она приведена на рис.1.  Диалоговые окна “Создания дороги”  (1) и “ Изменения скорости поезда ” (2)  являются физически одной формой, поэтому их поведение одинаково. При этом выбирается радиус дороги или изменяется скорость поезда, соответственно; “Добавление поезда” (3), в нем выбирается скорость и цвет поезда. Для установки цвета используется стандартный диалог выбора цвета(4). Вод данных во всех диалоговых окнах заведомо ограничен предельными значениями.

При добавлении поезда или светофора может возникнуть несколько видов диалоговых окон:

*  “Карта не создана.”(5);

*  “Не выбран координаты для создания светофора.”(6);

*  “Не выбран координаты для создания поезда.”(7);

*  “Слишком близко к соседнему светофору.”(8);

*  “На данной дороге нет светофоров.”(9);

*  “Перед данным светофором уже есть поезд.” (10);

*  “Светофор для удаления не выбран.”(11);

*  “Поезд для удаления не выбран. (12);

“Созданиядороги” (1)

procedure TMain.ANewExecute(Sender: TObject);

begin

 Timer1.Enabled:= false ;

 with fPSDialog do

 begin

  Caption:= 'Создание дороги.' ;

  Label1.Caption:= 'Радиус дороги:' ;

  with fPSDialog.SpinEdit1 do

  begin

{Подготовка диалога к работе(задание первоначальных данных)}

   MaxLength:= 3 ;

   MaxValue:= VMaxR ;

   MinValue:= CMinR ;

   Value:= 135 ;

  end ;

  if ShowModal = mrOk then

  begin

{Очистка холста}

   PoleDeleteObject ;

   Radius:= SpinEdit1.Value ;

   VObnulirovanie ;

   ConstInitialization ;

   GoNewPoleImg ;

   with StatusBar1 do

   begin

    Panels[0].Text:= '*.svtr' ;

    Panels[1].Text:= ' Радиус дороги:  ' + IntToStr(Radius) ;

    Panels[2].Text:= ' Кол-во светофоров:  0' ;

    Panels[3].Text:= ' Кол-во поездов:  0' ;

   end ;

   NewPoleBool:= true ;

  end ;

 end ;

end;

Добавлениесветофора” (3)

procedure TMain.AAddTrainExecute(Sender: TObject);

begin

 Timer1.Enabled:= false ;

 try

  if not NewPoleBool then

   Raise Exception.Create(' Карта не создана.') ;

  if CountSvetofor = 0 then

   Raise Exception.Create(' На данной дороге нет светофоров.') ;

  if not PoleNavBool then

  begin

   PoleNavBool:= true ;

   Raise Exception.Create(' Не выбран координаты для создания поезда.') ;

  end ;

{Подготовка диалога к работе(задание первоначальных данных)}

  with fNewTrainDialog.SpinEdit1 do

  begin

   MaxLength:= 2 ;

   MinValue:= 1 ;

   MaxValue:= CMaxSpeed - 1 ;

   Value:= 40 ;

  end ;

{Есть ли на этом участке поезд}

  if AddTrainBool(aPoleNav) then

  begin

   if fNewTrainDialog.ShowModal = mrOk then

    AddTrain(aPoleNav,CMaxSpeed - fNewTrainDialog.SpinEdit1.Value,fNewTrainDialog.ColorDialog1.Color)

  end

   else

    Raise Exception.Create('Перед данным светофором уже есть поезд.') ;

  StatusBar1.Panels[4].Text:= '' ;

 except

  on E: Exception do

   MessageDlg(E.Message,mtError,[mbOK],0) ;

 end ;

 Timer1.Enabled:= true  ;

end;

Инструкция по использованию программы:

В начальном состоянии программа отображает только пустую область отображения и два пустых списка светофоров и поездов. Для начала активных действий программы требуется создать дорогу. Путем выбора следующих действий: Файл -> Создать.  В дальнейшем необходимо включить выбор координат:  Правка ->Вкл./ выкл.  выбор координат. Следующим шагом нужно добавить светофоры: Правка -> Добавить светофор, а добавление поездов происходит аналогичным образом. Чтобы удалить светофор или поезд необходимо выбрать из списка соответствующий элемент и выбрать в меню: Правка > Удалить […].

Изменить скорость поезда можно так: Правка -> Изменить скорость поезда, но перед эти выбрав поезд из списка.


Овал: 4Овал: 5Овал: 3Овал: 2Овал: 12Овал: 11Овал: 9Овал: 7                                                          

Овал: 6
Овал: 10


Рис1. Структура диалогов программы.