
Глава 3 Object Pascal
© - mtError;
О - mtConfirmation;
CD - mtWarning;
О - mtlnformation.
Без изображения - mtCustom.
Параметр Buttons указывается множеством типа TMsgDlgBtn, которое опре-
деляет следующие кнопки:
4
mbYes, mbNo, mbOK, mbCancel, mbAbort,' mbRetry, mblgnore, mbAll
mnNoToAlU mbYesToAll, mbHelp, mbYesNoCancel, mbOKCancel
mbAbortRetry Ignore.
Для того чтобы указать несколько кнопок, следует использовать операцию +
или перечислить их. всех в квадратных скобках и через запятую. Например:
mbOK+mbHelp или [mbOK, mbHelp].
Функция возвращает одно из следующих значений, определяющих выбран-
ную пользователем кнопку:
mrNone, mrAbort, mrYes, mrOk, mrRetry, mrNo, mrCcincel, mrlgnore, mrAlL
Пример :
procedure TForml.ButtonlClick (Sender: TObject) /
begin
if MessageDlg('Завершитьприложение?',
mtConfirmation, [mbYes, mbNo], 0, mbYes) = mrYes then
begin
MessageDlg('Приложениезавершено.
1
, mtlnformation,
[mbOk], 0, mbOk);
Close;
end;
end;
function MessageDlgPos(const Msg: string; DlgType: TMsgDlgType; Buttons:
TMsgDIgButtons; HelpCtx: Longint; X, Y: Integer): Word;
Отображение диалога в указанной позиции экрана.
Показывает диалог типа DlgType с сообщением, указываемым параметром
Msg, и с кнопками, указываемыми параметром Buttons. Параметр HelpCtx on-js
ределяет ГО контекстаофайла справки. |1
В отличие от предыдущей функции, MessageDlgPos отображает диалог в по- ~
зиции, указанной параметрами X, Y (экранные координаты).
TMsgDlgType;
Integer; const
HelprileName: string;: vvoru, i
Отображение диалога в указанной позиции экрана и с используемым файлом!
справки, отличным от заданного по умолчанию.
91
Показывает диалог типа DlgType с сообщением, указываемым параметром Msg,
и с кнопками, указываемыми параметром Buttons. Параметр HelpCtx опреде-
ляет ГО контекста файла справки, а параметр HelpFileName - имя файла справ-
ки. Тема справки отображается, когда пользователь нажимает клавишу F1.
function SelectDirectory(const Caption: string; const Root: WideString; out
Directory: WideString): Boolean;
Отображает диалог, в котором пользователь может выбрать имя каталога,
а также просмотреть все диски, каталоги и файлы.
Функция SelectDirectory отображаетдиалог Browse for Folder (рис. 5.2). Па-
раметр Caption указывает надпись над панелью, в которой отображается де-
рево каталогов (аналогично левой части Проводника Windows).
-Hü
Files:
В- Desktop
i±i~ÖI My Documents
My Computer
$ 3.5 Floppy (A:)
FI t—p SYSTEM (C:)
; S ^ Local Disk (D:)
PROGRAM (E:)
: É Q Local Disk (F : )
. 4J O BOOKS (G:)
: IS-'O Local Disk (H:)
I l+J-Q Removable Disk (I:).
: ffi-^ IRC_NEW (J:)
!+l..irff£ Mm MphiAinflf PtarA« zl
OK
1 Cancel
Рис. 5.2. Аналог, отображаемыйфункцией SelectDirectory
Выбранное пользователем имя каталога заносится в параметр Directory.
Параметр Options может указываться набором следующих значений:
sdAUowCreate, sdPerformCreate, sdPrompt. Если этот параметр равен пустому
множеству, то пользователь не может внутри данного диалога создавать новые
каталоги. «
Если пользователь выбрал каталог и щелкнул на кнопке ОК, то функции воз-
вращаютзначение True. ~
Пример:
procedure TForml.ButtonlClick (Sender: TObject);
-var—strl ^Widest rrngr-res: "Boolean Г '
const str2: WideString=
1
D:
1
;
const str3: string = ' F i l e s : '; 92 Глава 3
begin
res:=SelectDirectory (str3 , s t r 2 , s t r l );
end;
Отметим, что для использования данной функции в секцию uses следует доба-
витьбиблиотеку QDialogs.
procedure ShowMessage(const Msg: string);
Отображает диалог с заданным сообщением Msg и кнопкой ОК.
В строке заголовка данного диалога выводится имя выполнимого файла при-
ложения. ~ ^
Процедуры и функции для работы с файлами
и каталогами
В функциях и процедурах, работающих с файлами, используется три различных
способа указания файла:
ф имя файла (или каталога) - как правило, используется для поиска или опре-
деления атрибутов доступа и времени записи;
« файловая переменная, определяемая и инициируемая следующим образом:
var F: TextFile;
AssignFile (F, FileName); ~ - --- —-
• дескриптор файла, используемый в функциях Windows API, который опреде-
ляется и инициализируется следующим кодом:
var FileHandle : Integer;
FileHandle := FileOpen (FileName, fmOpenWrite);
procedure AssignFile(var F; FileName: string);
Выполняет инициализацию файловой переменной. F может быть файловой
переменной для любого типа файла. FileName указывает имя файла, ассоции-
руемое далее во всех операциях с файловой переменной F. Если параметр
FileName является пустой строкой, то файловая переменная F ассоциируется
со стандартными файлами ввода (Reset (F)) или вывода (Rewrite (F)).
Пример:
var F: TextFile; S: ^string;
begin
if OpenDialogl.Execute then
begin { Показатьдиалог Open }
AssignFile(F, OpenDialogl.FileName);
{Fі 1 е^те 'ІшрІІдеЖвыбранное -в -диалоге}-
Reset(F);
Readln(F, S);
{Открываем файл}
{Читаем из файла первую строку} Object Pascal 93
Editl.Text := S; {Помещаем эту строку в компонент типа TEdit}
CloseFile(F); {Закрываемфайл}
end;
end;
procedure ChDir(S: string);
Изменяет текущий каталог и, если указан, текущий диск.
procedure CloseFiIe(var F); _
procedure Close(var F);
Закрывает файл, ассоциированный с файловой переменной F. Ранее этот файл
был открыт вызовом одной из функций: Reset, Rewrite или Append.
function CreateDir(const Dir: string): Boolean;
Создает новый каталог и при успешном завершении возвращает значение True.
Пример:
begin
if not DirectoryExists('C:\MyWork') then
if not CreateDirC C:\MyWork
1
) then
raise Exception.Create (He могусоздать C:\MyWork');
end;
function De!eteFiIe(const: string): Boolean;
Удаляет файл с именем FileName и при успешном "завершении возвращает
значение True.
function DirectoryExists(Name: string): Boolean;
Определяет, существует ли каталог с указанным именем.
function DiskFree(Drive: Byte): Int64;
Определяет количество свободного места на диске (в байтах). Параметр Drive
указывает проверяемый диск:
0 - текущий диск;
1 - диск А;
2 - д и с к В;
3 - диск С; . •
4 - диск D и т. д. __ _ ___ - - • -
Если диск указан неверно, то функция возвращает значение - 1.
function DiskSize(Drive: Byte): Int64;
Определяет размер диска (в байтах). Параметр Drive указывает проверяемый
ДИСК.- --- - . - -----
0 - текущий диск;
1 - диск А; 94 Г лава 3
2 - д и с к В;
3 - диск С;
4 - диск D и т. д.
ЕСЛИ ДИСК указан неверно, то функция возвращает значение - 1.
procedure FileClose(Handle: Integer);
Закрываетфайл, открытыйвызовомфункции FileOpen или FileCreate.
Отметим, что при использовании файловой переменной закрывать файл сле-
дуетвызовомпроцедуры CloseHle.
function FileDateToDateTime(FiIeDate: Integer): TDateTime;
Преобразовывает формат даты, используемый функциями FileGetDate
и FileAge (дата в формате DOS), в формат типа TDateTime, используемый
другими функциями и процедурами VCL-библиотеки.
function FileExists(const FileName: string): Boolean;
Определяет, существует ли файл, указанный параметром FileName.
function FileGetAttr(const FileName: string): Integer;
Возвращает атрибуты файла в виде строки битов. Возвращаемое значение
может быть комбинацией атрибутов, приведенных в следующей таблице.
Константа Значение О п и с а н и е ^
fa Readonly $00000001 Доступ только для чтения
faHidden $00000002 Файл скрыт
faSysFiJe $00000004 Системный файл
faVolumelD $00000008 Идентификатор диска
faDirectory $00000010 Каталог
faArchive $00000020 Архивный файл
faAnyFile $0000003F Любой файл
При возникновении ошибки функция возвращает значение - 1.
function FileGetDate(Handle: Integer): Integer;
Возвращает дату и время (в формате DOS) создания или последнего измене-^
ния файла. Если указан неверный -параметр Handle, то функция возвращает|
значение - 1 .
v
I
Для преобразования полученного значения даты в значение типа TDateTime *
следуетиспользоватьфункцию FileDateToDateTime. f
function FileOpen(const FileName: string;-Mode:_LongWprd): lnteger;
Открывает указанный файл. Параметр FileName определяет имя открываемо-
го файла, а параметр Mode - режим использования открытого файла. Object Pascal 95
При успешном завершении функция возвращает дескриптор открытого фай-
ла, используемый в дальнейшем в процедурах и функциях для доступа к это-
му файлу. При неудачном завершении функция возвращает значение - 1.
Отметим, что Object Pascal предоставляет свой более удобный способ досту-
па к файлам через файловую переменную, а использование дескриптора фай-
ла поддерживается функциями Windows API.
Пример:
var FileHandle : Integer;
-begin -
FileHandle := FileOpen(FileName, fmOpenWrite);
if FileHandle < 0 then
ShowMessage('He могуоткрытьфайл');
end;
function FileRead(Handle: Integer; var Buffer; Count: Integer): Integer;
Читает из файла, указанного дескриптором Handle, заданное количество байт.
Параметр Count определяет количество читаемых байт, а параметр Buffer -
буфер, в который записываются читаемые байты.
Функция возвращает количество реально прочитанных байт.
function FileSearch(const Name, DirList: string): string;
Выполняет поиск файла в. указанных каталогах. Параметр Name определяет
имя искомого файла, а параметр DirList - список каталогов, в которых вы-
полняется поиск, разделенных символом ;.
Если файл найден, то функция возвращает полный путь доступа к файлу,
а если нет - пустую строку.
function FiIeSeek(Handle, Offset, Origin: Integer): Integer; overload;
function FileSeek(Handle: Integer; const Offset: Int64; Origin: Integer):
Int64; overload;
Перемещает указатель текущей позиции файла, открытого функциями
FileOpen или FileCreate.
Параметр Offset определяет отступ в байтах от позиции, указываемой
параметром Origin.
Параметр Origin указывается одним из следующих значений:
0 - выполнять отступ от начала файла; '
1 - выполнять отступ от текущей позиции;
2 - выполнять отступ от конца файла. *
При успешном завершении функция возвращает значение новой текущей по-
значение - 1.
Отметим, что при работе с файловой переменной для перемещения текущей
позиции файла следует использовать функцию Seek. 96 Г лава 3
function FileSetAttr(const FileName: string; Attr: Integer): Integer;
Устанавливает новые атрибуты файла.
Например: FileSetAttr(
1
MyFile.ini', faReadOnly);.
function FileWrite(Handle: Integer; const Buffer; Count: Integer): Integer;
Записывает в указываемый дескриптором файл Count байт из буфера Buffer.
При успешном завершении функция возвращает количество записанных бай-
тов. В противном случае возвращается значение - 1.
Отметим, что при работе с файловой переменной для записи в файл следует
использовать функции Write, Writeln или BlockWrite—
function FindFirst(const Path: string; Attr: Integer; var F: TSearchRec): Integer;
Выполняет поиск файла с указанными параметром Attr атрибутами в каталоге
Path.
Если файл найден, то функция возвращает значение 0, а в параметр F зано-
сится информация о найденном файле.
Тип TSearchRec описываетсякак
type TSearchRec = record
Time: Integer; Size: Integer; Attr: Integer;
Name: TFileName; ExcludeAttr: Integer;
- FindHandle: THändle; FindData: TWin32FindData;
end; —
function FindNext(var F: TSearchRec): Integer;
Продолжает поиск файла, начатый функцией FindFirs. При нахождении под-
ходящего файла информация о нем заносится в параметр F, и функция воз-
вращаетзначение 0.
procedure FindClose(var F: TSearchRec);
Прерывает поиск и освобождает память, выделенную при вызове функции
FindFirst.
function GetCurrentDir: string;
Возвращает полный путь для текущего каталога.
procedure GetDir(D: Byte; var S: string);
Записывает в параметр S текущий каталог для указанного параметром D диска
(0 - диск по умолчанию, 1 - диск А и т. д.).
function RemoveDir(const Dir: string): Boolean;
Удаляет пустой каталог, указанный параметром Dir.
function RenameFile(const OldName,. JSewName:sjring): Boolean;
Изменяет имя файла с OldName на NewName. Object Pascal 97
function SetCurrentDir(const Dir: string): Boolean;
Устанавливаеттекущийкаталог.
procedure ProcessPath (const EditText: string; var Drive: Char; var
DirPart: string; var FilePart: string);
Выполняет разбор полного имени файла, указанного параметром EditText, на
диск (Drive), путь (DirPart) и имя файла (FilePart).
Процедуры и функции для работы с текстовыми
файлами через файловую переменную
procedure AssignPrn(var F:);
Назначает файловую переменную типа TextFile {Text) текущему принтеру.
Далее всегда следует вызывать процедуру Rewrite. После, этого назначения
вывод функций Write или Writeln, пишущих в эту переменную, будет перена-
правлен на принтер.
Для принтера одновременно может быть создана только одна переменная ти-
па TextFile.
Пример:
{Этот код выполняет печать ка текущий принтер строки текста, направляемой
в переменную MyFile, шрифтом, определяемым свойством Font объекта
- TCanvas} ; - / * ^ " * ~
var
MyFile: TextFile;
begin
AssignPrn(MyFile); {Назначение переменной}
Rewrite(MyFile);
Writeln(MyFile, 'Напечатать строку на принтере');
System.CloseFile(MyFile);
end;
function Eoln [(var F: Text) ]: Boolean;
Определяет, является ли текущая позиция файла концом строки или концом
файла. Если параметр указан, то он определяет файловую переменную.
В противном случае используется стандартная переменная Input, ассоции-
руемая с устройством ввода (var Input: Text;). Как правило, устройством вво-
да является клавиатура.
Вызов Eoln(F) возвращает значение True, если текущая" позиция файла ука-
зывает на конец строки или на конец файла. Во втором случае одновременно
и функция Eof (F) должна возвращать значение True.
procedure Erase(var F); _
Удаляет внешний файл, ассоциируемый с файловой переменной F.
4 Зак. 11 98 Глава 3
Отметим, что перед удалением файл должен быть закрыт.
procedure Readln([ var F: Text; ] V1 [, V2, ...,Vn ]);
Читает строку текста.
Пример:
{Код консольного приложения, читающего ввод с клавиатуры}
s : string;
begin
Write('Введитестрокутекста:
Readln(s); _ . . .
Writelnf'BbDi введентекст: \ s ) ;
- Writeinl
J
-Для ^выхода нажмите клавишу Enter ' ); - -
Readln; _
end; ' ' : ^ г..;::;:" \ - г : . : : : "™ —' —:::-г" . : : :: ~
procedure SetTextBuf(var F: Text; var Buf [ ; Size: Integer] );
Назначает текстовому файлу F вместо внутреннего 128-байтового буфера но-
вый буфер, указываемый параметром Buf.
procedure Writeln([ var F: Text; ] PI [, P2, ...,Pn ] );
Записывает строку текста, включая символы конца строки.
Если параметр,F,не,указан, то для консольного приложения Delphi автомати-
чески ассоциирует файл вывода с Output-файлом.
Процедуры и функции обшего назначения
procedure Веер;
Выдает звуковой сигнал (вызывая функцию Windows API MessageBeep).
procedure Exit;
Выполняет немедленный выход из текущей процедуры.
procedure Break;
Выполняет немедленный выход из текущего оператора цикла for, while
repeat. Управление передается на следующий после цикла оператор.
procedure Continue;
Прерывает текущую итерацию оператора цикла for, while или repeat и пере-
ходит на начало следующей итерации. ГЛАВА 4
О Б Ъ Е К Т Ы И К О М П О Н Е Н Т Ы
В этой главе дается краткий обзор компонентов, входящих в VCL-библиотеку.
ОСНОВНЫЕ понятия
Объекты
Объект Delphi представляет собой набор свойств и методов, включающих также
обработчики событий. Свойства, называемые иногда атрибутами, являются дан-
ными, содержащимися в объекте. Методы описывают действия, реализованные
для данного объекта.
Все объекты имеют общего предка - класс TObject. < -
Объект - это экземпляр класса. Например, форма реализуется классом TForm.
При создании формы:
; 1
1. Создается класс TForm 1, производимый от Tform. . . - -
2. Объявляется переменная объектного типа (объект) Form 1. При объявлении
переменной происходит создание объекта (выделение йамяти)7 "
Все компоненты, как визуальные, так и невизуальные, добавляемые в форму
во время проектирования, становятся дочерними для формы. Для них автома-
тически объявляются переменные соответствующего объектного типа.
Компоненты
Компонент Delphi - это особый вид объектов - визуальный объект (визуальный
для проектирования, а не для отображения пользователю). Создавать и редактиро-
вать такой объект можно как программным путем, так и на этапе проектирования.
Компоненты при выполнении программы могут быть визуальными или невизу-
^альными. Последние не могут быть непосредственно отображены во время вы-
полнения программы (например, компонент TDatabase).
Все компоненты имеют общего предка - класс TComponent. '
Delphi предоставляет широкий набор компонентов, называемый иногда.
VCL-библиотекой. Все компоненты Delphi могут быть доступны через палитру
.компонентов. ' ~ - — — — ' — — — — — - - - - - - - - ^
Элементы управления
Часть компонентов является элементами управления. В основном это элементы
управления WmdQ^^ДQaтy^ возможен не только на
г^этапе проектирования, но и во время выполнения приложения.