Главная » Delphi » Редактирование свойства в диалоговом окне

0

Иногда необходимы более  широкие возможности редактирования, чем  редакти рование на месте,  в окне  инспектора объектов. В этом  случае  в качестве редактора свойств можно  использовать диалоговое окно.  Например, большинство компонентов Delphi  имеют  свойство Font. Конечно, создатели Delphi  могли  вынудить  пользова телей  вручную набирать имя шрифта и сопутствующую  информацию. Но  было  бы неразумно ожидать, что  пользователь знает, какую именно информацию ему сле дует вводить. Гораздо проще обеспечить пользователя диалоговым окном,  в ко тором он сможет  выбрать необходимые атрибуты, относящиеся к шрифту, и уви деть результат их применения до утверждения окончательного варианта.

Чтобы проиллюстрировать использование диалогового окна  для редактирования свойства, расширим функциональные возможности компонента TddgRunButton, создание которого описано в главе 11, “Разработка компонентов VCL”. При  установке значения  свойства CommandLine в  окне  инспектора  объектов  пользователю  будет достаточно щелкнуть на кнопке с многоточием, чтобы  открыть диалоговое окно Open File и выбрать в нем файл для работы с компонентом TddgRunButton.

Пример диалогового редактора свойств: расширение возможностей компонента TddgRunButton

Текст  компонента TddgRunButton приведен в листинге 11.13 главы 11, “Разработка компонентов VCL”. Не будем полностью повторять его здесь, а лишь обратим внимание на   несколько  моментов.  Свойство  TddgRunButton.CommandLine определено  как имеющее тип TCommandLine. Этот тип определен следующим образом:

TCommandLine = type string;

Здесь  специальное объявление типа  используется для того,  чтобы  получить уни кальную информацию о типах  времени выполнения. Это позволяет определить ре дактор  свойств  специально для типа  TCommandLine. Кроме  того,  поскольку  тип TCommandLine аналогичен  строковому,  то  для  него   подойдет  редактор  свойств, предназначенный для строковых типов.

Не забывайте, что проверка наличия ошибок  присвоения уже включена в методы доступа редактора свойств  TCommandLineProperty для типа  TCommandLine. Следо вательно, нет необходимости повторять ее в логике  редактора свойств.

В листинге 12.6 приведен код редактора свойств  TCommandLineProperty.

Листинг 12.6. RunBtnPE.pas — модуль  TCommandLineProperty

unit runbtnpe;

interface uses

Windows, Messages, SysUtils, Classes, Graphics, Controls,Forms, Dialogs, StdCtrls, Buttons, DesignEditors, DesignIntf, TypInfo;

type

{ Редактор происходит от класса TStringProperty и унаследовал

его возможности редактирования строк. }

TCommandLineProperty = class(TStringProperty)

function GetAttributes: TPropertyAttributes; override;

procedure Edit; override;

end;

implementation

function TCommandLineProperty.GetAttributes: TPropertyAttributes;

begin

Result := [paDialog]; // Отображение диалогового окна

end;                      // в методе Edit.

procedure TCommandLineProperty.Edit;

{ Метод Edit отображает окно TOpenDialog, из которого пользователь

получает имя исполняемого файла, присваиваемое свойству. }

var

OpenDialog: TOpenDialog;

begin

{ Создать окно TOpenDialog }

OpenDialog := TOpenDialog.Create(Application);

try

{ Отображать только исполняемые файлы }

OpenDialog.Filter := ‘Executeable Files|*.EXE';

{ Если пользователь выбрал файл, присвоить его свойству. }

if OpenDialog.Execute then

SetStrValue(OpenDialog.FileName);

finally

OpenDialog.Free // Освободить экземпляр класса TOpenDialog.

end;

end;

end.

Ознакомившись с компонентом TCommandLineProperty, можно  понять, что этот редактор свойств очень  прост.  Он происходит от класса  TStringProperty и, следо вательно, поддерживает средства редактирования строк.  Поэтому  необязательно вы зывать  диалоговое окно в инспекторе объектов. Пользователь может вручную набрать командную  строку.  К тому же не понадобится переопределять методы  SetValue() и GetValue(), так как в компоненте TStringProperty это  уже сделано  надлежащим образом. Тем не менее  необходимо переопределить метод  GetAttributes() для то го, чтобы  инспектор свойств “знал”,  что  свойство можно  редактировать с помощью диалогового окна.  Метод  GetAttributes() заслуживает более  подробного обсужде ния.

