Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Ракитин Р.Ю. ООП в Turbo Delphi

.PDF
Скачиваний:
54
Добавлен:
18.03.2015
Размер:
3.59 Mб
Скачать

121

CloseFile (<ИмяПеременной>);

Считывание и запись информации в файл происходит последовательно, блок за блоком. Если же требуется считать определенную запись (например, пятую) из файла, то можно воспользоваться процедурой

Seek (<ИмяПеременной>, <НомерЗаписи>: longint);

где <НомерЗаписи> позиция в файле, начиная с которой будет производится операция ввода/вывода.

+Нумерация записей в файле начинается с нуля

Текстовый файлы

Данный тип файла предназначен исключительно для обработки строк. Для их объявления используется следующая запись:

<Имя>: Text;

Считывание и запись происходят построчно, причем символы перевода и возврата каретки используются как управляющие. Для осуществления построчных операций чтения и записи используются процедуры:

WriteLn (<ИмяПеременной>, <СписокПеременных>);

ReadLn (<ИмяПеременной>, <СписокПеременных>);

Процедуры Write и Read осуществляют считывание и запись текста сплошным потоком.

Специально для работы с текстовыми файлами применяются следующие стандартные подпрограммы:

procedure Append (var F:Text); открытие текстового файла в режиме записи. Не стирает все содержимое, а устанавливает текущую позицию в конец файла, что позволяет добавлять информацию;

function EoLn (var F:Text): boolean; возвращает значение True,

если текущая позиция в файле расположена либо в конце файла, либо в конце строки;

procedure Erase (var F:Text); удаление файла;

function Eof (var F:Text); возвращает значение True, если после выполнения последней операции ввода/вывода текущая позиция

оказывается в самом конце файла и дальнейшее считывание данных невозможно. Например, произведем подсчет числа строк в текстовом файле:

...

AssignFile (F,‘C:\A.TXT’); Reset (F);

i:=0;

122

while not Eof(F) do begin

ReadLn (F, S); Inc(i);

end; CloseFile(F);

...

function SeekEof (var F: Text): boolean; возвращает значение

True, если текущая позиция расположена в конце файла;

function SeekEoln (var F: Text): boolean; возвращает значение

True, если текущая позиция расположена в конце строки;

3. Стандартные подпрограммы для работы с файлами и каталогами

Устанавливает текущий каталог в соответствии с путем поиска, заданным параметром:

procedure ChDir (S: string);

function SetCurrentDir (const Dir: string): boolean;

Возвращает имя текущего каталога: function GetCurrentDir: string;

Создает новый каталог, путь которого указан в качестве параметра. Все промежуточные каталоги, кроме последнего, должны существовать:

function CreateDir (const Dir: string): boolean; procedure MkDir (s: string);

Удаляет файл:

function DeleteFile (const FileName: string): boolean;

Проверяет, существует ли указанный каталог:

function DirectoryExists (Name: string): boolean;

Проверяет, существует ли указанный файл:

function FileExists (const FileName: string): boolean;

Создает каталог. Если указаны несуществующие промежуточные каталоги, то они также будут созданы:

function ForceDirectories (Dir: string): boolean;

Удаляет пустой каталог, полный путь поиска, для которого задан параметром:

procedure RmDir (S: string);

function RemoveDir (const Dir: string): boolean;

 

 

 

123

Диалоговые окна Windows

 

Как

отмечалось

ранее, помимо визуальных компонент (Edit,

Label

и др.),

существуют

и невизуальные компоненты (PopupMenu,

Timer

и др.). На панели Dialogs расположен ряд невизуальных компонентов, позволяющих использовать в программе стандартные диалоговые окна Windows, например окна выбора и сохранения файлов или изображений, окна выбора цвета и шрифта, окно настройки принтера и другие. Эти компоненты не предназначены для выполнения конкретных действий: загрузки файла, печати, изменения текущего шрифта и прочих. Они применяются только для получения от пользователя желаемых значений настроек, например ввода полного имени файла вместе с путем поиска, указания гарнитуры шрифта, задания числа печатаемых страниц.

Все эти компоненты являются наследниками класса TCommonDialog. Самый важный его метод это функция

function Execute: Boolean;

Вызов данного метода обычно выглядит следующим образом:

if <Имя компонента>.Execute

then <Действия в случае корректного выбора> else <Действия в случае некорректного выбора>;

