Собственное сообщение для маски ввода (Maskedit Delphi)

Delphi маска ввода

Здравствуйте. Сегодня мы поговорим о таком очень интересном компоненте как маска ввода или компонент TMaskedit. Также мы затронем не только особенность формирования сообщений с помощью данного компонента, но и случай, когда маска ввода указывается у поля набора данных. В этом случае мы не используем компонент TMaskedit, но используем маску самого поля. Но обо всем по порядку.

Итак, многие из нас знаю, что из себя представляет компонент Maskedit Delphi. Он позволяет задать маску ввода. Это удобно, когда необходимо ввести государственный номер автомобиля, номер телефона, дату или, например, какой-нибудь серийный номер, где каждый элемент должен находиться на определенной позиции. Очень удобно использовать для этого TMaskedit.

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

При использовании компонента TMaskedit в модуле формы, где он используется необходимо перед описание типа данных формы создать следующий тип данных:

type
      TMaskEdit = class(Vcl.Mask.TMaskEdit)
   protected
      procedure ValidateError; override;
end;

Давайте рассмотрим пример, когда с помощью TMaskEdit задается государственный номер автомобиля. В свойстве EditMask компонента TMaskEdit мы задаем маску ввода: >L 000 LL RUS;1;_

Затем в разделе implementation модуля формы после подключения других модулей пишем:

procedure TMaskEdit.ValidateError;
begin
    if Pos(' ', frmCar.mskGosNumber.text) > 0 then
    begin
       ShowMessage('Гос. номер задан не верно!');
    end;
end;

Теперь, когда значение номера будет введено не корректно, то при попытке потери фокуса с объекта MaskEdit будет сгенерировано не системное сообщение об ошибке, а вполне себе читаемое пользовательское сообщение. Естественно, что для еще большего улучшения внешнего вида приложения вместо ShowMessage можно использовать свое собственное окно с сообщением.

Теперь рассмотрим случай, когда маска задается не с помощью компонента MaskEdit, а с помощью визуального компонента, привязанного к полю набора данных. Это наиболее частый случай в практике. Например, это может быть таблица TDBGrid, поле которой привязано к полю «Телефон» набора данных или компонент TDBEdit, привязанный также к полю «Телефон» набора данных.

Чтобы решить эту проблему, необходимо задать статические поля для набора данных. Выбрать интересующее нас статическое поле (в нашем случае это поле «Телефон») и в свойстве EditMask написать маску: +7 (999) 999-99-99;1;_ так, как показано на рисунке ниже:

В событии onSetText этого поля написать:

procedure TfrmUser.adoUserТелефонSetText(Sender: TField;
  const Text: string);
begin
    if Text <> '+7 (   )    -  -  ' then
    begin
        if Pos(' ', text) > 0 then
        begin
            ShowMessage('Не верно задан номер телефона!');
            txtTel.SetFocus;
            abort
        end else
            Tfield(Sender).Value:=StrToDate(Text);
    end else
           Tfield(Sender).Clear;
end;

Теперь, при потере фокуса с этого поля будет проверяться корректность ввода номера телефона и если номер телефона будет заполнен не полностью, то пользователь получит сообщение:

Примечание: В данном примере вместо стандартного сообщения, вызываемого методом ShowMessage задано свое окно с сообщением.

В следующем посте мы рассмотрим как контролировать правильность ввода даты с помощью таких же методов, которые мы только что описали.

Понравилась статья? Поделиться с друзьями:
Блог Алексея Иванкова
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: