- •В телекоммуникациях ” Преподаватель: доцент кафедры прикладной математики и кибернетики
- •Цель курса– ознакомление с общими принципами визуального программирования на примере системы Delphi.
- •Пример оформления контрольной работы. Вариант 12
- •1.1Структура программы 7
- •Рабочая программа курса
- •Основные конструкции языка Паскаль
- •Структура программы
- •Операторы языка Паскаль
- •Процедуры и функции
- •Объектно-ориентированная методология
- •Различные технологии программирования
- •Принципы объектно-ориентированного программирования
- •Модули и классы
- •Знакомство со средой программирования Delphi
- •Структура среды программирования
- •Проект Delphi
- •Главное меню среды
- •Первое приложение на Delphi
- •Контрольные вопросы
- •Библиотека визуальных компонентов (vcl)
- •Иерархия базовых классов vcl
- •Типы свойств компонентов. Изменение свойств
- •Некоторые общие свойства компонентов
- •События в Delphi
- •Некоторые общие события компонентов
- •Контрольные вопросы
- •Класс tForm
- •Роль формы в приложении
- •Свойства класса tForm
- •События формы
- •Пример использования событий формы
- •Контрольные вопросы
- •Графические возможности визуальных компонентов
- •Свойства класса tCanvas
- •Методы класса tCanvas
- •Примеры использования свойств и методов класса tCanvas
- •Использование визуальных компонентов
- •Редактируемые компоненты
- •Списки выбора
- •Диалоговые компоненты
- •Переключатели
- •Контрольные вопросы
- •Лабораторная работа 1
- •Лабораторная работа 2
- •Лабораторная работа 3
- •Лабораторная работа 4
- •Лабораторная работа 5
- •Контрольная работа правила выполнения и оформления контрольной работы
- •Правила получения зачета
- •Литература
Диалоговые компоненты
Существует множество различных ситуаций, когда пользователю необходимо сделать некий выбор, например, выбрать имя файла для записи или для открытия. Для этой цели служат диалоговые компоненты, которые обеспечивают создание и показ диалоговых окон во время работы приложения. Диалоговые компоненты сосредоточены на закладке Dialogs на Палитре компонентов.
Рассмотрим компоненты TSaveDialog и TOpenDialog. Эти компоненты имеют идентичные свойства и поэтому рассматриваются вместе. Пример окна, которое реализует компонент TOpenDialog показан на рисунке.
Таблица 22 Свойства TSaveDialogиTOpenDialog
FileName |
Содержит маршрут поиска и выбранный файл при успешном завершении диалога |
Filter |
Используется для фильтрации (отбора) файлов, показываемых в диалоговом окне. |
InitialDir |
Содержит имя начального каталога |
DefaultExt |
С помощью свойства DefaultExt формируется полное имя файла, если при ручном вводе пользователь не указал расширение. В этом случае к имени файла прибавляется разделительная точка и содержимое этого свойства. |
Title |
Содержит заголовок диалогового окна |
Программа может использовать это свойство FileName для доступа к файлу с целью читать из него данные (TOpenDialog) или записывать в него (TSaveDialog), при этом пользователь может ввести произвольное имя и, следовательно, указать несуществующий файл. Для записи это не имеет значения, но при чтении отсутствие файла может привести к краху программы. Чтобы избежать этого, можно проверить существование файла глобальной функцией FileExists.
Свойство Filter можно устанавливать с помощью специального редактора на этапе конструирования формы или программно. Для доступа к редактору достаточно щелкнуть по кнопке в строке Filter окна Инспектора объектов. При программном вводе фильтры задаются одной длинной строкой, в которой символы “|” служат для разделения фильтров друг от друга, а также для разделения описания фильтруемых файлов от соответствующей маски выбора. Например, оператор
OpenDialog1.Filter := 'Текстовые файлы|*.txt| Файлы Паскаля|*.раs';
задает две маски для отбора файлов с расширениями раs и TXT.
Главным методом компонентов TSaveDialog и TOpenDialog является функция Execute, которая показывает окно диалога и возвращает значение True, если диалог успешно завершен, т.е. пользователь ввел подходящее имя файла и нажал кнопку Сохранить/ Открыть. В противном случае, функция Execute возвращает значение False.
В диалоговом окне для ручного ввода имени файла предусмотрен элемент TEdit, который при желании можно заменить на TCоmbовох. Для этого необходимо свойству FileEditStyle придать значение fsComboBox вместо умалчиваемого fsEdit. Если выбран комбинированный список, с ним можно связать протокол выбора имен. Для этого используется свойство HistoryList, содержимое которого будет появляться в выпадающем списке. Этот список не пополняется автоматически, поэтому за его содержимым должна следить программа. Например:
if OpenDialog1.Execute then
begin
HistoryList.Add(OpenDialog1.FileName);
end;
Настройка диалога может варьироваться с помощью сложного свойства Options. Логические подсвойства этого свойства имеют следующий смысл.
Таблица 23 Значения свойства Options
ofReadOnly |
Устанавливает переключатель Только для чтения |
ofOverwritePrompt |
Требует согласия пользователя при записи в существующий файл |
ofHideReadOnly |
Прячет переключатель Только для чтения |
оfNoChangeDir |
Запрещает смену каталога |
ofShowHelp |
Включает в окно кнопку Help |
ofNoValidate |
Запрещает автоматическую проверку правильности набираемых в имени файла символов |
оfAllowMultiSelect |
Разрешает множественный выбор файлов |
ofExtensionDifferent |
При завершении диалога наличие этого значения в свойстве Оptions говорит о том, что пользователь ввел расширение, отличающееся от умалчиваемого |
ofPathMustExist |
Разрешает указывать файлы только из существующих каталогов |
ofFileMustExist |
Разрешает указывать только существующие файлы |
ofCreatePrompt |
Требует подтверждения для создания несуществующего файла |
ofShareAware |
Разрешает выбирать файлы, используемые другими параллельно выполняемыми программами |
оfNoReadOnlyReturn |
Запрещает выбор файлов, имеющих атрибут Только для чтения |
ofNoTestFileCreate |
Запрещает проверку доступности сетевого или локального диска |
оfNoNetworkButton |
Запрещает вставку кнопки для создания сетевого диска |
ofNoLongNames |
Запрещает использование длинных имен файлов |
ofOldStyleDialog |
Создает диалог в стиле Windows 3-х |
Приведем пример обработчика нажатия пункта Open главного меню формы. При этом файл с выбранным именем (с помощью диалога TOpenDialog) загружается в многострочный редактор TMemo.
procedure TForm1.Open1Click(Sender: TObject);
begin
If OpenDialog1.Execute then
If FileExists(OpenDialog1.FileName)
then
Memo1.Lines.LoadFromFile(
OpenDialog1.FileName)
end;
Таблица строк
Компонент TStringGrid (закладка Additional) предназначен для создания таблиц, в ячейках которых располагаются произвольные текстовые строки. Таблица делится на две части – фиксированную и рабочую. Фиксированная часть служит для показа заголовков столбцов/рядов и для ручного управления их размерами. Обычно фиксированная часть занимает крайний левый столбец и самый верхний ряд таблицы, однако с помощью свойств FixedCols и FixedRows можно задать другое количество фиксированных столбцов и рядов (если эти свойства имеют 0, таблица не содержит фиксированной зоны). Рабочая часть – это остальная часть таблицы. Она может содержать произвольное количество столбцов и рядов, более того, эти величины могут изменяться программно. Рабочая часть может не умещаться целиком в пределах окна компонента, в этом случае в него автоматически помещаются нужные полосы прокрутки. При прокрутке рабочей области фиксированная область не исчезает, но меняется ее содержимое – заголовки строк и рядов.
Центральным свойством компонента является Cells – двухмерный массив ячеек строкового типа, каждая из которых может содержать произвольный текст. Конкретная ячейка определяется парой чисел – номером столбца и номером ряда, на пересечении которых она находится (нумерация начинается с нуля). Количество ячеек по каждому измерению хранит пара свойств ColСount (количество столбцов) и RowCount (количество рядов). Значения-этих свойств и, следовательно, размеры таблицы могут меняться как на этапе разработки программы, так и в ходе ее работы, однако их значения должны быть как минимум на единицу больше соответственно значений в свойства FixedCols и FixedRows, определяющих размеры фиксированной зоны.
Таблица 24Свойства компонента TStringGrid
BorderStyle |
Определяет рамку компонента: bsNone – нет рамки; bsSingle – рамка толщиной 1 пиксель |
Cells[ACol, ARow] |
Определяет содержимое ячейки с табличными координатами (ACol, ARow) |
Col |
Содержит номер столбца сфокусированной ячейки |
ColCount |
Содержит количество столбцов таблицы |
Cols[Index: Integer] |
Содержит все строки колонки с индексом Index |
ColWidths[Index: Longint] |
Содержит ширину столбца с индексом Index |
EditorMode |
Логическое свойство, которое разрешает/запрещает редактирование ячеек. Игнорируется, если свойство Options включает goAlwayseShowEditor или не включает goEditing |
FixedColor |
Определяет цвет фиксированной зоны |
FixedCols |
Определяет количество столбцов фиксированной зоны |
FixedRows |
Определяет количество рядов фиксированной зоны |
GridHeight |
Содержит высоту таблицы |
GridWidth |
Содержит ширину таблицы |
Options |
Содержит параметры таблицы |
Row |
Содержит номер ряда сфокусированной ячейки |
RowCount |
Содержит количество рядов таблицы |
Rows[Index: Integer] |
Содержит все строки ряда с индексом Index |
ScrollBars |
Определяет полосы прокрутки: ssNone – нет полос; ssHorizontal – в таблицу вставляется горизонтальная полоса; ssVertical – вставляется вертикальная полоса; ssBoth – вставляются обе полосы |
В следующем примере компонент TStringGrid используется для показа значений функции с заданным шагом и на заданном отрезке (границы вводятся с клавиатуры в компоненты TEdit). Для TStringGrid в Инспекторе объектов необходимо установит свойства:
ColCount=2
RowCount=2
FixedCols=0
FixedRows=1
При создании формы происходит заполнение заголовка (фиксированной части) таблицы.
procedure TForm1.FormCreate(Sender: TObject);
begin
with StringGrid1 do
begin Cells[0,0]:='x';
Cells[1,0]:='sin x';
end;
При нажатии кнопки таблица заполняется значениями функции.
procedure TForm1.Button1Click(Sender: TObject);
var y:real;
i:integer;
begin
y:=strtofloat(Edit1.text);
i:=1;
while y<=strtofloat(Edit2.text) do
begin
with StringGrid1 do
begin
cells[0,i]:=floattostr(y);
cells[1,i]:=floattostr(sin(y));
RowCount:=RowCount+1;
end;
y:=y+0.25; i:=i+1;
end;
end;