Если пользователем выбран файл, то есть метод Execute возвратил значение True, программа может получить доступ к названию выбранного файла через свойство FileName (название файла возвращается с указанием полного пути);

Когда диалоговое окно открывается в первый раз, возникает событие OnShow, а при закрытии окна событие OnClose. Рассмотрим основные компоненты диалоговых окон и их свойства.

1.Компонент Окно выбора файла (TOpenDialog)

Компонент предназначен для выбора файла с целью его последующего открытия. Основными свойствами класса TOpenDialog, являются:

DefaultExt расширение имени, используемое по умолчании. Добавляется

в конец выбранного пользователем имени файла, если расширение не указано явно; FileName выбранное пользователем имя файла вместе с полным путем поиска;

Files список выбранных имен файлов. В свойстве Options должен быть включен флажок ofAllowMultiSelect;

124

Filter набор масок, в соответствии с которыми отбираются имена файлов для отображения в диалоговом окне. Значением данного свойства является строка вида:

<Название группы 1>|<Маска 1; Маска N>| ... |<Название группы М>|<Маска 1; ... ; Маска К>;

FilterIndex номер текущей маски. Нумерация начинается с 1; HistoryList список ранее выбранных файлов (тип TStrings); InitialDir текущий каталог, содержимое которого отображается при первом открытии диалогового окна;

Options множество, каждый из элементов которого является флагом,

указывающим необходимость выполнения тех или иных проверок при работе пользователя с диалогом. Некоторые из свойств:

ofHideReadOnly удаляет из диалога переключатель «Только для чтения»; ofReadOnly Устанавливает переключатель «Только для чтения» в выбранное состояние;

ofOverwritePrompt Если в диалоге сохранения пользователь выбирает уже существующий файл, то на экран выводится диалог с предупреждением, в

котором можно отказаться от произведенного выбора и продолжить работу с диалогом;

ofNoChangeDir После выбора файла устанавливает текущий каталог на выбранный до вызова диалога;

ofAllowMultiSelect Включает возможность выбора пользователем нескольких файлов;

ofFileMustExist Включает проверку на существование выбранного файла. Не допускает выбор несуществующих файлов;

ofNoReadOnlyReturn Включает проверку на возможность записи в выбранный файл. Не допускает выбор файлов, имеющих атрибут

ReadOnly;

ofEnableSizing Разрешает изменение размеров диалогового окна пользователем;

Title заголовок диалогового окна.

Основными событиями класса TOpenDialog, являются:

OnCanClose пользователь пытается закрыть диалоговое окно. Обработчик

этого события позволяет проконтролировать правильность выбранного или введенного в соответствующее поле окна имени файла и разрешить или запретить закрытие;

OnFolderChange пользователь переключился в другой каталог; OnIncludeItem к текущему списку файлов в диалоговом окне будет добавлено новое имя. Обработчик данного события дает возможность отбирать допустимые имена по алгоритму, определяемому программистом; OnSelectionChange пользователь выбрал новое имя файла в диалоговом окне;

125

OnTypeChange пользователь выбрал новую маску файлов (свойство

Filter).

2.Компонент Окно сохранения файла (TSaveDialog)

Этот компонент практически ничем не отличается от компонента TOpenDialog, за исключением некоторых настроек, специфичных для процесса сохранения файла.

3. Компоненты Окно открытия рисунка (TOpenPictureDialog) и Окно сохранения рисунка (TSavePictureDialog)

Эти компоненты являются наследниками класса TOpenDialog и класса TSaveDialog. Диалоговые окна содержат дополнительную область для быстрого просмотра содержимого выбранного графического файла.

4.Компонент Окно выбора шрифта (TFontDialog)

Компонент предназначен для вызова стандартного диалогового окна выбора шрифта, доступного в системе. В соответствии с полями этого окна компонент имеет набор свойств, которые приведены ниже:

Device устройство, для которого отображается список доступных шрифтов. Font выбранный пользователем шрифт (тип

TFont).

MaxFontSize максимальный размер шрифта,

ограничивающий содержимое показываемого списка шрифтов.

MinFontSize минимальный размер шрифта,

ограничивающий содержимое показываемого списка шрифтов.

5.Компонент Окно выбора цвета (TColorDialog)

Спомощью данного компонента вызывается стандартное диалоговое окно выбора цвета. В свойстве Color (тип

TColor) содержится выбранный пользователем цвет, а в

126

