![]() |
![]() |
![]() |
18.5. КОМПОНЕНТЫ СТРАНИЦЫ DIALOGS
В состав Windows входит ряд типовых диалоговых окон, таких как окно выбора загружаемого файла, окно выбора шрифта, окно для настройки принтера и т. д. В Delphi реализованы классы, объекты которых дают программисту удобные способы создания и использования таких окон.
Работа со стандартными диалоговыми окнами осуществляется в три этапа.
Вначале на форму помещается соответствующий компонент и осуществляется настройка его свойств (следует заметить, что собственно компонент-диалог не виден в момент работы программы, видно лишь создаваемое им стандартное окно). Настройка свойств может проходить как на этапе конструирования, так и в ходе прогона программы. Как и для любых других компонентов, программист не должен заботиться о вызове конструктора и деструктора диалога - эти вызовы реализуются автоматически в момент старта и завершения программы.
На втором этапе осуществляется вызов стандартного для диалогов метода Execute, который создает и показывает на экране диалоговое окно. Вызов этого метода обычно располагается внутри обработчика какого-либо события. Например, обработчик выбора опции меню
Открыть файл может вызвать метод Execute Диалога TOpenDialog, обработчик нажатия инструментальной кнопки сохранить может вызвать такой же метод у компонента TSaveDialog и т. д. Только после обращения к Execute на экране появляется соответствующее диалоговое окно. Окно диалога является модальным окном, поэтому сразу после обращения к Execute дальнейшее выполнение программы приостанавливается до тех пор, пока пользователь не закроет окно. Поскольку Execute - логическая функция, она возвращает в программу True, если результат диалога с пользователем был успешным.
Проанализировав результат Execute, программа может выполнить третий этап - использование введенных с помощью диалогового окна данных - имени файла, настроек принтера, выбранного шрифта и т. д.
Проиллюстрируем сказанное следующим примером. Создадим простую программу для просмотра содержимого текстового файла. Для этого на пустую форму поместите компонент TOpenDialog, a также кнопку TButton и редактор TMето. При работе программы щелчок по кнопке будет сигналом о необходимости загрузить в редактор новый файл. Создайте такой обработчик события OnClick этой кнопки:
procedure TForm1.Button1Click(Sender: TObject);
var
S: String;
F: TextFile;
begin
// Настраиваем диалог на отбор текстовых файлов:
OpenDialogI.Filter :== 'Текстовые файлы|*.txt|'+ 'Файлы Паскаля|*.pas';
// Выполняем диалог и анализируем его результат if OpenDialogI.Execute and FileExists(OpenDialogI.FileName) then
begin
// Результат успешный - пользователь выбрал файл
// Открываем файл
AssignFile(F, OpenDialogI.FileName) ;
Reset(F);
Memol.Lines.Clear; // Очищаем редактор
while not EOF(F) do // и наполняем его
begin
ReadLn(F, S) ;
Memol.Lines.Add(S)
end;
CloseFile(F)
end
end;
18.5.1. TOpenDialog и TSaveDialog - диалоги открытия и сохранения файлов
Эти компоненты имеют идентичные свойства и поэтому рассматриваются вместе. Пример окна TOpenDialog показан на рис. 18.38.
Свойство FileName: string содержит маршрут поиска и выбранный файл при успешном завершении диалога. Программа может использовать это свойство для доступа к файлу с целью читать из него данные (TOpenDialog) или записывать в него (TSaveDialog). Замечу, что пользователь может ввести произвольное имя и, следовательно, указать несуществующий файл. Для записи это не имеет значения, но при чтении отсутствие файла может привести к краху программы. Чтобы избежать этого, можно проверить существование файла глобальной функцией FileExists, как это сделано в предыдущем примере, или использовать механизм обработки исключительных ситуаций.
Рис. 18.38 . Стандартное окно TOpenDialog
Свойство Filter: string используется для фильтрации (отбора) файлов, показываемых в диалоговом окне. Это свойство можно устанавливать с помощью специального редактора на этапе конструирования формы или программно, как это сделано в предыдущем примере. Для доступа к редактору достаточно щелкнуть по кнопке в строке Filter окна Инспектора объектов. При программном вводе фильтры задаются одной длинной строкой, в которой символы “|” служат для разделения фильтров друг от друга, а также для разделения описания фильтруемых файлов от соответствующей маски выбора. Например, оператор
OpenDialogI.Filter := 'Текстовые файлы|*.txt| Файлы Паскаля|*.раs';
задает две маски - для отбора файлов с расширениями раs и TXT.
Установить начальный каталог позволяет свойство InitialDir string. Например:
OpenDialogI.InitiaiDir := 'c:\program files\borland\delphi5\source';
С помощью свойства DefaultExt: String [ 3 ] формируется полное имя файла, если при ручном вводе пользователь не указал расширение. В этом случае к имени файла прибавляется разделительная точка и содержимое этого свойства.
В диалоговом окне для ручного ввода предусмотрен элемент TEdit, который при желании можно заменить на TCоmbовох. Для этого необходимо свойству FileEditStyle придать значение fsComboBox вместо умалчиваемого fsEdit. Если выбран комбинированный список, с ним можно связать протокол выбора имен. Для этого используется свойство HistoryList: TStrings, содержимое которого будет появляться в выпадающем списке. Этот список не пополняется автоматически, поэтому за его содержимым должна следить программа. Например:
if OpenDialogI.Execute then
begin
HistoryList.Add(OpenDialogI.FileName);
end;
Настройка диалога может варьироваться с помощью свойства
TOpenOption = (ofReadOnly, ofOverwritePrompt, ofHideReadOnly, ofNoChangeDir, ofShowHelp, ofNoValidate, ofAllowMultiSelect, ofExtensionDifferent, ofPathMustExist, ofFileMustExist, ofCre-atePrompt, ofShareAware, ofNoReadOnlyReturn, ofNoTestFileCre-ate, ofNoNetworkButton, ofNoLongNames, ofOldStyleDialog, of-NoDereferenceLinks) ;
TOpenOptions = set of TOpenOption;
property Options: TOpenOptions;
Значения этого свойства имеют следующий смысл:
ofReadOnly |
Устанавливает переключатель Только для чтения |
ofOverwritePrompt |
Требует согласия пользователя при записи в существующий файл |
ofHideReadOnly |
Прячет переключатель Только для чтения |
OfNoChangeDir |
Запрещает смену каталога |
ofShowHelp |
Включает в окно кнопку Help |
ofNoValidate |
Запрещает автоматическую проверку правильности набираемых в имени файла символов |
OfAllowMultiSelect |
Разрешает множественный выбор файлов |
ofExtensionDifferent
|
При завершении диалога наличие этого значения в свойстве options говорит о том, что пользователь ввел расширение, отличающееся от умалчиваемого |
ofPathMustExist |
Разрешает указывать файлы только из существующих каталогов |
ofFileMustExist |
Разрешает указывать только существующие файлы |
ofCreatePrompt |
Требует подтверждения для создания несуществующего файла |
ofShareAware |
Разрешает выбирать файлы, используемые другими параллельно выполняемыми программами |
OfNoReadOnlyReturn |
Запрещает выбор файлов, имеющих атрибут Только для чтения |
ofNoTestFileCreate
|
Запрещает проверку доступности сетевого или локального диска |
OfNoNetworkButton |
Запрещает вставку кнопки для создания сетевого диска |
ofNoLongNames |
Запрещает использование длинных имен файлов |
ofOldStyleDialog |
Создает диалог в стиле Windows 3-х |
Если разрешен множественный выбор, доступ к выбранным именам можно получить в свойстве Files: strings.
18.5.2. TOpenPictureDialog и TSavePictureDialog - диалоги открытия и сохранения изображений
Специализированные диалоги для открытия и сохранения графических файлов TOpenPictureDialog И TSavePictureDialog отличаются от
TOpenDialog и TSaveDialog двумя обстоятельствами. Во-первых, в них предусмотрены стандартные фильтры для выбора графических файлов (с расширениями bmp, ico, wmf и emf) . Во-вторых, в окна диалога включены панели для предварительного просмотра выбираемого файла.
На рис. 18.39 показано стандартное окно компонента TOpenPictureDialog.
18.5.3. TFontDialog - диалог выбора шрифта
Компонент TFontDialog создает и обслуживает стандартное окно выбора шрифта (рис. 18.41). Свойство
TFontDialogDevice = (fdScreen, fdPrinter, fdBoth) ;
property Device: TFontDialogDevice;
определяет тип устройства, для которого выбирается шрифт:
fdScreen - экран; fdPrinter - принтер; fdBoth - шрифты, поддерживаемые и экраном, и принтером.
Рис. 18.39. Стандартное окно TopenPictureDialog
Рис. 18.40. Стандартное окно TFontDialog
Диапазон возможных значений размеров шрифтов определяется свойствами MinFontSize и MaxFontSize. Значения этих свойств задаются в пунктах (1 пункт равен1/72 дюйма, что приблизительно равно 0,36 мм). Если свойства содержат 0, ограничения на размер шрифта отсутствуют.
Свойство
TFontDialogOption = (fdAnsiOnly, fdTrueTypeOnly, fdEffects, fdFixedPitchOnly, fdForceFontExist, fdNoFaceSel, fdNoOEMFonts, fdNoSimulations, fdNoSizeSel, fdNoStyleSel, fdNoVectorFonts, fdShowHelp, fdWysiwyg, fdLimitSize, fdScalableOnly, fdApply-Button);
TFontDialogOptions = set of TFontDialogOption;
property Options: TFontDialogOptions;
используется для настройки диалога. Значения этого свойства имеют следующий смысл:
fdAnsiOnly |
Показывает только шрифты с набором символов Windows |
fdTrueTypeOnly |
Показывает только TrueType-шрифты |
fdEffects |
Включает в окно переключатели Подчеркнутый и Зачеркнутый, а также список выбора цвета шрифта только моноширинные шрифты |
fdFixedPitchOnly |
Включает только моноширинные шрифты |
fdForceFontExist |
Предупреждает о выборе несуществующего шрифта |
fdNoFaceSel |
Запрещает выделение имени шрифта в момент открытия окна |
fdNoOEMFonts |
Запрещает выбор MS-DOS-шрифтов |
fdNoSimulations |
Исключает шрифты, которые синтезируются графическим интерфейсом Windows |
fdNoSizeSel |
Запрещает выделение размера шрифта в момент открытия окна |
fdNoStyleSel |
Запрещает выделение стиля шрифта в момент открытия окна |
fdNoVectorFonts |
Исключает векторные шрифты (шрифты для Windows версии 1.0; используются в плоттерах) |
fdShowHelp |
Включает в диалоговое окно кнопку Help шрифты, которые поддерживаются и экраном, и принтером |
fdWysiwyg |
Включает шрифты, которые поддерживаются и экраном, и принтером |
fdLimitSize |
Включает ограничения на размер шрифта, заданные свойствами MaxFontSize И MinFontSize |
fdScalableOnly |
Включает только масштабируемые шрифты (векторные и TrueType) |
fdApplyButton |
Включает в окно кнопку применить |
Результат выбора шрифта содержит свойство Font.
18.5.4. TColorDialog - диалог выбора цвета
Компонент создает и обслуживает стандартное диалоговое окно выбора цвета, показанное на рис. 18.42.
Свойства компонента:
property Color: TColor; |
Содержит выбранный цвет |
property CustomColors: TStrings; |
Содержит до 16 цветов, определенных пользователем. Каждая строка имеет такой формат: Со1огх=нннннн, где х - буква от а до р, определяющая номер цвета, нннннн ~ шестнадцатеричное представление цвета в формате rgb |
TColorDialogOption = (cdFullOpen, cdPreventFullOpen, cdShowHelp, cdSolidColor, cdAnyColor) ; TColorDialogOptions = set of TColorDialogOption; property Options: TColorDialogOptions; |
Определяет настройку окна: cdFullOpen -показывать с развернутым окном выбора цвета пользователя; cdPreventFullOpen -запретить показ окна выбора цвета пользователя; cdShowHelp - включить в окно кнопку Help; cdSolidColor - выбирать ближайший сплошной цвет; cdAnyColor -разрешить выбор не сплошных цветов |
Рис. 18.41 . Стандартное окно компонента TColorDialog
18.5.5. TPrintDialog - диалог настройки параметров печати
Компонент TPrintDialog создает стандартное диалоговое окно для выбора параметров печати, показанное на рис. 18.42.
Рис. 18.42. Стандартное окно компонента TPrintDialog
Свойства компонента:
property Collate: Boolean;
|
Если имеет значение True, окно показывается с выбранным переключателем разобрать (collate). Если этот переключатель выбран, печать нескольких копии документа будет идти по копиям: сначала первая копия, затем вторая и т. д., в противном случае - по страницам: сначала все копии первой страницы, затем второй и т. д |
property Copies: Integer; |
Определяет количество копии (0 - одна копия) |
property FromPage: Integer |
Определяет начальную страницу печати |
property MaxPage: Integers; |
Определяет верхнюю границу диапазона страниц для свойств FromPage, ToPage |
property MinPage: Integer;
|
Определяет нижнюю границу диапазона страниц для свойств FromPage, ToPage |
TPrintDialogOption = (poPrintToFile, poPageNums, poSe- lection, poWarning, poHelp, poDisablePrintToFile) ; TPrintDialogOptions = set of TPrintDialogOption; property Options: TPrintDialogOptions; |
Определяет настройку окна: poPrintToFile - печатать в файл; poPrintToFile - разрешает выбор диапазона страниц; poSelection - разрешает печать выбранного текста; poWarning - предупреждать пользователя о неустановленном принтере; poHelp вставить в окно кнопку Help; poDisablePrintToFile - запрещает печать в файл |
TPrintRange = (prAllPages, prSelection, prPageNums) ; property PrintRange: TPrintRange; |
Определяет диапазон печатаемых страниц: prAllPages - все страницы; preelection - выделенный фрагмент текста; prPageNums - страницы по номерам |
property PrintToFile: Boolean;
|
Содержит True, если пользователь выбрал печать в файл |
property ToPage: Integer; |
Определяет конечную страницу печати |
18.5.6. TPrinterSetupDialog - диалог настройки параметров принтера
Компонент создает окно настройки параметров принтера, вид которого зависит от типа принтера. Этот диалог взаимодействует с драйвером принтера и не возвращает в программу никакой информации, поэтому его метод Execute - процедура, а не функция.
18.5.7. TFindDialog - диалог поиска
Стандартное диалоговое окно компонента TFindDialog используется для поиска фрагмента текста (рис. 18.43).
Свойства компонента:
property FindText: String; |
Указывает образец для поиска |
property Left: Integer; |
Содержит горизонтальную позицию левого верхнего угла места появления окна |
property Options: TFindOptions; |
Определяет настройку диалога (см. ниже) |
property Position: TPoint; |
Содержит горизонтальную и вертикальную позицию левого верхнего угла места появления окна |
property Top: Integer; |
Содержит вертикальную позицию левого верхнего угла места появления окна |
Для компонента определен следующий тип, использующийся в свойстве options:
TFindOption = (frDown, frFindNext, frHideMatchCase, frHideWholeWord, frHideUpDown, frMatchCase, frDisableMatchCase, frDisableUpDown, frDisableWholeWord, frReplace, frReplaceAll, frWholeWord, frShowHelp) ;
TFindOptions = set of TFindOption;
Рис. 18.43 . Стандартное окно компонента TFindDialog
Его значения имеют следующий смысл:
frDown frFindNext |
Устанавливает поиск вперед по тексту |
frHideMatchCase |
Сообщает программе, что пользователь нажал кнопку Найти далее Убирает выбор в переключателе с учетом регистра |
frHideWholeWord |
Убирает выбор в переключателе только слово целиком |
frHideUpDown |
Прячет кнопки выбора направления поиска |
frMatchCase |
Устанавливает выбор в переключателе с учетом регистра |
frDisableMatchCase |
Запрещает выбор С учетом регистра |
frDisableUpDown |
Запрещает выбор направления поиска |
frDisableWholeWord |
Запрещает выбор только слово целиком |
frReplace |
Используется в компоненте TReplacteDialog и указывает на необходимость замены текущего выбора |
frReplaceAll |
Используется в компоненте TreplaceDialog и указывает на необходимость замены всех вхождений образца поиска |
frWholeWord |
Устанавливает выбор в переключателе Только слово целиком. |
frShowHelp |
Включает в окно кнопку Help |
Спецификой диалога является реализуемая им возможность просмотра найденного фрагмента и при необходимости продолжение поиска. С этой целью для компонента определено событие OnFind:
TNotifyEvent, которое возникает всякий раз, когда пользователь нажимает кнопку найти далее. Обработчик события должен найти образец в тексте и показать его пользователю. Пусть, например, компонент Memol содержит отыскиваемый фрагмент и поиск идет с учетом регистра. Тогда обработчик может иметь такой вид:
procedure TFormI.FindDialoglFind(Sender: TObject);
var
SelPos: Integer;
begin
with TFindDialog(Sender) do
begin
// Ищем фрагмент в тексте
SelPos := Pos(FindText, Memol-Lines.Text);
if SelPos > 0 then
begin // Фрагмент найден - выделяем его
Memol.SelStart := SelPos - 1;
Memol.SelLength := Length(FindText);
end
else
ShowMessage ('Текст "' + FindText + '"не найден')
end;
end;
18.5.8. TReplaceDialog - диалог поиска и замены
Компонент TReplaceDialog создает и обслуживает окно поиска и замены текстового фрагмента (см. рис. 18.44).
Рис. 18.44 . Стандартное окно компонента TReplaceDialog
Класс TReplaceDialog является прямым потомком класса TFindDialog и наследует от него большинство свойств. Дополнительно в компоненте определено свойство RepiaceText: string, в котором содержится текст замены, и событие OnRepiace, которое возникает
При нажатии кнопки заменить или з аменить все.
![]() |
![]() |
![]() |