2015-05-06 3 views
2

Я хочу создать новый компонент, который ведет себя точно так же, как TEdit, но заменяет некоторые символы текста, введенного в него. Например, когда кто-то вводит «abc» в новый компонент, я хочу, чтобы Text-Property возвращал «aac», когда он читается в исходном коде.Переопределить чтение и запись свойства базового класса

type 
    TMyEdit = class(TEdit) 
    public 
    property Text : TCaption read GetText; 
    end; 

Нечто подобное.

Можно ли переопределить существующее свойство с помощью новой функции чтения для этого свойства и не изменять функцию записи для этого свойства?

С уважением

+0

Это VCL или FMX? –

+0

Это VCL Delphi XE – skylla

ответ

1

Как было сказано ранее:

Лучший подход заключается в использовании TMaskEdit

Но если вы действительно хотите, чтобы реализовать поведение, то это может быть сделано как это:

type 
    TMyEdit = class(TEdit) 
    private 
    function GetText: TCaption; 
    procedure SetText(const Value: TCaption); 
    public 
    property Text: TCaption read GetText write SetText; 
    end; 

{ TMyEdit } 

function TMyEdit.GetText: TCaption; 
begin 
    Result := 'TMyEdit' + inherited Text; 
end; 

procedure TMyEdit.SetText(const Value: TCaption); 
begin 
    inherited Text := Value; 
end; 

Итак, я создаю и GetText, и SetText settext просто вызывает унаследованное свойство Text, в то время как GetText меняет результат

+0

Привет, Спасибо за ваше предложение. Однако, если я попытаюсь прочитать текст из этого компонента, я получаю много нарушений доступа. Вы случайно не знаете, в чем проблема? – skylla

+1

Да. Я сделал ошибку. Теперь нужно исправить –

+1

Спасибо, именно то, что я искал! – skylla

0
TMyEdit = class(TEdit) 
protected 
    procedure Change; override; 
end; 

procedure TMyEdit.Change; 
begin 
    Self.Text := StringReplace(Self.Text, 'aaa', 'ccc'); 
    inherited; 
end; 
+0

Однако лучший подход - использовать TMaskEdit –

+0

. Я не думаю, что это то, о чем спрашивает вопрос. Я понял, что этот OP хочет получить текст, отличный от того, что установлено из свойства Text. Вы изменяете это свойство. – TLama

Смежные вопросы