свойстве CustomColors (тип TStrings) хранится в текстовом формате описание дополнительных пользовательских цветов. Цвет в этом формате задается шестью символами, определяющими в шестнадцатеричном виде

значение

цвета

в

соответствии

с

требованием

цветовой

системы

RGB.

Каждый

байт

задается

двумя

символами,

например FFFFFF или 08ЕЕ08.

 

 

 

 

6.Функции вызова диалоговых окон

Функция выбора файла PromptForFileName

Окно открытия файла можно вызвать с помощью функции модуля Dialogs:

function PromptForFileName(var FileName: string; {const Filter: string; const DefaultExt: string; const Title: string; const InitialDir: string; SaveDialog: boolean=False}): boolean;

Если пользователь нажал OK переменной FileName присваивается значение полного пути: диск/путь/имя файла выбранного файла, и возвращается значение True. Если пользователь нажал Cancel, никакие изменения не происходят, и возвращаемое значение будет False.

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

Filter используется, чтобы ограничить типы отображаемых файлов (рассмотрен выше);

DefaultExt используется, чтобы определить расширение для добавления к новому имени файла;

Title используется, чтобы дать диалогу заголовок; InitialDir позиционирует диалог в данный каталог;

SaveDialog определяет, может ли новый файл быть выбран для сохранения. Рассмотрим пример использования диалога:

var

selectedFile: string; begin

{Спрашиваем пользователя о выборе файла в диалоговом окне отображающего только файлы TXT}

if PromptForFileName(selectedFile, 'Text files (*.txt)|*.txt', '', 'Выберите ваш проектный файл', 'C:\',

False) // Означает, что диалог без Сохранения then

{Отображения выбранного полного значения файла/пути}

ShowMessage('Выбранный файл: = '+selectedFile) else

ShowMessage('Нажато Cancel'); end;

127

Функция выбора директории SelectDirectory

Функция выводит диалоговое окно, в котором можно выбрать директорию. Функция находится в модуле FileCtrl и имеет следующий вид:

function SelectDirectory (const Caption: string; const StartDir: WideString;

out ChosenDir: string): Boolean;

где Caption заголовок диалога, StartDir начальная директория, ChosenDir выбранная директория.

Практическое задание

Создадим приложение с компонентом диалог. Предусмотрим возможность вывода имени открытого файла с его полным путём.

1.Создадим новый проект. Разместим компонент TOpenDialog на форме. Для того чтобы открыть диалог, необходимо вызвать функцию Execute компонента OpenDialog1. Для открытия диалога создадим обработчик события OnClick объекта Кнопка.

2.В обработчике события запишем

if OpenDialog1.Execute then begin

...

end;

Вданном случае вызов функции Execute с одной стороны вызывает диалог OpenDialog1, а с другой стороны возвращает True, в случае если нажата кнопка Ок. Внимание! При вызове диалога работа текущей

процедуры останавливается до момента нажатия кнопки Ок. Между операторными скобками beginend записывается последовательность

действий, если был открыт файл.

3.Разместим на форме объекты Метка в значение Caption будем записывать полный путь до выбранного файла

Label1.Caption:=OpenDialog1.FileName;

Имя выбранного файла выделим из его полного пути, воспользовавшись

функцией

Label2.Caption:=ExtractFileName(OpenDialog1.FileName).

4.Для того чтобы диалог OpenDialog1 открывался по умолчании в определенной папке, например корневой папке диска C:\, запишем соответствующий путь в свойство OpenDialog1.InitialDir.

5.Разместим на форме объект класса TEdit. Введенный путь в этом объекте будем делать текущим при открытии диалога. Перед открытием диалога

запишем

128

OpenDialog1.InitialDir:=Edit1.Text.

+В случае не правильно указанной директории, диалог будет открыт

впапке по умолчанию.

6.Создадим фильтр на различные типы файлов. Для этого в свойство OpenDialog1.Filter необходимо добавить строку фильтра. Например, создадим фильтр на отображение всех файлов, файлов doc и rtf и файлов txt.

OpenDialog1.Filter:=’All(*.*)|*.*|

FileWord(*.doc;*.rtf)|*.doc;*rtf|TXT File(*.txt)|*.txt’;

7.Текущий номер фильтра укажем в свойстве OpenDialog1.FilterIndex.

Создадим приложение, иллюстрирующее возможности компонента

TFontDialog.

