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

Проверить, числовое ли введено значение

Delphi , Синтаксис , Типы и Переменные

Проверить, числовое ли введено значение

Оформил: DeeCo
Автор: http://www.swissdelphicenter.ch

uses
  ClipBrd;

 procedure TForm1.Edit1KeyDown(Sender: TObject; var Key: Word;
   Shift: TShiftState);
 var
   Mgs: TMsg;

   procedure EatKey;
   { Clear Keyboardbuffer / Tastaturbuffer leeren }
   begin
     PeekMessage(Mgs, 0, WM_CHAR, WM_CHAR, PM_REMOVE);
   end;

 begin
   { Check if control pressed / uberprufen, ob Control Taste gedruckt }
   if (ssCtrl in Shift) then
     case key of
       { Ctrl + v }
       86:
         begin
           { determine if the Clipboard contains a string type }
           { uberprufen, ob es Text in der Zwischenablage hat }
           if Clipboard.HasFormat(CF_TEXT) then
             { Check if text consists of numbers }
             { uberprufen, ob der Text aus Zahlen besteht }
             try
               StrToInt(Clipboard.AsText);
             except
               { If no then don't insert text }
               { Wenn nein, dann ignoriere das Einfugen }
               EatKey
             end;
         end;
       { Ctrl + c }
       67: { do nothing / nichts machen }
         else
           EatKey;
     end
   { else check for allowed characters such as BackSpace, RETURN...}
   { sonst auf erlaubte Zeichen uberprufen }
   else if not (Char(Key) in [#8, #13, '.', '0'..'9','`'..'i' ]) then EatKey;
 end;

 // Use your own Popup Menu to customize paste. 

Привет! Я переведу контент на русский язык.

Код, предоставленный ниже, является частью приложения Delphi, которое стремится ограничить вставку текста в контроле редактирования (Edit1) в зависимости от определенных условий.

Вот что он делает:

  • Когда пользователь нажимает кнопку, держа Ctrl-кнопку, код проверяет, содержит ли буфер обмена строку.
  • Если буфер обмена содержит строку и нажатая кнопка - 'v' (Ctrl+V), код пытается преобразовать текст в буфере обмена в целое число с помощью функции StrToInt().
  • Если преобразование не удалось (т.е. текст в буфере обмена не состоит из цифр), код очищает буфер клавиатуры с помощью функции PeekMessage() и игнорирует операцию вставки.
  • Если нажатая кнопка - 'c' (Ctrl+C) или любая другая кнопка, которая не разрешена (например, Backspace, RETURN и т.д.), код также очищает буфер клавиатуры.

Этот код seems to be designed for a specific purpose, such as preventing unwanted text from being pasted into an edit control in a financial or mathematical application where only numbers are allowed.

Вот возможное альтернативное решение с использованием регулярных выражений:

uses
  ClipBrd,
  RegEx;

procedure TForm1.Edit1KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
var
  Mgs: TMsg;
begin
  if (ssCtrl in Shift) then
    case Key of
      86: // Ctrl + V
        begin
          if Clipboard.HasFormat(CF_TEXT) then
            try
              if not RegEx.IsMatch(Clipboard.AsText, '\d+') then
                EatKey;
            except
              EatKey;
            end;
        end;
      67: // Ctrl + C
        else
          EatKey;
    end
  else if not (Char(Key) in [#8, #13, '.', '0'..'9', '`'..'i']) then
    EatKey;
end;

procedure EatKey;
begin
  PeekMessage(Mgs, 0, WM_CHAR, WM_CHAR, PM_REMOVE);
end;

В этом коде используется unit RegEx для проверки, содержит ли текст в буфере обмена только цифры с помощью регулярного выражения. Если не содержит, код очищает буфер клавиатуры и игнорирует операцию вставки.

В статье описывается процедура на языке Delphi, которая позволяет проверять, является ли введенное значение числовым при нажатии клавиши Вставка (Ctrl+V) в текстовом поле.


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

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




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


:: Главная :: Типы и Переменные ::


реклама


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

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