Методические указания для проведения практических и лабораторных занятий по дисциплине "Программирование на языке высокого уровня" для студентов специальностей 220200 Автоматизированные системы обработки информации и управления
Вид материала | Методические указания |
СодержаниеКомпонент TGroupBox Компонент TPanel Компоненты TOpenDialog и TSaveDialog Компонент TColorDialog Компонент TDriveComboBox Компонент TFileListBox Компонент TDirectoryOutline |
- Рабочая программа по дисциплине Программирование на языке высокого уровня для специальности, 182.97kb.
- Соболева Наталья Владимировна методические указания, 73.26kb.
- Методические указания к проведению лабораторных работ. Специальность 23. 01. 02 «Автоматизированные, 1178.37kb.
- Рабочая программа По дисциплине «Системы искусственного интеллекта» для специальности, 86.74kb.
- Рабочая программа По дисциплине «Программирование на языке высокого уровня» По специальности, 280.81kb.
- Р. Е. Алексеева кафедра ису программирование на языке высокого уровня методические, 57.65kb.
- Рабочая программа по дисциплине «Алгоритмические языки и программирование» Для специальности, 208.45kb.
- Рабочая программа дисциплины «Объектно-ориентированное программирование» для специальности, 325.53kb.
- А. В. Яковлев Операционные системы и системное программирование Раздел Операционная, 1847.03kb.
- Рабочая программа дисциплины «Автоматизированные информационные системы» для специальности, 301.29kb.
Компонент TGroupBox
TObject—TPersistent—”TCorr]ponent—”TControl—>TWinControl—>
—>TCustomControl—>TCustomGroupBox—TGroupBox
Модуль STDCTRLS
Страница Палитры компонентов Standard
Единственное назначение этого компонента — служить предком (Parent) для других компонентов. Это играет роль тогда, когда они должны быть объединены в группу по какому-либо признаку. Типичный пример — радиокнопки. Когда одна из них нажимается, все остальные радиокнопки в группе (т. е. с одним значением свойства Parent) автоматически отпускаются.
Поэтому, для того чтобы на форме иметь несколько независимых групп радиокнопок, их нужно поместить на разные объекты типа TGroupBox. (Кстати, именно для решения задачи с радиокнопками есть специальный компонент — TRadioGroup).
Будучи потомком класса TCustomControl, TGroupBox наследует от него общие свойства, описанные ранее. Специфических свойств и методов этот компонент не имеет.
Компонент TPanel
TObject->TPersistent-”TComponent->TControl->TWinControl—>
->TCustomControl—”TCustomPanel-”TPanel
Модуль EXTCTRLS
Страница Палитры компонентов Standard
Этот компонент — панель — является несущей конструкцией для размещения других элементов управления. В отличие от простой рамки (TBevel) панель сама является оконным элементом управления и родителем для всех размещенных на ней компонентов. Часто ее используют для создания панелей инструментов, строк состояния и т. п.
За внешнее оформление панели отвечают свойства:
(Pb) property Bevel Inner: TPanelBevel;
(Р1э) property BevelOuter: TPanelBevel;
TPanelBevel = (bvNone, bvLowered, bvRaised) ;
(Pb) property BevelWidth: TBevelWidth;
TBevelWidth = 1..Maxint;
(Pb) property BorderWidth: TBorderWidth;
TBorderWidth = 0..Maxint ;
На границах панели размещаются две специальные окаймляющие рамки (bevels): Bevellnner и BevelOuter. При помощи комбинации белого и серого цветов они имитируют трехмерность — приподнятость (bvRaised) или утоп-ленность (bvLowered). Обе рамки имеют ширину BevelWidth. Наружная — BevelOuter — расположена прямо по периметру панели, вторая — Bevellnner — внутри на расстоянии BorderWidth от нее. Обе могут быть невидимыми (bvNone), приподнятыми или утопленными.
Комбинируя сочетания bvLowered/bvRaised, можно создать вокруг панели "ров" или "вал".
Иллюзию трехмерности может подчеркнуть также стиль обрамления компонента:
(Pb) property BorderStyle: TBorderStyle;
TBorderStyle = bsNone .. bsSingle;
Значение bsSingle означает, что панель будет окаймлена черной линией единичной толщины (по периметру, снаружи от обеих рамок).
Выравнивание текста заголовка панели определяется при помощи свойства:
(Pb) property Alignment: TAlignment;
Свойство
(Pb) property Locked: boolean;
предназначено для определения способа взаимодействия панели с размещенными на ней объектами OLE. Если оно равно True, последние при активизации сервера OLE "по месту'" не могут заместить панель. В обработчике события:
(Pb) property OnResize: TNotifyEvent;
может быть предусмотрена реакция пользователя на изменение размеров панели.
3.6. Компоненты — стандартные диалоговые окна Windows
В Windows, начиная с версии 3.1, появилась библиотека стандартных диалоговых окон COMMDLG.DLL, которая позволила заменить вызовом функций программирование рутинных операций в типовых случаях взаимодействия с пользователем. К этим случаям относятся выбор имени файла для чтения и записи, выбор цвета или шрифта, поиск и замена текста, настройка принтера и параметров печати. В Delphi предусмотрены компоненты, представляющие собой оболочку для этих стандартных диалогов.
Поместив компоненты-диалоги на форму, вы освобождаетесь от необходимости вызывать их конструкторы и деструкторы. Все использование этих компонентов укладывается в трехэтапную схему:
1. Настройка параметров диалога, во время которой устанавливаются те или иные возможности. У всех диалогов для этого предусмотрено свойство Options, но у некоторых есть и дополнительные свойства.
2. Вызов метода Execute, который показывает диалоговое окно на экране и инициирует взаимодействие с пользователем. Execute является функцией:
он возвращает True, если пользователь подтвердил ввод значения (т. е. нажал кнопку ОК на экране или клавишу
3. В случае положительного ответа — чтение установленных значений в представляющем их свойстве (свойствах).
Примечание
Несколько отличается принцип взаимодействия в диалогах TFindDialog и TReplaceDialog, где нажатие кнопки подтверждения (Find и Replace соответственно) инициирует событие, которое пользователь должен обработать.
По этой схеме и будет строиться описание компонентов. Естественно, метод Execute при этом опущен. Кроме того, общим для диалогов является свойство HelpContext. При нажатии кнопки Help вызывается система помощи именно с этим контекстом.
Компоненты TOpenDialog и TSaveDialog
TObj ect—>TPersistent—>TCoinponent—>TConimonDialog—”TOpenDialog—”
-+TSaveDialog
Модуль DIALOGS
Страница Палитры компонентов Dialogs
Эти компоненты-диалоги предназначены для выбора имени файла, который будет в дальнейшем использован для чтения или записи. Рассмотрим их совместно, т. к. они отличаются только интерпретацией некоторых опций.
Диалог может быть настроен на представление имен файлов какого-нибудь одного типа или нескольких типов. При этом только эти типы отображаются в списке, и только из них может сделать выбор пользователь, с помощью свойства:
(РЬ) property Filter: string;
Формат строки фильтра состоит из двух частей. В первой задается краткое описание типа. Во второй части, которая отделяется символом '|' — маска поиска нужных файлов по расширению. В список файлов попадут только те, которые имеют указанные расширения. Примеры задания фильтра: 'Delphi projectsl*.dpr' или 'All graphics files I *-bmp,*.ico,*.wmf '.
Таких пар строк для разных типов в фильтре может быть несколько, при этом форматы представления фильтра в самой системе Windows и в Delphi имеют одно отличие. При вызове стандартных диалогов Windows эти пары строк должны разделяться нулевым байтом, после последней строки также должен стоять нулевой байт. В рассматриваемых компонентах все строки разделяются символом 'Г.
Создавать строки вручную нужно лишь в редких случаях — для ввода значения свойства на этапе проектирования предназначен специальный редактор. Есть также простой способ составить фильтр для графических файлов — для этого предназначена процедура GraphicFilter (ее описание см. в разделе "Графическая подсистема").
В качестве начального фильтра при вызове диалога будет выбрана та пара строк, номер (индекс) которой совпадает со значением свойства:
(Pb) property Pilterlndex: Integer;
Если свойству не присваивалось значения, то по умолчанию выбирается первая пара.
Путь к файлам, которые первоначально будут отображены в диалоге, задается свойством:
(Pb) property InitialDir: string;
В случае, если в поле ввода имени файла пользователь при ручном наборе не определил его расширение, это за него пытается сделать диалог. Для этого свойству
(Pb) property DefaultExt: TFileExt;
TFileExt = string[3];
присваивается строка (до трех символов, без точки), которая и будет использоваться в качестве расширения по умолчанию. Например, если пользователь ввел в поле имени файла 'mybitmap', a DefaultExt равно 'bmp', то компонент вернет полное имя 'mybitmap. bmp'.
Поле ввода FileName, где отображаются и редактируются имена файлов, может быть простым редактирующим элементом, а может быть и комбинированным списком. В этот список должны попасть имена файлов, которые были прежде прочитаны (записаны). Стиль редактирующего элемента задан свойством
(Pb) property FileEditStyle: TFileEditStyle;
TFileEditStyle = (fsEdit, fsComboBox);
а содержимое списка ранее возвращавшихся имен — свойством:
(Pb) property HistoryList: TStrings;
В случае действия стиля fsEdit это свойство не играет роли. Если же установлено fsComboBox, в выпадающем списке появляется содержимое HistoryList.
Можно создать список для этого свойства во время разработки программы. Но для того, чтобы оно действительно играло роль "предыстории", программист должен пополнять список после успешного окончания диалога, что иллюстрируется следующим фрагментом кода:
procedure TFormI-FileOpenClick(Sender: TObject);
begin
with OpenDialogI do
if Execute then
begin
Memol.Lines.LoadFromFile(FileName) ;
HistoryList.Add(FileName);
end;
end;
У двух диалогов имеется большой набор опций. Часть из них является общей, часть — играет роль только для одного из диалогов:
(Pb) property Options: TOpenOptions;
TOpenOption = (ofReadOnly, ofOverwritePrompt, ofHideReadOnly, ofNoChangeDir, ofShowHelp, ofNoValidate, ofAllowMuItiSelect, ofExtensionDifferent, ofPathMustExist, ofFileMustExist, ofCreatePrompt, ofShareAware, ofNoReadOnlyReturn, ofNoTestFileCreate) ;
TOpenOptions = set of TOpenOption;
Три опции отвечают за работу с файлами со статусом "только для чтения":
ofReadOnly — делает флажок "Read only" помеченным при появлении;
ofHideReadOnly — прячет этот флажок в появляющемся диалоге;
ofNoReadOnlyRetum — запрещает выбор файлов "только для чтения", извещая о необходимости выбрать другой файл при нажатии ОК.
Также три опции ограничивают ввод имен для новых (несуществующих) файлов:
ofPathMustExist — указывает на то, что файл может находиться только в одном из существующих каталогов. В случае ввода несуществующего пути к файлу пользователь извещается об ошибке;
ofFileMustExist — аналогичньм образом указывает на то, что может быть выбран только один из существующих файлов;
ofCreatePrompt — опция устанавливает реакцию на предыдущую ситуацию. Если она установлена, то вместо сообщения об ошибке вьшодится запрос на создание нового файла.
Другие опции:
ofOverwritePrompt — запрашивает подгверждение, если пользователь выбрал для записи уже существующий файл;
ofNoChangeDir — запрещает изменение начального каталога, с которьм диалог будет проинициализирован. Если она установлена, диалог каждый раз появляется с тем каталогом, который был установлен при первом запуске;
ofShowHelp — включает в состав диалога кнопку Help;
ofNo Validate — выключает проверку введенного имени файла на наличие в нем недопустимых символов;
ofAllowMultiSelect —позволяет выбирать несколько файлов одновременно;
ofShareAware — отключает проверку на возможность совместного доступа к выбранному файлу. В случае отстутствия этой опции файл нельзя выбрать, если он открыт другим приложением;
ofNoTestFileCreate — эта опция применяется только для файлов на тех узлах локальной сети, которым разрешено создание, но не модификация файлов. Если она установлена, диалог не проверяет возможность записи на выбранном устройстве.
Наконец, одна опция — ofExtensionDifTereiit — является выходной. Она устанавливается после завершения диалога в том случае, если расширение у введенного имени файла отличается от того, которое определено по умолчанию (в свойстве DefaultExt).
Текст, появляющийся в заголовке диалога, определяется свойством:
(Pb) property Title: string;
Если оно не было задано, то в заголовках диалогов появится "Open" для TOpenDialog и "SaveAs" для TSaveDialog.
В случае успешного завершения диалога в свойстве
(Ro) property Files: TStrings;
содержатся имена выбранных пользователем файлов. Если выбран один файл, его имя можно получить как Files.Strings[0], но есть для этого и отдельное свойство:
(Pb) property FileName: TFileName;
Компонент TColorDialog
TObject->TPersistent—>TCoinponent-TCommonDialog->TColorDialog
Модуль DIALOGS Страница Палитры компонентов Dialogs
Предназначен для определения цвета пользователем. Настройка диалога осуществляется через свойство:
(Pb) property Options: TColorDialogOptions;
TColorDialogOption = (cdFullOpen, cdPreventFullOpen, cdShowHelp);
TColorDialogOptions = set of TColorDialogOption;
Данные опции определяют:
cdFullOpen — полный показ диалога. В этом случае пользователь может выбрать не только один из цветов системной палитры, но и задать собственный;
cdPreventFullOpen — запрещение полного показа диалога;
cdShowHelp — показ кнопки Help.
В диалоге пользователь может определить несколько (до 16) собственных цветов, которые доступны в свойстве:
(РЙ property CustomColors: TStrings;
Каждый из этих цветов представлен в свойстве CustomColors строкой вида
ColorA = SOffaO
где ColorA — условное название цвета (могут быть определены цвета с названиями от ColorA до ColorP), а справа от знака равенства стоит его шестнадцатиричное значение в формате RGB.
В случае нажатия кнопки ОК возвращаемое значение цвета содержится в свойстве:
(РЬ) property Color: TColor;
3.7. Работа с файловой системой
Зачастую возможностей стандартных диалогов (компоненты TOpenDialog и TSaveDialog) недостаточно для реалшации замыслов программиста. Во многих современных коммерческих приложениях перед открытием файла есть возможность получить его характеристики и предварительно просмотреть содержимое. Чтобы дать разработчикам доступ к таким функциям, в библиотеку VCL были включены по отдельности и все составные части стандартного диалога — списки имен дисков, каталогов, файлов и фильтров расширений. Если установить между ними взаимные ссылки, то они будут работать вместе, как в TOpenDialog, безо всякого дополнительного программирования. Вместе с тем, можно описать и специфическую реакцию на изменения этих списков.
Кроме того, в эту группу компонентов включен TDirectoryOutline — пример настройки компонента TOutline на конкретное приложение. Он отображает файловую структуру в виде дерева и также может работать в связке с остальными компонентами этого раздела.
Компонент TDriveComboBox
TObject—”TPersistent—>TComponent—TControl—>TWinControl->
->TCustornComboBox-”TDriveComboBox
Модуль FILECTRL
Страница Палитры компонентов System
Компонент представляет комбинированный список, содержащий информацию о имеющихся в системе устройствах. При инициализации приложения все они заносятся в этот список. Во время выполнения отображаются односимвольное имя устройства, метка в квадратных скобках и пиктограмма, соответствующая его типу (винчестер, сетевой диск, дисковод CD-ROM и т. п.):
TDriveType = (dtUnknown, dtNoDrive, dtFloppy, dtFixed, dtNetwork, dtCDROM, dtRAM) ;
К сожалению, функция, определяющая тип диска по его номеру или имени, недоступна программисту. Имеющаяся в API Windows функция GetDriveType не умеет распознавать dtCDROM и dtRAM и сообщает о них как о dtFixed.
Имя текущего диска соответствует значению свойства
property Drive: Char;
а имя с меткой (так, как это показывается в списке) — значению свойства:
property Text;
При этом текст метки может отображаться в верхнем или нижнем регистрах, в зависимости от значения свойства:
(Pb) property TextCase: TTextCase;
TTextCase = (tcLowerCase, tcUpperCase) ;
Пиктограмму типа диска можно получить, используя свойство списка Items.Objects — каждому устройству соответствует объект типа TBitmap.
Изменение текущего диска, как правило, должно повлечь за собой изменения в соответствующих списках каталогов и файлов. Для этого в обработчике собьщга
(Pb) property OnChange: TNotifyEvent;
нужно предусмотреть соответствующий код, например:
procedure TFormI.DriveComboBoxlChange(Sender: TObject);
begin
DirectoryListBoxl.Drive := DriveComboBoxl.Drive ;
end;
Существует и более простой путь для такого связывания. Достаточно связать компонент-список дисков с компонентом-списком каталогов, используя свойство:
(Pb) property DirList: TDirectoryListBox;
Все изменения первого будут автоматически отслеживаться вторым. Компонент
TDirectoryListBox
TObject-”TPersistent->TComponent—”TControl->TWinControl—>
—>TCustomListBox->TDirectoryListBox
Модуль FILECTRL
Страница Палитры компонентов System
Компонент представляет список каталогов на текущем устройстве.
Устройство задается свойством
property Drive: Char;
а текущий каталог на нем — свойством:
property Directory: string;
При помощи метода
function GetIternPath(Index: Integer): string;
можно получить строку, содержащую полный путь к каталогу. Все символы в ней приводятся к верхнему регистру. Параметр Index означает номер каталога в списке (начиная с 0).
Если список каталогов связать со статическим текстом (меткой), пользуясь свойством
(Р)э) property DirLabel: TLabel ;
то в ней также будет отображаться путь к текущему каталогу. При этом, если имя полного пути не помещается в метке, то оно показывается в сокращенном виде (см. функцию MinimizeName).
Метод
procedure OpenCurcent ;
открывает текущий каталог, заменяя прежнее содержимое списка списком его дочерних подкаталогов.
Наконец, обновление содержимого списка у этого компонента осуществляет метод:
procedure Update;
Связать список каталогов с компонентом-списком файлов можно, обрабатывая событие:
(РЬ) property OnChange: TNotifyEvent;
или присвоив указатель на последний свойству:
(РЫ property FileList: TFileListBox;
В свойстве Items.Objects списка для каждого его элемента хранится объект типа TBitmap (пиктограмма, представляющая собой открытую или закрытую папку в зависимости от состояния каталога), доступный для чтения и записи.
Компонент TFileListBox
TObject->TPersistent-”TComponent->TControl-”TWinControl->
—>TCustomListBox->TFlleListBox
Модуль FILECTRL
Страница Палитры компонентов System
Компонент представляет список файлов в текущем каталоге. Аналогично предыдущим компонентам, свойства
property Drive: char;
property Directory: string;
содержат имя устройства и каталога на нем, а метод
procedure Update;
обновляет список файлов. Метод
procedure AppiyFilePath (const EditText: string);
пытается полностью переустановить путь, заменив текущее значение на то, что содержится в параметре EditText. При этом, если компонент связан со списками дисков и каталогов, то и там значения изменяются.
Свойство
(РЫ property FileEdit: TEdit;
содержит указатель на редактирующий элемент, которому автоматически передается имя текущего файла, которое также доступно как значение свойства:
property FileName: String;
В список можно включить не все файлы, а только обладающие атрибутами, определенными в свойстве:
(Pb) property FileType: TFileType;
TFileAttr = (ftReadOnly, ftHidden, ftSystem, fCVolumeID, ftDirectory, ftArchive, ftNormal) ;
TFileType = set of TFileAttr;
Шаблон, используемый при включении файлов в список, задается свойством:
(Pb) property Mask: string;
Если свойство
(Pb) property MultiSelect: Boolean;
установлено в True, то в списке может быть одновременно выделено несколько
файлов.
При смене текущего файла возникает событие:
(РЙ property OnChange: TNotifyEvent;
Как и прежде, объекты Items.Objects в этом разделе представляют пиктограммы для разных типов файлов. Задает их показ значение True следующего свойства:
(Pb) property ShowGlyphs: Boolean;
Компонент TDirectoryOutline
TObject—>TPersistent->TComponent->TControl—”TWinControl—>
-TCustomControl—CustomGrid—TCustomOutline-TDirectoryOutline
Модуль DIROUTLN
Страница Палитры компонентов Samples
Этот компонент создан для отображения иерархического дерева файлов и каталогов текущего диска и, таким образом, может заменить сразу компоненты TDirectoryListBox и TFileListBox. Он имеет много общего с компонентом TOutline, отличие заключается в возможности работы только с файловой структурой.
Значения текущего диска, содержимое файловой системы которого отображается в дереве, устанавливается посредством свойства:
property Drive: Char;
Текущий каталог соответствует значению свойства:
property Directory: TFileName;
Как и у компонента-предка, у TDirectoryOutline имеется свойство Lines. В него на этапе разработки считывается иерархическое дерево файловой структуры. Добавлять туда новые строки не имеет смысла, т. к. при запуске приложения файловая структура снова считывается, и строки с именами несуществующих каталогов и файлов удаляются.
Стиль отображаемых имен файлов и каталогов определяет свойство:
(РЬ) property TextCase: TTextCase;
TTextCase = (tcLowerCase, tcUpperCase, tcAsIs) ;
tcLowerCase — преобразование к нижнему регистру;
tcUpperCase — преобразование к верхнему регистру;
tcAsIs — без преобразования. Метод
function ForceCase(const AString: string): string;
может использоваться для пребразования строки, передаваемой в параметре AString, в соответствии с текущим стилем свойства TTextCase.
3.8. Вспомогательные компоненты
Таймер
TObject—>TPersistent—>TCoinponent—TTimer
Модуль EXTCTRLS
Страница Палитры компонентов System
Этот невизуальный компонент предназначен для уведомления программы об истечении определенных промежутков времени. Компонент инкапсулирует системный таймер Windows и работает через посылку сообщений WM_TIMER.
Свойство
(Pb) property Enabled: Boolean;
включает/выключает таймер, влияя на генерацию им событий. Будучи установлен в Enabled, таймер начинает генерировать события OnTimer через интервал времени
(РЬ| property Interval: Word;
который измеряется в миллисекундах. После каждого истечения такого интервала инициируется обработчик, связанный с событием:
(Pb) property OnTimer: TNotifyEvent;
При этом программист получает очередной квант времени.
При активизации и деактивизации таймера или изменении интервала в системе может не оказаться свободных таймеров. В этом случае генерируется исключительная ситуация EOutOfResources.