- •Delphi Справочник по компонентам. Класс tList
- •Класс tStream
- •Функции работы с файлами
- •Функции преобразования чисел с плавающей точкой
- •Функции работы с датами и временем
- •Элементы управления
- •Положение, размеры и выравнивание элементов управления
- •Активность и видимость элементов управления
- •Внутренний интерфейс Drag&Drop
- •Ярлычки и оперативная подсказка
- •Оконные элементы управления
- •Фокус ввода
- •Графическая подсистема
- •Класс tFont
- •Класс тРеn
- •Класс tBrush
- •Класс tCanvas
- •Класс tGraphic
- •Класс tPicture
- •Класс tMetafile
- •Класс tIcon
- •Класс tBitmap
- •Описание компонентов vcl
- •TPopupMenu.
- •Компонент tMainMenu
- •Компонент tPopupMenu
- •Компонент tBitBtn
- •Компонент tSpeedButton
- •Компонент tRadioGroup
- •Компонент tSpinButton
- •Ввод и редактирование текста
- •Компонент tEdit
- •Компонент тМеmo
- •Компонент tMaskEdit
- •Функции для форматирования текста
- •Оформление приложения
- •Компонент tPaintBox
- •Компонент tBevel
- •Компонент tImage
- •Компонент tHeader
- •Ввод и выбор значений
- •Компонент tListBox
- •Компонент tComboBox
- •Компонент tScrollBar
- •Компонент tSpinEdit
- •Компонент tDrawGrid
- •Многостраничные диалоговые окна
- •Компонент tNotebook
- •Компонент tTabSet
- •Компонент tTabbedNotebook
- •Группирование компонентов
- •Компонент tGroupBox
- •Компонент tPanel
- •Компонент tScrollBox
- •Компоненты — стандартные диалоговые окна Windows
- •Компоненты tOpenDialog и tSaveDialog
- •Компонент tColorDialog
- •Компонент tFontDialog
- •Компонент tPrintDlalog
- •Компонент tFindDialog
- •Компонент tReplaceDialog
- •Работа с файловой системой
- •Компонент tDriveComboBox
- •TDirectoryListBox
- •Компонент tFileListBox
- •Компонент tFilterComboBox
- •Компонент tDirectoryOutline
- •Работа со средствами мультимедиа
- •Динамический обмен данными (dde)
- •Компонент tdDeServerConv
- •Компонент tdDeServerltem
- •Компонент tddeciIentConv
- •Компонент tddecIientltem
- •Дополнительные компоненты
- •Компонент tGauge
- •Компонент tCalendar
- •Компонент tColorGrld
- •Использование интерфейса ole
- •Компонент toleContainer
- •Форма и ее свойства
- •Управление дочерними элементами
- •Приложение и среда его выполнения
- •Объект Application
- •Объект Clipboard
- •Компонент tScreen
- •Файлы инициализации
- •Печать данных из приложения
- •Компонент tSession
- •Компонент tDatabase
- •Компонент tDataSource
- •Компонент tTable
- •Компонент tQuery
- •Компонент tStoredProc
- •Компонент tReport
- •Компонент tBatchMove
- •Компонент tField
- •Объект tFieldDef
- •Важнейшие типы данных
- •Компоненты отображения данных и управления данными
- •Компонент tdbGrid
- •Компонент tdbNavigator
- •Компонент tdbText
- •Компонент tdbEdit
- •Компонент tdbMemo
- •Компонент tdbImage
- •Компонент tdbListBox
- •Компонент tdbComboBox
- •Компонент tdbCheckBox
- •Компонент tdbRadioGroup
- •Компонент tdbLookupUst
- •Компонент tdbLookupCombo
Функции работы с файлами
Эта часть библиотеки претерпела изменения в Delphi. К функциям, которые работали с файлом через файловую переменную, добавились функции, работающие с дескриптором файла. Они рассматривают файл как двоичный; с текстовыми файлами нужно работать "по старинке".
Файловые функции, описанные в модуле SYSUTILS, приведены в таблице:
function File0pen(const FileName: string; Mode: Word) : Integer; |
Открывает существующий FileName файл в режиме Mode (см. примеч. 1). Значение, возвращаемое в случае успеха, — дескриптор открытого файла. В противном случае — код ошибки DOS. |
function FileCreate(const PileName: string): Integer; |
Создает файл с именем FileName. Возвращает то же, что и FileOpen. |
function FileRead(Handle: Integer; var Buffer; Count: Longint): Longint; |
Считывает из файла с дескриптором Handle Count байт в буфер Buffer. Возвращает число реально прочитанных байт или -1 при ошибке. |
function FileWrite(Handle: Integer; const Buffer; |
Записывает в файл с дескриптором Handle Count байт из буфера Buffer. Возвращает число реально записанных байт или -1 при ошибке. |
function FileSeek(Handle: Integer; Offset: Longint; Origin: Integer): Longint; |
Позиционирует файл с дескриптором Handle в новое положение. При Origin = 1,2,3 положение смещается на Offset байт от начала файла, текущей позиции и конца файла соответственно. Возвращает новое положение или -1 при ошибке. |
procedure FileClose(Handle: |
Закрывает файл с дескриптором Handle. |
function FileAge(const |
Возвращает значения даты и времени создания файла или -1, если файл не существует. |
function FileExists(const |
Возвращает True если файл FileName существует к найден. |
function FindFirst(const Path: string; Attr: Integer; var SearchRec: TSearchRec): Integer; |
Ищет первый файл, удовлетворяющий маске поиска, заданной в Path и с атрибутами Attr (см. примеч. 2). В случае успеха заполняет запись SearchRec (см. примеч. 3) и возвращает 0, иначе возвращает код ошибки DOS. |
function FindNext(var SearchRec: TSearchRec): Integer; |
Продолжает процесс поиска файлов, удовлетворяющих маске поиска. Параметр SearchRec должен быть заполнен при помощи FindFirst. Возвращает 0, если очередной файл найден, или код ошибки DOS. Изменяет SearchRec. |
procedure FindClose(var |
Завершает процесс поиска файлов, удовлетворяющих маске поиска. |
function FileQetDate(Handle: Integer) : Longint; |
Возвращает время создания файла с дескриптором Handle (в формате DOS) или -1, если дескриптор недействителен. |
procedure FileSetDate(Handle: Integer; |
Устанавливает время создания файла с дескриптором Handle (в формате DOS). |
function FileGetAttr(const FileName: string): Integer; |
Возвращает атрибуты (см. примеч. 2) файла с именем FileName или код ошибки DOS, если файл не найден. |
function FileSetAttrtconst FileName: string; Attr: |
Устанавливает атрибуты файла с именем FileName. |
function DeleteFile(const |
Уничтожает файл с именем FileName и в случае успеха возвращает True. |
function RenameFile(const OldName, NewName: string): Boolean; |
Переименовывает файл с именем OldName в NewName и возвращает True в случае успеха. |
|
|
function ChangeFileExt(const FileName, Extension: string): string; |
Изменяет расширение в имени файла FileName на Extension и возвращает новое значение FileName. Имя файла не изменяется. |
function ExtractFilePath(const FileName: string): string; |
Извлекает из строки с полным именем файла FileName часть, содержащую путь к нему. |
function ExtractFileName(const FileName: string): string; |
Извлекает из строки с полным именем файла FileName часть, содержащую его имя и расширение. |
function ExtractFileExt(const FileName: string): string; |
Извлекает из строки с полным именем файла FileName часть, содержащую его расширение. |
function ExpandFileName(const FileName: string): string; |
Возвращает полное имя файла FileName, добавляя при необходимости путь к нему и переводя все символы в верхний регистр. |
function FileSearch(const Name, DirList: string): strings- |
Производит поиск файла с именем Name в группе каталогов, заданных параметром DirList. Имена каталогов должны отделяться друг от друга точкой с запятой. Возвращает в случае успеха полное имя файла или пустую строку, если файл не найден. |
function DiskFree(Drive: Byte): Longint; |
Возвращает количество в байтах свободного места на заданном диске. Значение параметра Drive: 0 — для текущего диска, 1 — для А, 2 — для В и т. д. Если параметр неверен, функция возвращает -1. |
function DiskSize(Drive: Byte): Longint; |
Возвращает размер диска Drive в байтах. Параметр Drive означает то же, что и в DiskFree. |
function FileDateToDateTime(FileDate: Longint): TDateTime; |
Преобразует дату и время в формате DOS в принятый в Delphi формат TDateTime. |
function DateTimeToFileDate(DateTime: TDateTime): Longint; |
Преобразует дату и время из формата TDateTime в формат DOS. |
Примечания:
1. Допустимы следующие режимы открытия файлов:
|
|
* |
Режим |
Значение |
Что означает |
fmOpenRead |
$0000 |
Открыть только для чтения. |
fmOpenWrite |
$0001 |
Открыть только для записи. |
fmOpenReadWrite |
$0002 |
Открыть для чтения и записи. |
fmShareCompat |
$0000 |
Обеспечить совместимость со старой моделью доступа к файлам. |
Режим |
Значение |
Что означает |
fmShareExclusive |
$0010 |
Запретить другим доступ к файлу. |
fmShareDenyWrite |
$0020 |
Запретить другим запись в файл. |
fmShareDenyRead |
$0030 |
Запретить другим чтение файла. |
fmShareDenyNone |
$0040 |
Разрешить другим все виды доступа. |
2. Файлы могут иметь следующие атрибуты:
faReadOnly = $01;
faHidden = $02;
faSysFile = $04;
faVolumeID = $08;
faDirectory = $10;
faArchive = $20;
faAnyFile = $3F;
3. Формат структуры TSearchRec таков:
TSearchRec = record
Fill: array[1..21] of Byte;
Attr: Byte;
Time: Longint;
Size: Longint;
Name: string[12] ;
end;
Приведем типовой вариант организации групповой обработки файлов при помощи функций FindFirst, FindNext и FindClose. В нем в список добавляются имя и длина всех файлов в каталоге с именем CADELPHI:
var SearchRec: TSearchRec;
I : Integer;
List : TStringList;
begin
List := TStringList.Create;
I := FindFirst('c:\delphi\*.*', faAnyFile, SearchRec);
while I = 0 do begin
List.Add(Format (' File %s has length %d bytes ', [SearchRec.Name, SearchRec.Size])) ;
I := FindNext(SearchRec);
end;
FindClose(SearchRec) ;
List.Free;
end;
При поиске файла наиболее вероятным является код ошибки -18 (файл не найден).
Процедура FindClose не делает ничего в 16-разрядной версии Delphi, однако будет играть роль в 32-разрядной. Употреблять ее следует из соображений переносимости приложений.
4 Ряд "старых" функций переименованы: это связано с появлением одноименных методов у объектов. Теперь вместо Assign следует употреблять AssignFile, вместо Close — CloseFile. Старые имена поддерживаются ддя совместимости, но могут вызвать проблемы при одновременном употреблении с именами методов.
2.14.3. Функции форматирования строк
Еще со времен языка FORTRAN у программистов появилась необходимость форматировать строки, направляемые на устройства вывода. Требовался легкий способ для того, чтобы не просто преобразовать число в строку, но также объединить эту строку с другими и включить ее в состав целого предложения.
В Delphi существует группа функций форматирования строк. Их рассмотрение начнем с наиболее часто встречающегося представителя — функции Format:
function Format (const Format: string; const Args: array of const) : string;
Первым параметром функции выступает форматирующая строка. Это — обычная текстовая строка, но в ней на нужных местах стоят специальные символы, которые определяют, какие и как туда будут подставлены параметры.
Второй параметр функции Format называется списком аргументов. Он и содержит "вставляемые" в форматирующую строку параметры. Обратите внимение, что этот открытый массив имеет тип array of const. и в нем может передаваться переменное число разнотипных параметров. Например, после выполнения
S := FormatC Product %s , version %d.%d', [ 'Borland Delphi' , 1, 0]);
строке S будет присвоено • Product Borland Delphi , version 1.0'. Рассмотрим подробнее правила, по которьм составляется форматирующая строка.
"Специальные" места в ней называются спецификаторами формата и представляют собой следующие конструкции
"%" [index":"] ["-"I [width] ["."prec] type
где обозначены:
• символ -%", с которого начинаются все спецификаторы формата (обязательный);
• поле индекса аргумента [ index " : " ] (необязательное);
• признак выравнивания по левому краю ["-"I (необязательный);
• поле ширины [width] (необязательное);
• поле точности [ - . - prec ] (необязательное);
• символ типа преобразования type (обязательный).
Каждый спецификатор формата соответствует как минимум одному из элементов списка аргументов и определяет, как именно рассматривать его и преобразовывать в строку.
Функция Format поддерживает следующие символы типа преобразования:
Символ |
Тип |
Что означает |
d |
Десятичный |
Элемент должен быть целым числом и преобразуется в строку десятичных цифр. Если при символе есть поле точности, то в выходной строке будет минимум ргес цифр; если при преобразовании числа их потребуется меньше, то строка дополняется слева нулями. |
х |
Шестнадцатиричный |
Как тип d, но элемент преобразуется в строку шестнадцатиричных цифр. |
е |
Научный |
Элемент должен быть числом с плавающей точкой. Он преобразуется к нормализованному виду -d.dddE+ddd. Перед десятичной точкой всегда находится одна цифра (при необходимости, с минусом). После символа "Е" идет показатель степени, имеющий знак и состоящий не менее чем из 3 цифр. Общее число символов в представлении числа определяется полем ргес (по умолчанию 15). |
f |
Фиксированный |
Элемент должен быть числом с плавающей точкой. Он преобразуется к виду -ddd.ddd. Поле ргес означает количество цифр после десятичной точки (по умолчанию 2). |
д |
Обобщенный |
Элемент должен быть числом с плавающей точкой. Он преобразуется к одному из двух вышеперечисленных видов — выбирается тот, который обеспечивает более короткую запись. Если требуемое число цифр слева от десятичной точки меньше значения поля ширины и само число больше 10" , применяется фиксированный тип. Удаляются все впереди идущие нули, десятичная точка (при возможности), а также символы, разделяющие строку на группы по три цифры. |
п m |
Числовой Денежный |
Совпадает с типом f за исключением того, что после каждой группы из трех цифр ставятся разделительные символы: d,ddd, ddd.ddd.... Элемент должен быть числом с плавающей точкой, отражающей денежную сумму. Способ ее представления зависит от значений глобальных констант, определенных в модуле SYSUTILS (см. ниже). В свою очередь, они зависят от настройки Windows на обозначения, принятые в данной стране. |
Р |
Указатель |
Элемент должен быть указателем. На выходе он будет представлять из себя строку шестнадцатиричных цифр вида ХХХХ: YYYY, где ХХХХ — селектор, YYYY — смещение. |
s |
Строка |
Элемент может иметь тип string, PChar или быть отдельным символом (Char). Эта строка (или символ) вставляются вместо спецификатора формата. Если присутствует поле ргес и длина строки больше его значения, то она усекается. |
Примечания:
1. Форматирующие символы можно задавать как в верхнем, так и в нижнем регистрах.
2. Тип преобразования m (денежный) тесно связан с правилами представления, принятыми в конкретной стране. Для этого в модуле SYSUTILS определены значения ряда типизированных констант, начальные значения которых берутся из секции [Inti] файла WIN.INI. Вы можете изменять их значения в соответствии с вашими потребностями:
Имя и тип |
Что означает |
CurrencyString: string[7]; |
Символ (или символы), добавляемые к строке с представлением денежной суммы и обозначающие национальную денежную единицу. Это может быть, например, '$', 'DM' или 'руб'. |
CurrencyFormat: Byte; |
Определяет способ добавления знака денежной единицы к строке. Число 1 будет преобразовано так в зависимости от значения этого параметра: '$!' при 0; '1$' при 1; '$ Г при 2; '1 $' при 3. |
NegCurrFormat: Byte; |
Определяет способ добавления знака денежной единицы и минуса к строке в том случае, если происходит преобразование отрицательного числа (к положительным числам отношения не имеет). Число -1 будет преобразовано так в зависимости от значения этого параметра: '($!)' при 0; '-$!' при 1; '$-1' при 2; '$!-' при 3; '(!$)' при 4; '-!$' при 5; 'i-$' при 6; '!$-' при 7; '-1 $' при 8; '-$ Г при 9; '$ 1-' при 10. |
CurrencyDecimals: Byte; |
Число знаков после запятой в представлении денежных сумм. Например, число 10.15 при разных значениях этого параметра отобразится так: '$10' при 0, '$10.15' при 2, '$10.1500' при 4. |
ThousandSeparator: Char; |
Символ, разделяющий строку на группы по три цифры справа налево (разделитель тысяч). Применяется, в частности, в типе преобразования п. |
DecimalSeparator: Char; |
Символ, отделяющий дробную часть числа от целой. |
Мы закончили рассмотрение символа типа преобразования. Рассмотрим остальные составные части спецификатора формата.
Поле ширины устанавливает минимально допустимое количество символов в преобразованной строке. Это означает, что если она короче, чем задано в этом поле, то происходит добавление пробелов до требуемого количества. По умолчанию пробелы добавляются спереди (выравнивание по правому краю), но признак выравнивания по левому краю ("-"; он должен стоять перед полем ширины) позволяет выравнивать строку по-иному.
Поле индекса позволяет динамически изменить последовательность извлечения аргументов из массива. Обычно аргументы извлекаются последовательно, по мере их востребования спецификаторами формата. Поле индекса означает, что следующим нужно извлечь аргумент с данным индексом. Пользуясь индексом, одни и те же аргументы могут быть использованы многократно. Например, вызов Format ( ' %s %s %0 : s %s ', [ 'Yes', 'No' ] ) Даст на выходе строку 'Yes No Yes No'.
Поле точности играет разную роль в зависимости от того, с каким типом преобразования применяется. Его особенности приведены вместе с описанием типа (с теми из них, где оно имеет смысл).
Поля индекса, ширины и точности могут быть заданы напрямую или косвенно. Первый способ подразумевает явное указание значения поля (например, ' %10 . 5f '). Для косвенного задания значений нужно в соответствующих местах цифры заменить звездочками (например, '%*.*f'). В этом случае вместо звездочек будут подставлены следующие значения из списка аргументов (они обязательно должны быть целыми числами). Например, выражение
Format('Value is %*.*',[10,5, 2.718]);
эквивалентно:
Format('Value is %10.5',[2.718]);
Как уже упоминалось, наиболее употребимой функцией из группы форматирующих является Format, которая работает со строками типа string и максимально освобождает программиста от рутинной работы. Другие функции используют то же ядро и правила преобразования, но отличаются параметрами:
procedure FmtStr(var Result: string; const Format: string; const Args: array of const); |
To же, что и Format, но оформлено в виде процедуры. Результат преобразования возвращается в параметре Result. |
function StrFmt(Buffer, Format: PChar; const Args: array of const): PChar; |
Форматирующая строка должна находиться в параметре Format, а результирующая помещается в буфер Buffer (он должен иметь нужную длину). Функция возвращает указатель на Buffer. |
function StrLFmt(Buffer: PChar; MaxLen: Cardinal; Format: PChar; const Args: array of const) : PChar; |
Работает как StrFmt, но длина результирующей строки не будет превышать MaxLen символов. |
function FormatBuf(var Buffer; BufLen: Cardinal; const Format; FmtLen: Cardinal; const Args: array of const) : Cardinal; |
Форматирующая строка находится в буфере Format длиной FmtLen, a результирующая — в буфере Buffer длиной BufLen. Функция возвращает число реально помещенных в Buffer символов, причем оно всегда меньше или равно BufLen. |