Как использовать клавиатуру в качестве клавиатуры Брайля в Delphi?
Я пытался работать над событиями onKeyDown
а также onKeyUp
, Программа отлично работает, когда нажаты только две клавиши.
Для комбинаций из более чем 2 клавиш, если 2 клавиши уже нажаты (и поэтому они нажаты), нажатие другой клавиши не фиксируется, и поэтому комбинация FGH рассматривается как FG, соответствующая другому символу Брайля.
Кроме того, когда 3 или более клавиш нажаты вместе, числа onKeyDown
пойманные события не всегда одинаковы.
3 ответа
Вы можете ожидать неприятностей с дешевыми клавиатурами! Здесь у вас есть простая тестовая программа для тестирования вашей клавиатуры. (Не забудьте определить формы OnKeyDown и OnKeyUp.)
type
TForm8 = class(TForm)
procedure FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
procedure FormKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form8: TForm8;
implementation
{$R *.dfm}
procedure TForm8.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
var
State :TKeyboardState;
n :integer;
s :string;
begin
GetKeyboardState(State);
s := '';
for n := Low(byte) to High(byte) do
if State[n] and 128 <> 0 then
s := s + 'VK(' + IntToStr(n) + ') ';
Caption := s;
end;
procedure TForm8.FormKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);
var
State :TKeyboardState;
n :integer;
s :string;
begin
GetKeyboardState(State);
s := '';
for n := Low(byte) to High(byte) do
if State[n] and 128 <> 0 then
s := s + 'VK(' + IntToStr(n) + ') ';
Caption := s;
end;
end.
С GetKeyboardState вы можете получить полный массив состояния каждого ключа. Чтобы поймать несколько нажатий клавиш, таких как символы Брайля, вы должны вызывать его в высокой последовательности, например, из TTimer с очень маленьким интервалом или из класса, унаследованного от TThread. Также есть вероятность, что при нажатии двух или более кнопок нажатие не будет регистрироваться на всех клавишах в одно и то же время, поэтому вам придется отслеживать и выбирать только те комбинации, которые соответствуют критерию, например, существовавший ранее. длинный.
Используйте GetAsyncKeyState. Он не только возвращает текущее состояние клавиш, но и то, была ли клавиша нажата с момента последнего вызова. Существует ограничение на количество клавиш, которые могут быть нажаты одновременно. Я думаю, что ограничение составляет около 8 ключей, но оно может отличаться в зависимости от аппаратного обеспечения, драйверов и версии ОС.