Установка атрибутов редактора свойств

Каждый  редактор свойств должен  сообщить инспектору объектов о способе ре дактирования свойства и об использовании специальных атрибутов, если таковые имеются. В большинстве случаев достаточно атрибутов, унаследованных от базового класса редактора. Но иногда  придется переопределить метод GetAttributes(), воз вращающий набор  флагов  атрибутов свойства (флаги TPropertyAttributes). Этот набор  указывает, для каких атрибутов используются специальные редакторы свойств. Флаги типа TPropertyAttribute приведены в табл. 12.3.

Таблица 12.3. Флаги TPropertyAttribute

Атрибут                                     Как редактор свойств работает с инспектором объектов

paValueList      Возвращает перечислимый список  значений свойства. Метод GetValue() заполняет список.  Справа  от значения свойства находится кнопка  с изображением стрелки, направленной вниз.  Применяется для таких  перечислимых свойств, как TForm.BorderStyle,  и  таких   групп   целочисленных  кон стант, как TColor и TCharSet

paSubProperties  Подчиненные   свойства  отображаются  с   отступом    ниже текущего  свойства в формате иерархической структуры. Атрибут    paValueList также    должен    быть    установлен. Устанавливается для свойств типа “множество” или типа “класс”, таких как TOpenDialog.Options и TForm.Font

paDialog         Появляется кнопка   с  многоточием, по  щелчку  на  которой метод  Edit() вызывает диалоговое окно.  Применяется  для свойств  наподобие TForm.Font

paMultiSelect    Свойства  отображаются,  даже  если   в  конструкторе форм выбрано больше  одного  компонента; это позволяет пользо вателю  изменять значения свойств сразу нескольких ком понентов. Некоторые свойства, например Name, не  поддер живают  этой возможности

paAutoUpdate     Метод   SetValue() вызывается  при    каждом    изменении свойства. Если  этот  флаг  не  установлен, SetValue() вызы вается   при   нажатии  клавиши   <Enter> или  при   выходе   из свойства  в  окне   инспектора  объектов.  Применяется  для таких свойств, как TForm.Caption

paFullWidthName  Сообщает инспектору объектов о том,  что  это  значение не нуждается  в дополнительном представлении,  а  значит, его имя следует отображать, используя всю ширину  окна инспек тора объектов

paSortList            Инспектор объектов сортирует список, возвращаемый функ

цией GetValues()

paReadOnly           Значение свойства не может быть изменено

paRevertable  Свойству можно  вернуть  его  прежнее  значение.  Но  некото рые   свойства,  например  вложенные  (такие  как   TFont), восстановлению не подлежат

НА ЗАМЕТКУ

Обратите внимание на установленные флаги TPropertyAttribute для различных редакторов свойства в файле DesignEditors.pas.

Установка атрибута paDialog для свойства типа

TCommandLineProperty

Поскольку компонент  TCommandLineProperty используется  для  отображения диалогового окна,  необходимо сообщить инспектору объектов об этой  возможности, установив атрибут  paDialog в методе  TCommandLineProperty.GetAttributes(). В таком  случае справа  от значения свойства CommandLine в окне  инспектора объек тов  появится кнопка  с многоточием. Если пользователь щелкнет на этой  кнопке, то будет вызван метод TCommandLineProperty.Edit().

Регистрация редактора свойств TCommandLineProperty

Завершающим этапом  реализации редактора свойств TCommandLineProperty яв ляется его регистрация с помощью описанной ранее в настоящей главе процедуры Reg- isterPropertyEditor(). Эта процедура была добавлена в процедуру  Register() в модуле DDGReg.pas, входящем в состав пакета DdgDsgn:

RegisterComponents(‘DDG’, [TddgRunButton]); RegisterPropertyEditor(TypeInfo(TCommandLine), TddgRunButton,

”, TCommandLineProperty);

Помните о  том,  что  в  раздел   uses необходимо  добавить  модули  DsgnIntf и

RunBtnPE.

Источник: Тейксейра, Стив, Пачеко, Ксавье.   Borland Delphi 6. Руководство разработчика. : Пер.  с англ. — М. : Издательский дом “Вильямс”, 2002. —  1120 с. : ил. — Парал. тит. англ.

По теме:

  • Комментарии