Разместим на форме объект TFontDialog и TEdit. Текст в объекте Edit2 будет меняться после того как будет сделан выбор в диалоге. Диалог будем вызывать при нажатии кнопки Button2.

В обработчике события OnClick кнопки Button2 запишем

with FontDialog1 do if Execute then begin

Edit2.Font.Color:=Font.Color;

Edit2.Font.Size:=Font.Size;

Edit2.Font.Name:=Font.Name;

Edit2.Font.Style:=Font.Style; end;

В данном случае копируем свойства, указанные в диалоге FontDialog1.Font в Edit2.Font, то есть можно скопировать все свойства

записав выражение Edit2.Font:= FontDialog1.Font;

129

Глава 12. Стандартные элементы управления Windows

1.Компонент TPageControl (Набор страниц)

Компонент представляет собой набор страниц, наложенных одна на другую, Доступ к каждой странице со своим набором аргументов управления, осуществляется через так называемые корешки небольшие выступы над страницей, содержащие короткое название. Большинство настроечных диалоговых окон в различных программах для Windows сегодня созданы именно по такому принципу. Данный элемент управления хорош в первую очередь тем, что позволяет эффективно экономить экранное пространство, фактически неограниченно увеличивая его «глубину».

Первоначально компонент, помещенный на форму, будет пустым не содержащим ни одной страницы. Новая страница добавляется командой New Page (Создать страницу) из контекстного меню. При этом в списке объектов в Инспекторе объектов (и в описании класса TForm) появляется описывающий ее новый объект TabSheet.

Основные свойства компонента:

ActivePageIndex содержит номер открытой страницы (нумирация начинается с нуля);

PageCount текущее число страниц; Pages массив страниц;

HotTrack имеет значение True, если текст корешка при наведении указателя выделяется ярким цветом;

Images список картинок, которые отображаются на корешках вместе с текстом. Номер картинки в списке соответствует порядковому номеру страницы в объекте;

Multiline имеет значение True, если корешки разрешено отображать в несколько строк;

Style стиль объекта. Возможные значения tsTabs (стандартный вид), tsButtons (корешки имеют вид кнопок), tsFlatButtons (корешки имеют вид плоских кнопок);

TabHeight высота корешка в пикселях;

TabPosition определяет, где отображаются корешки. Возможные значения

tpTop (в верхней части объекта), tpBottom (в нижней части объекта), tpLeft (в левой части объекта), tpRight (в правой части объекта);

TabWidth ширина корешка в пикселях.

2.Компонент TTrackBar (Движок)

Движок обычно применяется там, где надо в визуальном режиме выставить с помощью мыши какое-либо приближенное значение, что выполняется перетаскиванием движка по шкале.

130

Основные свойства компонента:

Frequency частота засечек;

Min, Max минимальная и максимальная допустимые границы;

Orientation ориентация: горизонтальная (значение trHorizontal) или вертикальная (значение trVertical);

SelStart, SelEnd начало и конец «оптимального» диапазона в рамках границ Min/Max по аналогии с приборами управления. Область

оптимального диапазона выделяется дополнительными засечками и другим цветом;

SliderVisible видимость движка; ThumbLength толщина полосы движка в пикселях;

TickMarks положение засечек. Возможные значения: tmBottomRight (снизу); tmTopLeft (сверху); tmBoth (с обеих сторон);

TickStyle способ отображения засечек на движке. Возможные значения: tsAuto (автоматически); tsManual (программно); tsNone (вообще не отображаются);

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

изменении значения свойства Position генерируется сообщение

OnChange.

3.Компонент TProgressBar (Индикатор)

Индикаторы активно применяются во многих программах для отображения сведений о ходе длительного процесса (например, процесса инсталляции, запись дисков).

Свойства Min, Max, Position, Orientation аналогичны свойствам компонента TTrackBar. Необходимо также отметить свойство Smooth. Если оно имеет значение True, то в полосе заполнения (отсчет в ней ведется слева направо) отображается сплошная линия, в противном случае сегментированная.

Если требуются более гибкие возможности оформления индикатора, то можно воспользоваться компонентом TGauge с панели Samples (Образцы),

который позволяет дополнительно определять цвет индикатора и выводить процент заполнения.

4.Компонент TUpDown (Счетчик)

Данный компонент управления используется как правило в связке с другими элементами. Он дает возможность изменять числовые величины с помощью кнопок со стрелками и курсорных клавиш. При этом можно задать допустимые границы этих величин.