Автор: Пользователь скрыл имя, 06 Февраля 2013 в 01:52, аттестационная работа
Класс TList -- универсальный список. Он представляет собой массив нетипированных указателей и поэтому годится для хранения набора любых, в том числе разнотипных, данных и объектов. При добавлении/удалении в список данные не создаются и не уничтожаются -- эта обязанность лежит на программисте. Приведем доступные ему методы и свойства класса.
Другие опции:
fdForceFontExist -- включает возможность предупреждения пользователя о том, что он выбрал несуществующий тппиДт-
fdShowHelp -- включает в состав диалога кнопку Help;
fdLimitSize -- позволяет ограничивать размер выбираемого шрифта.
После успешного завершения диалога можно обращаться к свойству
(Pb) property Font: TFont;
содержащему новый шрифт. Но можно и до завершения просмотреть результаты смены шрифта. Для этого надо определить обработчик события:
(Pb) property OnApply: TFDApplyEvent;
TFDApplyEvent = procedure(Sender: TObject; Wnd: HWND) of object;
Если обработчик определен, то в этом случае в диалоге появляется дополнительная кнопка Apply. При ее нажатии в окне Wnd прежний шрифт немедленно заменяется на выбранный.
Компонент TPrinterSetupDialog
TObject-"TPersistent--"
Модуль DIALOGS
Страница Палитры компонентов Dialogs
Диалоговое окно установки параметров принтера. Оно поддерживается соответствующим драйвером принтера и программисту никаких значений не возвращает, поэтому метод Execute у этого компонента -- не функция, а процедура.
Компонент TPrintDlalog
TObject-"TPersistent-->
TPrintDialog
Модуль DIALOGS
Страница Палитры компонентов Dialogs
Предназначен для настройки параметров вывода текста на принтер. Опции этого диалога определяются свойством:
(pb) property Options: TPrintDialogOptions;
TPrintDialogOption = (poPrintToFile, poPageNums, poSelection, poWarning, poHelp, poDisablePrintToFile) ;
TPrintDialogOptions = set of TPrintDialogOption;
poWaming -- извещает пользователя при инициализации диалога, если в системе нет установленных принтеров.
poHelp -- включает в диалог кнопку Help;
Печать может быть перенаправлена в файл. Для этого в диалог может быть включен специальный флажок Print To File. Состояние его зависит от двух опций:
poPrintToFile -- разрешает появление в диалоге этого флажка;
PoDisablePrintToFile -- флажок показывается серьм цветом и переключение запрещено.
По умолчанию для печати предназначается весь текст. Однако, если установлены следующие опции, из него может быть напечатана только часть:
вместе с полями для ввода диапазона делается доступным);
poSelection -- разрешает выбор только выделенного фрагмента текста (переключатель Selection делается доступным).
Остальные свойства компонента соответствуют разньм элементам управления диалога (кроме MinPage и MaxPage). Их начальные значения отображаются при вызове метода Execute.
После завершения диалога можно определить с помощью следующего свойства, что именно хочет напечатать пользователь -- все, выделенный текст или диапазон страниц:
(рь) property PrintRange: TPrintRange;
TPrintRange = (prAllPages, prSelection, prPageNums);
В случае prPageNums печататься будут страницы от определяемой свойством
(Pb) property FromPage: Integer;
до определяемой свойством
(РЬ) property ToPage: Integer;
При этом они должны полностью лежать в диапазоне, определенном свойствами:
(Pb) property MinPage: Integer;
fpB) property MaxPage: Integer;
Если пользователь ввел значение FromPage или ToPage, выходящее за пределы этого диапазона, то после нажатия кнопки ОК появится сообщение об ошибке, и диалог не будет завершен.
Если два последних свойства не определены (равны 0), то диапазоны и ограничения не действуют.
Если пользователь выбрал печать в файл, свойство
(Р5) property PrintToFile: Boolean;
будет равно True.
Количество копий, которые необходимо отпечатать, определяется свойством:
(Pb) property Copies: Integer;
Если свойство
(pd) property Collate: Boolean;
устанавлено в True, то печать нескольких копий осуществляется последовательно: полностью первая, затем вторая и т. д. В противном случае печатаются последовательно одинаковые листы всех копий.
Компонент TFindDialog
TObject->TPersistent->
Страница Палитры компонентов Dialogs
С помощью этого диалога можно осуществить подготовку к поиску нужного фрагмента в тексте. В этом окне вы можете определить все нужные атрибуты, но написание собственно кода поиска все-таки возложено на программиста.
Рассмотрим опции, определенные в свойстве:
(pb) property Options: TFindOptions;
TFindOption= (frDown, frFindNext, frHideMatchCase, frHideWholeWord, frHideUpDown, frMatchCase, frDisableMatchCase, frDisableUpDown, frDisableWholeWord, frReplace, frReplaceAl1, frWholeWord, frShowHelp) ;
TFindOptions = set of TFindOption;
По умолчанию в диалоге имеется группа радиокнопок, задающих направление поиска текста. Ее можно настроить с помощью опций:
frDown -- в случае наличия этой опции первоначальное направление поиска -- вниз (от начала к концу). Устанавливается соответствующая радиокнопка;
frDisableUpDown -- запрещает выбор направлений. Группа радиокнопок показывается серым цветом;
frHideUpDown -- запрещает выбор направлений и прячет эту группу радиокнопок.
Поиск может осуществляться с учетом регистра символов. Если отмечен флажок Match Case, регистры символов должны совпадать, т. е. в этом случае "Word" не будет равно "word".
За состояние флажка отвечают следующие три опции:
frHideMatchCase -- прячет флажок;
frDisableMatchCase -- показывает флажок, но делает его неактивным. В обоих случаях учет регистра невозможен;
Если эти опции не установлены, флажок в диалоге активен, и его значение может быть изменено пользователем. Его значение соответствует наличию в Options опции frMatchCasc.
Также в диалоге предусмотрен флажок Match Whole Words Only, который разрешает или запрещает поиск заданного текста только в виде целых слов. Опции frHideWholeWord, frDisableWholeWord и frWholeWord имеют тот же смысл, что и три опции предыдущего флажка.
frShowHelp -- включает в состав диалога кнопку Help;
Одна опция является информационной. Когда пользователь нажал кнопку Find Next, то опция frFindNext появляется в множестве Options.
При каждом случае, когда пользователь нажал кнопку Find Next, возникает событие:
(Р1э) property OnFind: TNotifyEvent ;
В его обработчике программист должен реализовать собственно поиск. Текст, который требуется найти, нужно поместить в свойство:
(Pb) property FindText: string;
Координаты места появления диалога на экране могут быть заданы либо в виде точки
property Position: TPoint;
либо по отдельности:
property Left: Integer;
property Top: Integer;
Для вьшолнения рада оптаций программисту доступен дескриптор диалогового окна
(Ro) property Handle: HWnd;
и метод, закрывающий это окно:
procedure CloseDialog;
Компонент TReplaceDialog
TObject-->TPersistent-->
->TReplaceDialog
Модуль DIALOGS
Страница Палитры компонентов Dialogs
Этот диалог отличается от предыдущего тем, что позволяет найденный текст заменить на другой, заданный свойством:
(РЬ) property ReplaceText: string;
При нажатии кнопок Replace или Replace All в диалоге возникает событие
(Pb) property OnReplace: TNotifyEvent;
При этом в множество Options добавляется одна из новых опций -- fi-Replace или frReplaceAll. В обработчике этого события нужно предусмотреть поиск и замену текста.
Использование стандартньк диалоговых окон иллюстрирует пример DEMOEDIT. Это простой однооконный редактор текста, который, однако, использует все семь компонентов-диалогов. Для поиска и замены в нем задействован модуль SEARCH, приведенный в одном из примеров фирмы Borland. Модуль можно найти в каталоге DELPHI\DEMOS\TEXTDEMO.
Типовые диалоги
Отдельную группу составляют функции, реализующие простые типовые диалоги (не входящие в Палитру компонентов): посылка сообщения пользователю, получение от него одного из множества возможных ответов, ввод строки. В Windows API для этого предназначалась функция MessageBox. В Delphi существует целый ряд специализированных функций.
Простейшую задачу -- информирование пользователя сообщением -- можно решить при помощи функций:
procedure ShowMessage(const Msg: strings-procedure ShowMessagePos(const Msg: string; X, Y: Integer);
В этом случае диалог состоит из статического текста Msg и кнопки ОК. Вторая функция отличается тем, что диалог можно поместить в требуемую точку (X.Y).
Когда после информирования пользователя требуется получить от него определенный ответ, нужно применить одну из функций:
function MessageDig(const Msg: string; AType: TMsgDigType; AButtons:
TMsgDigButtons; HelpCtx: Longint)-: Word;
function MessageDlgPos(const Msg: string; AType: TMsgDigType;
AButtons: TMsgDigButtons; HelpCtx: Longint; X, Y: Integer): Word;
Здесь информация представлена в строке Msg и в пиктограмме, соответствующей типу диалога:
TMsgDigType = (mtWarning, mtError, mtlnformation, mtConfirmation, mtCustom) ;
В диалог можно включить любые кнопки из множества:
TMsgDIgBtn = (mbYes, mbNo, mbOK, mbCancel, mbAbort, mbRetry, mbignore, mbAll, mbHelp) ;
TMsgDigButtons = set of TMsgDIgBtn;
Для типовых случаев уже описаны подмножества кнопок:
mbYesNoCancel = [mbYes, mbNo, mbCancel];
mbOKCancel = [mbOK, mbCancel];
mbAbortRetryIgnore = [mbAbort, mbRetry, mbignore] ;
Параметр HelpCtx указывает контекст системы помощи, который будет активизирован в случае нажатия <F1>.
Как и в предыдущем случае, вторая функция отличается от первой возможностью явного задания координат верхнего левого угла диалога.
Функция
function InputBox(const ACaption, APrompt, ADefault: string): string;
есть вызов диалога с заголовком ACaption, в котором подсказка APrompt приглашает набрать в редактирующем элементе текст. Первоначально в него загружается текст ADefault. Функция возвращает строку, находившуюся в редактирующем элементе на момент закрытия диалога.
Функция
function InputQuery(const ACaption, APrompt: string;
var Value: string): Boolean;
выполняет аналогичные действия. Набранный текст будет содержаться в строке Value. Однако возвращает она булевское значение, в зависимости от того, нажал ли пользователь OK (<Enter>) или Cancel (<Esc>).
Наконец, если мало только получения ответа, и есть необходимость управлять диалогом во время его существования, воспользуйтесь функцией:
function CreateMessageDialog(const Msg: string; AType: TMsgDigType;
AButtons: TMsgDigButtons): TPorm;
Она конструирует и возвращает указатель на форму, идентичную MessageDig с соответствующими параметрами.
Внешний вид последней группы диалогов можно изменить, переустановив значения, определенные в модуле DIALOGS:
MsgDigButtonStyle: TButtonStyle = bsAutoDetect;
MsgDIgGlyphs: Boolean = True;
Работа с файловой системой
Зачастую возможностей стандартных диалогов (компоненты TOpenDialog и TSaveDialog) недостаточно для реалшации замыслов программиста. Во многих современных коммерческих приложениях перед открытием файла есть возможность получить его характеристики и предварительно просмотреть содержимое. Чтобы дать разработчикам доступ к таким функциям, в библиотеку VCL были включены по отдельности и все составные части стандартного диалога -- списки имен дисков, каталогов, файлов и фильтров расширений. Если установить между ними взаимные ссылки, то они будут работать вместе, как в TOpenDialog, безо всякого дополнительного программирования. Вместе с тем, можно описать и специфическую реакцию на изменения этих списков.
Кроме того, в эту группу компонентов включен TDirectoryOutline -- пример настройки компонента TOutline на конкретное приложение. Он отображает файловую структуру в виде дерева и также может работать в связке с остальными компонентами этого раздела.
Компонент TDriveComboBox
TObject--"TPersistent-->
->TCustornComboBox-"
Модуль 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(
begin
DirectoryListBoxl.Drive := DriveComboBoxl.Drive ;
end;
Существует и более простой путь для такого связывания. Достаточно связать компонент-список дисков с компонентом-списком каталогов, используя свойство:
(Pb) property DirList: TDirectoryListBox;
Все изменения первого будут автоматически отслеживаться вторым. Компонент
TDirectoryListBox
TObject-"TPersistent->
-->TCustomListBox->
Модуль 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 (пиктограмма, представляющая собой открытую или закрытую папку в зависимости от состояния каталога), доступный для чтения и записи.