Содержание материала

Многие программисты задавая такой вопрос получают на него стандартный ответ "используй edit box." На самом же деле этот вопрос вполне решаем, хотя лейблы и не основаны на окне и, соответственно не могут получать фокус ввода и, соответственно не могут получать символы, вводимые с клавиатуры. Давайте рассмотрим шаги, которые были предприняты мной для разработки данного компонента.

 

Первый шаг, это кнопка, которая может отображать вводимый текст:

Code:

type

TInputButton = class(TButton)

private

   procedure WmChar (var Msg: TWMChar);

     message wm_Char;

end;

 

procedure TInputButton.WmChar (var Msg: TWMChar);

var

Temp: String;

begin

if Char (Msg.CharCode) = #8 then

begin

   Temp := Caption;

   Delete (Temp, Length (Temp), 1);

   Caption := Temp;

end

else

   Caption := Caption + Char (Msg.CharCode);

end;

 

 

 

С меткой (label) дела обстоят немного сложнее, так как прийдётся создать некоторые ухищрения, чтобы обойти её внутреннюю структуру. Впринципе, проблему можно решить созданием других скрытых компонент (кстати, тот же edit box). Итак, посмотрим на объявление класса:

Code:

type

TInputLabel = class (TLabel)

private

   MyEdit: TEdit;

   procedure WMLButtonDown (var Msg: TMessage);

     message wm_LButtonDown;

protected

   procedure EditChange (Sender: TObject);

   procedure EditExit (Sender: TObject);

public

   constructor Create (AOwner: TComponent); override;

end;

 

Добавить комментарий

Не использовать не нормативную лексику.

Просьба писать ваши замечания, наблюдения и все остальное,
что поможет улучшить предоставляемую информацию на этом сайте.

ВСЕ КОММЕНТАРИИ МОДЕРИРУЮТСЯ ВРУЧНУЮ, ТАК ЧТО СПАМИТЬ БЕСПОЛЕЗНО!