代码之家  ›  专栏  ›  技术社区  ›  DeeJay007

Inno设置限制按键上的某些特殊字符

  •  3
  • DeeJay007  · 技术社区  · 6 年前

    procedure RestrictKeyPress(Sender: TObject; var Key: Char);
    var
      KeyCode: Integer;
    begin
      { Restrict special characters @, ^, *, \ }
      KeyCode := Ord(Key);
      if ((KeyCode = 32) or (KeyCode >= 64) or (KeyCode <= 94) or (KeyCode <= 42) or (KeyCode <= 92)) then
        Key := #0;
    end;
    

    我把这个程序称为 InitializeWizard 这样地

    PageConfig.Edits[1].OnKeyPress := @RestrictKeyPress;
    

    但当我测试这个时,按键对任何键都不起作用。我只想限制下面提到的钥匙和空间。

    @, ^, *, \

    1 回复  |  直到 6 年前
        1
  •  3
  •   Martin Prikryl    6 年前

    你的逻辑是完全错误的我们来看看:

    if ((KeyCode = 32)          { Ok so far }
      or (KeyCode >= 64)        { Oops. Killing every key above 63 }
      or (KeyCode <= 94)        { And every key below 95 }
      or (KeyCode <= 42)        { And (redundantly) every key below 43 }
      or (KeyCode <= 92)) then  { And (redundantly) every key below 93 }
    

    你也不需要转换 Key 到一个数字。

    改用简单的集合:

    if (Key in ['@', '^', '*', '\', #32]) then  { #32 is space }
      Key := #0;