Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Автозамена формата времени в компоненте Edit: HH:MM

Delphi , Программа и Интерфейс , IDE и Компилятор

При работе с компонентом Edit в Delphi часто возникает необходимость валидировать вводимое пользователем время в формате HH:MM. Для этого можно использовать компоненты TMaskEdit или TDateTimePicker, но они могут не подходить для всех случаев использования. В этой статье мы рассмотрим, как реализовать автозамену формата времени в компоненте Edit без использования дополнительных компонентов.

Подход к решению задачи

Идея состоит в том, чтобы перехватить нажатие клавиш в компоненте Edit и автоматически корректировать введенное пользователем время в нужный формат. Для этого можно использовать процедуру KeyPress компонента Edit.

Пример кода на Object Pascal (Delphi):

procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
var
  i: Integer;
  s: string;
begin
  // Ограничиваем длину вводимого текста до 5 символов (HH:MM)
  Edit1.MaxLength := 5;

  // Получаем длину текущего текста в компоненте Edit
  i := Length(Edit1.Text) + 1;

  // Определяем, какая клавиша была нажата
  case i of
    1:  // Если длина текста равна 0, то разрешаем ввод только цифр от 0 до 2
         if not (Key in ['0'..'2']) then
           Key := #0;
    2:  // Если длина текста равна 1, то разрешаем ввод только цифр от 0 до 3
         if not (Key in ['0'..'3']) then
           Key := #0;
    3:  // Если длина текста равна 2, то разрешаем ввод только цифр от 0 до 9 и символа ':'
         if (Key in ['0'..'9', ':']) then
         begin
           // Если введена цифра, то добавляем символ ':' после второй цифры
           if (Key in ['0'..'9']) then
           begin
             s := Edit1.Text;
             Insert(':', s, 2);
             Edit1.Text := s;
           end;
         end
         else
           Key := #0;
  end;
end;

Описание работы кода

При нажатии клавиши в компоненте Edit вызывается процедура KeyPress. В зависимости от длины текущего текста в компоненте Edit разрешается ввод определенных символов. Если длина текста равна 0, то разрешается ввод только цифр от 0 до 2. Если длина текста равна 1, то разрешается ввод только цифр от 0 до 3. Если длина текста равна 2, то разрешается ввод только цифр от 0 до 9 и символа ':'. При вводе цифры после второй цифры автоматически добавляется символ ':'.

Альтернативное решение

Вместо перехвата нажатия клавиш в компоненте Edit можно использовать другой подход, который заключается в проверке введенного текста после каждого изменения. При этом можно не только автоматически корректировать формат времени, но и сообщать пользователю о недопустимом вводе. Пример кода на Object Pascal (Delphi):

procedure TForm1.Edit1Change(Sender: TObject);
var
  i: Integer;
  s: string;
begin
  // Получаем текст из компонента Edit
  s := Edit1.Text;

  // Проверяем длину текста
  if Length(s) > 5 then
  begin
    // Если длина текста больше 5, то обрезаем его до 5 символов
    s := Copy(s, 1, 5);
    Edit1.Text := s;
    Exit;
  end;

  // Проверяем формат времени
  if (Length(s) = 3) and (s[2] <> ':') then
  begin
    // Если формат времени некорректный, то добавляем символ ':' после второй цифры
    s := Copy(s, 1, 2) + ':' + Copy(s, 3, Length(s) - 2);
    Edit1.Text := s;
  end;

  // Проверяем введенные символы
  for i := 1 to Length(s) do
  begin
    // Если введенный символ не является цифрой, то удаляем его
    if not (s[i] in ['0'..'9']) then
    begin
      s := Copy(s, 1, i - 1) + Copy(s, i + 1, Length(s) - i);
      Edit1.Text := s;
    end;
  end;
end;

Описание работы кода

При изменении текста в компоненте Edit вызывается процедура Change. В ней проверяется длина текста и его формат. Если длина текста больше 5, то он обрезается до 5 символов. Если формат времени некорректный, то автоматически добавляется символ ':' после второй цифры. Далее проверяются все введенные символы. Если какой-либо символ не является цифрой, то он удаляется из текста.

Вывод

В данной статье мы рассмотрели два подхода к реализации автозамены формата времени в компоненте Edit: перехват нажатия клавиш и проверка введенного текста после каждого изменения. Каждый из этих подходов имеет свои достоинства и недостатки, и выбор между ними зависит от конкретной задачи и требований к пользовательскому интерфейсу.

Создано по материалам из источника по ссылке.

Автозамена формата времени в компоненте Edit в Delphi осуществляется без дополнительных компонентов, путем перехвата нажатия клавиш или проверки введенного текста после каждого изменения.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: IDE и Компилятор ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-01-29 05:54:09/0.0034549236297607/0