Создание нового редактора свойств



Листинг 19.10.Создание нового редактора свойств

THintProperty = class(TStringProperty) public
function GetAttributes: TPropertyAttributes; override;
function GetValue : String; override;
procedure Edit; override; end;
function THintProperty.GetAttributes: TPropertyAttributes; begin
Result := inherited GetAttributes + [paDialog, paReadOnly]; end;
function THintProperty.GetValue : string;
var i : Byte;
begin
result:=inherited GetValue;
for i:=l to Byte(result[0]) do
if result[i]<#32 then result[ i ]:='>
'; end;
procedure THintProperty.Edit ; var
HintEditDlg : TStrEditDlg; s : string; begin
HintEditDlg:=TStrEditDlg.Create(Application);
with HintEditDlg do try
Memo.MaxLength := 254; s:=GetStrValue+#0; Memo.Lines.SetText(@s[1]);
UpdateStatus(nil);
ActiveControl := Memo; If ShowModal = mrOk then begin s: =StrPas (Memo. Lines. GetText) ; if s[0]>
#2 then Dec(Byte(s[0]),2);

SetStrValue(s);
end; finally Free; end; end;

Рассмотрим методы нового класса:

  • функция GetAttributes добавляет к унаследованному множеству атрибуты paDialog (при этом появляется кнопка в окне инспектора объектов) и paReadOnly (который применяется для того, чтобы редактирование данного свойства было возможно только через диалог);

  • функция GetValue заменяет символы перевода каретки (#10) и переход на новую строку (#13) на символ больше (>
    ).

Наконец, процедура Edit применяется для вызова диалога ввода строк всплывающей подсказки.

Для регистрации нового редактора нужно в интерфейсной части модуля поместить Объявление Процедуры Register. После чего В части Implementation модуля написать саму процедуру регистрации (листинг 19.11).



Содержание раздела