как отключить определенные ключи в Delphi - PullRequest
1 голос
/ 27 июня 2011

Я добавил следующий код в свою программу, который, как я понял, должен запрещать ввод алфавитов.Я установил для свойства KeyPreview формы значение True, затем я добавил этот код

procedure FormKeyPress(Sender: TObject; var Key: Char) ;

, который был определен как

 procedure TFibo.FormKeyPress(Sender: TObject; var Key: Char);
  begin
 if Key in ['a'..'z'] then Key := #0
  end;

Это не похоже на работу, так как я могу ввести azв компонентах редактирования формы;что я делаю не так?

Это код моей программы

 unit Unit1;

 interface

 uses
   Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
   Dialogs, StdCtrls;

 type
   TFibo = class(TForm)
   lblInput: TLabel;
   edtInput: TEdit;
   procedure FormKeyPress(Sender: TObject; var Key: Char) ;
 end;

var
  Fibo: TFibo;

implementation

{$R *.dfm}

procedure Tfibo.FormKeyPress(Sender:TObject;var Key:char);
begin
  if Key in ['a'..'z', 'A'..'Z'] then
    Key := #0
end;

end.

Ответы [ 4 ]

3 голосов
/ 27 июня 2011

Проблема решена.Установка события OnKeyPress во вкладке события сработала.

Используйте инспектор объектов формы, чтобы установить событие OnkeyPress.Я написал код, но не назначил событие через инспектор объектов.Следовательно, событие не было зарегистрировано и не было стрельбы.

3 голосов
/ 27 июня 2011

Ваш код работает нормально, поскольку он блокирует 'a' до 'z'. Возможно, ваша проблема в том, что он не блокирует символы верхнего регистра. Для этого вам понадобится:

if Key in ['a'..'z', 'A'..'Z'] then
  Key := #0
2 голосов
/ 27 июня 2011

Вы не упомянули версию Delphi. Если вы используете версию, предшествующую Unicode, просто убедитесь, что вы обрабатываете как строчные, так и прописные буквы следующим образом:

if Key in ['a'..'z', 'A'..'Z'] then Key := #0;

Если вы используете Unicode Delphi, включите модуль Character и попробуйте это:

if TCharacter.IsLetter(Key) then Key := #0;

Или вы можете попробовать использовать IsCharAlpha API-функцию:

if IsCharAlpha(Key) then Key := #0;
0 голосов
/ 27 июня 2011

При чтении между строк кажется, что вы хотите разрешить прописные буквы, но не строчные.Вместо того чтобы фильтровать строчные буквы, почему бы не установить для свойства CharCase поля ввода значение ecUpperCase?Таким образом, все введенные символы преобразуются в верхний регистр.

...