StatusBar1.Panels[1].Text:=IntToStr(Word.Koord.X);
StatusBar1.Panels[2].Text:=IntToStr(Word.Koord.Y);
end;
end;
//Прорисовка линий
Word.Line;
Form1.StatusBar1.Panels[3].Text:='';
end;
Удаление:
Позволяет удалять уже созданный элемент класса TWord, с последующей новой отрисовкой стрелок
procedure TForm1.Delete_BClick(Sender: TObject);
var
Word:TWord;
Begin
//Разрушение выбранного элемента
Word:=ListBox1.Items.Objects[ListBox1.ItemIndex] as TWord;
Table.Cells[Word.Koord.X,Word.Koord.Y]:=true;
Word.Destroy;
ListBox1.Items.Delete(ListBox1.ItemIndex);
Red_A.Enabled:=false;
Del_A.Enabled:=false;
if ListBox1.Count=0 then
Sav_a.Enabled:=false;
//Отрисовка новых линий
if ListBox1.Count>0 then
Word.Line;
StatusBar1.Panels[0].Text:='';
StatusBar1.Panels[1].Text:='';
StatusBar1.Panels[2].Text:='';
//Полное очищение поверхности рисования при условии, что список пуст
if ListBox1.Count=0 then
begin
Table.Canvas.Pen.Color:=clwhite;
Table.Canvas.Brush.Color:=clwhite;
Table.Canvas.Rectangle(0,0,table.Size*100,table.Size*100);
end;
end;
Добавление:
Добавляет новый элемент в список букв и последующей отрисовкой стрелок
procedure TForm1.Add_BClick(Sender: TObject);
var
Word:TWord;
MasPoint:TPoint;
S:string;
begin
with Add_F do
begin
Form1.StatusBar1.Panels[3].Text:='Добавление элемента..';
X_E.Text:='';
Y_E.Text:='';
W_E.Text:='';
if ShowModal=mrOK then
//Проверка на пустоту клетки и создаие экземпляра класса Tword
if Table.Cells[StrToint(X_E.Text),StrToint(Y_E.Text)]=true then
begin
S:=W_E.Text;
MasPoint.X:=StrToInt(X_E.Text);
MasPoint.Y:=StrToInt(Y_E.Text);
Word:=TWord.Create(Table,S,MasPoint);
ListBox1.Items.AddObject(S+','+X_E.Text+','+Y_E.Text,Word);
Word.Show;
Table.Cells[StrToint(X_E.Text),StrToint(Y_E.Text)]:=false;
Sav_A.Enabled:=true;
end
else ShowMessage('Эти координаты заняты');
end;
Form1.StatusBar1.Panels[3].Text:='';
end;
Сохранение:
procedure TForm1.Sav_AExecute(Sender: TObject);
var
Word:TWord;
Data:TData;
i:integer;
f:file of TData;
begin
with SaveDialog1 do
begin
Form1.StatusBar1.Panels[3].Text:='Сохранение..';
FileName:='';
if Execute then
begin
//Перебор всех букв с дальнейшей их записью в файл
AssignFile(f,FileName);
Rewrite(f);
for i:=0 to ListBox1.Count-1 do
begin
Word:=ListBox1.Items.Objects[i] as TWord;
Data.S:=Word.S;
Data.Koord:=Word.Koord;
Write(f,Data);
end;
CloseFile(f);
end;
end;
Form1.StatusBar1.Panels[3].Text:='';
end;
Загрузка:
procedure TForm1.Open_AExecute(Sender: TObject);
var
f:file of TData;
Word:TWord;
i,j:integer;
Data:TData;
begin
with OpenDialog1 do
begin
Form1.StatusBar1.Panels[3].Text:='Открытие..';
FileName:='';
if Execute then
begin
//Присваивание свободы клеткам и очистка старой области рисования
for i:=1 to 100 do
for j:=1 to 100 do
Table.Cells[i,j]:=true;
Table.Canvas.Pen.Color:=clwhite;
Table.Canvas.Brush.Color:=clwhite;
Table.Canvas.Rectangle(0,0,table.Size*100,table.Size*100);
//Разрушение старого списка данных
for i:=ListBox1.Count-1 downto 0 do
begin
Word:=ListBox1.Items.Objects[i] as TWord;
ListBox1.Items.Delete(i);
Word.Free;
end;
//Открытие файла на чтение и загрузка данных
AssignFile(f,FileName);
Reset(f);
while not EoF(f) do
begin
Read(f,Data);
Word:=TWord.Create(Table,Data.S,Data.Koord);
ListBox1.Items.AddObject(Word.S+','+IntTostr(Word.Koord.X)+','
+IntTostr(Word.Koord.Y),Word);
Word.Show;
Table.Cells[Word.Koord.X,Word.Koord.Y]:=false;
end;
CloseFile(f);
Del_A.Enabled:= false;
Red_A.Enabled:= false;
Sav_A.Enabled:= false;
if ListBox1.Count>0 then
Sav_A.Enabled:= true;
StatusBar1.Panels[0].Text:='';
StatusBar1.Panels[1].Text:='';
StatusBar1.Panels[2].Text:='';
StatusBar1.Panels[3].Text:='';
end;
end;
Form1.StatusBar1.Panels[3].Text:='';
end;
Обоснования выбора визуальных компонентов:
Для текущего состояния программы и управления поведение воспользуемся следующими компонентами:
1. Класс компонента TListBox для отображения текущего списка светофоров и поездов, обеспечивающих также выбор данных объектов для удаления или редактирования. Это компонент удобен тем, что способен хранить не только строки, но и объекты.
2. Компонент TImage используется как поверхность графического отображения задачи. По сравнению с компонентами, так же имеющих поверхность рисования не требует описания полного отображения текущего состояния задачи, а самостоятельно сохраняет все изменения, вносимые входе программы.
3. Компонент TStatusBar позволяет визуально отображать данные, который необходимы для анализа текущего состояния задачи.
4. Компоненты TOpendialog и TSaveDialog облегчают сохранении и загрузку данных.
5. Компоненты TMeanMenu иTPopupMenu облегчают выбор действий, которые необходимо сделать в той или иной ситуации. В отличии от TToolBar не отвлекает от самой поставленной задачи.
6. Компонент TActionList позволяет описать действия только один раз и в дальнейшем использовать их. В отличии от процедур, компоненты активно работают с TActionList.
Структура диалогов:
Она приведена на рисунке. Диалоговые окна “Создания буквы” (1) и “ Изменения данных ” (2) являются физически двумя формами, но их поведение почти одинаково. При этом выбирается коордиаты буквы или изменяются данные о букве, соответственно; Ввод данных во всех диалоговых окнах заведомо ограничен предельными значениями.
При добавлении или редактировании буквы может возникнуть несколько видов диалоговых окон:
1. Не введена буква
2. Не введена координата X
3. Не введена координата Y
4. Неверно введена координата X
5. Неверно введена координата Y
6. Неверно введена буква
7. Kоордината X должна быть целым числом
8. Kоордината Y должна быть целым числом
9. Буква должна быть буквой
Инструкция по использованию программы:
В начальном состоянии программа отображает только пустую область отображения и пустой список букв. Для начала действий программы требуется создать буквы. Путем выбора следующих действий: Действия -> Добавить. В дальнейшем необходимо включить выбор координат: Файл ->Сохранение. Чтобы удалить букву необходимо выбрать из списка соответствующий элемент и выбрать в меню: Действие –> Удалить.
Изменить данные можно так: Действия -> Редактировать, но перед этим выбрав поезд из списка.
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.