- •Методические указания к лабораторным работам по Delphi Содержание:
- •Назначение курса лабораторных работ
- •Плюсы и минусыDelphiпо сравнению с другими системами разработки
- •Основные проблемы, встречающиеся при написании программ наDelphi
- •Основные сведения о среде разработкиDelphi
- •Внешний вид среды Delphi
- •Работа с проектами
- •Полезные горячие клавиши
- •Порядок и сроки сдачи лабораторных работ поDelphi
- •Общие требования к выполнению лабораторных работ
- •Разработка первого приложения наDelphi
- •Требования к программе
- •Создание нового проекта и первый запуск
- •Добавление компонентов к форме
- •Установка свойств компонентов
- •Создание обработчиков событий
- •Создание обработчика для кнопки «Заполнить»
- •Interface
- •Создание обработчика для кнопки «Очистить»
- •Создание обработчика для кнопки «в заголовок»
- •Создание обработчика для кнопки «Выход»
- •Добавление к проекту диалогового окна «о программе»
- •Создание обработчика для кнопки «о программе»
- •Последние штрихи
- •Лабораторная работа № 1 – программа "Сотрудники"
- •Требования к лабораторной работе № 1:
- •Методические указания к лабораторной работе № 1:
- •Лабораторная работа № 2 – программа "Картотека предприятия"
- •Требования к лабораторной работе № 2:
- •Методические указания к лабораторной работе № 2:
- •Лабораторная работа № 3 – программа "Магазин cd-дисков"
- •Требования к лабораторной работе № 3:
- •Методические указания к лабораторной работе № 3:
Лабораторная работа № 2 – программа "Картотека предприятия"
Образец: task2.exe + файлpersons.txt
Программа должна реализовывать следующие функции:
Загрузка информации о сотрудниках предприятия из файла при запуске программы.
Отображение иерархической структуры предприятия в виде древовидного списка.
Отображение полной информации о сотруднике при выборе конкретного элемента (должности) в древовидном списке.
Редактирование любой информации о сотруднике.
Отображение текущей информации о сотруднике в статусной строке.
Сохранение информации о сотрудниках предприятия в файле при завершении работы программы.
Требования к лабораторной работе № 2:
При старте программы информация о сотрудниках должна загружаться из некоторого файла (в примере он называется “persons.txt”), а при выходе – сохраняться в нем. Если файл отсутствует, то при старте программа должна создавать его и заполнять данными по умолчанию.
Главное окно программы должно содержать две закладки: «Предприятие» и «Человек». При запуске программа всегда должна открываться на закладке «Предприятие», при этом иерархический список подразделений должен быть полностью раскрыт и в нем должен быть выбран (подсвечен) пункт «Директор».
У каждого элемента древовидного списка должна быть своя собственная иконка размером 16х16 пикселов.
При щелчке мышью на любом элементе древовидного списка информация об этом человеке должна переноситься в поля на закладку «Человек» и в статусную строку.
При изменении любой информации на закладке «Человек» изменения должны сразу же отображаться в статусной строке.
Неправильный ввод данных в поле «Год рождения» должен корректно обрабатываться.
Поле «Телефон» должно иметь маску ввода (для этого вместо компонента Edit надо использовать компонент MaskEdit).
Поля «Образование» и «Специальность» должны представлять собой 2 различных варианта выпадающего списка: с возможностью редактирования и без.
Для поля «Лояльность» свойства должны быть установлены таким образом, чтобы при нажатии клавиш Up/Down значение менялось на единицу, а при нажатии клавиш PgUp/PgDown – на 10.
Переход между различными элементами управления по клавише Tab на закладке «Человек» должен осуществляться последовательно, а не хаотично.
Методические указания к лабораторной работе № 2:
Работа с компонентом PageControl. КомпонентPageControl представляет собой контейнер, внутри которого содержатся сами закладки (экземпляры классаTabSheet).
Для добавления новой закладки к компоненту PageControlщелкните по нему правой кнопкой мыши и выберите командуNew Page. При этом внутриPageControl создается компонент TabSheet, который содержит собственный набор свойств (в частности свойствоCaption для изменения названия закладки).Повторите операцию столько раз, сколько закладок вам необходимо.
Для изменения текущей активной закладки в процессе выполения программы присвойте нужное значение свойству PageControl.ActivePage.
Работа с компонентом TreeView.
Для добавления/редактирования элементов в TreeView используйте встроенный редактор (вызывается двойным щелчком мыши поTreeView).
Для подключения картинок к элементам TreeView выполните следующие шаги:
добавьте к форме компонент ImageList (список изображений) с закладкиWin32;
загрузите в компонент ImageList нужное количество картинок размером 16х16 пикселов при помощи встроенного редактора (вызывается двойным щелчком мыши поImageList).
установите свойство TreeView.Images = имя вашегоImageList;
вызовите встроенный редактор элементов TreeView и для каждого элемента дерева назначьте свойствамImageIndex и SelectedIndex значения индексов картинок из ImageList (счет начинается с 0, значение –1 означает, что у данного элемента картинка отсутсвует). Обычно, значенияImageIndex и SelectedIndex для одного элемента выбирают одинаковыми, если только вы не хотите, чтобы картинка у выбранного элемента отличалась от картинки невыбранного.
Чтобы получить уникальный индекс текущего выбраннного элемента дерева, используйте свойство TreeView.Selected.AbsoluteIndex. TreeView.Selected представляет собой текущий выбранный узелдерева, аAbsoluteIndex – порядковый номер этого узла в дереве.
Чтобы выбранный элемент в TreeView оставался подсвеченным даже когда компонент теряет фокус ввода, установите свойствоHideSelection = False.
Чтобы полностью раскрыть все пункты дерева (например, при старте программы), используйте процедуру TreeView.FullExpand.
Работа с компонентом StatusBar.
Для добавления/редактирования секций (панелек) у StatusBar используйте встроенный редактор (для этого найдите в Инспекторе объектов свойствоPanels и нажмите[…]). Каждая секция имеет свой набор свойств, наиболее полезными среди которых являются Text иWidth.
Для изменения нужной секции в процессе выполнения программы полезно запомнить, что свойство Panelsпредставляет собоймассив панелек, так что к любой панельке можно обратиться по ее порядковому номеру (счет начинается с 0). Например, чтобы изменить надпись у 4 панельки, пишем:StatusBar.Panels[3].Text := ‘Файл изменен’.
Создание массива записей для хранения разнородной информации о сотрудниках. Объявление записи («структуры» в терминологии языка С) в языке Pascal имеет следующий вид:
type
typename = record
field1: type1;
field2: type2;
...
end;
где typename – имя нового типа (записи),
field1, field2 – название компонентов (полей) этой записи,
type1, type2 – типы указанных полей.
Например, следующая простая запись из трех полей описывает человека:
type
TPerson = record
FIO: string[30]; // ФИО человека
BirthYear: integer; // Год рождения
Sex: boolean; // Пол (True – мужской, False – женский)
end;
Замечание: поля записи не могут принадлежать типам данных с неопределенным размером объекта (например, они не могут быть типаstring, который допускает хранение строк произвольной длины). Поэтому, в данном случае мы используем форму записи строки с явным указанием ее максимального размера.
После объявления типа записи можно создавать объекты указанного типа, например, переменные или массивы объектов:
var
SelectedPerson: TPerson;
Persons: array [1..5] of TPerson;
Значения массива можно при объявлении инициализировать списком значений:
var
Person: array [1..2] of TPerson = (
(FIO: ‘Иванов С. С.’; BirthYear: 1970; Sex: True),
(FIO: ‘Петрова М. И.’; BirthYear: 1975; Sex: False));
Работа с файлами. Для работы с файлами в Delphi существует 3 способа:
классические процедуры языка Pascal (Assign, Read, Write);
функции Windows (FileOpen, FileRead, FileWrite);
объектно-ориентированный подход на основе класса TFileStream.
В данном случае наиболее простым является использование стандартных процедур языка Pascal, так как в нем есть средства для работы непосредственно с записями. Второй же и третий способ ориентированы прежде всего на работу с байтами и блоками.
Для того, чтобы записать в файл 2 переменные типа запись, необходимо выполнить следующую последовательность действий:
var
F: file of TPerson; // Создать файловую переменную типа запись
Man1, Man2: TPerson;
AssignFile (F, ‘fname’); // Связатьфайловую переменную с именем файла
Rewrite (F); // Открыть файл длязаписи
Write (F, Man1, Man2); // Записать вфайл 2 записи
CloseFile (F); // Закрыть файл
Для того, чтобы прочитать записи из файла в переменные, поступаем аналогично, только вместо процедуры Rewrite(F)используемReset(F), а вместоWrite(F,...) используемRead(F,...). Естественно, что при чтении/записи в файл вместо простых элементов можно использовать элементы массива.
Прочие полезные советы:
Чтобы выполнить начальные инициализирующие действия при старте программы, когда еще ни одно окно не отображается на экране, воспользуйтесь событием OnCreate у главной формы. Аналогично, воспользуйтесь событиямиOnClose илиOnDestroy, чтобы выполнить определенные действия при завершениии программы.
Для хранения информации в полях «Образование», «Специальность», «Семейное положение» лучше воспользоваться не конкретными строковыми значениями, а соответствующими им числовыми индексами. Если в последствии какие-то из строк будут изменены, это никак не скажется на работе самой программы.
Для создания радиогруппы для поля «Семейное положение» удобнее воспользоваться компонентом RadioGroup, а не создавать четыре отдельных компонентаRadioButton.
Об изменении значения некоторых полей (Edit, Memo, ComboBox, TrackBar) можно узнать, перехватив для них событиеOnChange. Для других полей(CheckBox, RadioGroup, TreeView) то же самое можно узнать, перехватив событиеOnClick.
Чтобы вывод сведений о человеке в компоненте Memo получился «ровным», используйте для вывода текста моноширинный шрифт, например Courier New.
Чтобы в программе удобнее было выводить вперемежку строки, числа и данные других типов, можно воспользоваться функцией Format() – аналогом функции printf() в языке C. Например: TotalsLabel.Caption := Format (‘Количество =%d, Сумма= %d’, [Count, Sum]);
Чтобы изменить порядок перехода между различными элементами управления по клавише Tab, выберите команду меню Edit | Tab Order и переупорядочите элементы управления в нужном порядке.