Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.03.26;
Скачать: CL | DM;

Вниз

Подскажиет коды для "вредных" клавиш.   Найти похожие ветки 

 
Новочеркасский Волк ©   (2006-03-08 22:20) [0]

Для инициализации нажатия какой либо буквенной клавиши я использую код:

procedure TForm1.Timer1Timer(Sender: TObject);
var
r: word;
begin
r:=GetKeyState(Ord("z"));
if (r and 32768)=32768 then
beep;
end;

Всё работает на обычных клавишах у которых и сверху и снизу буква. Но не срабатывает для таких клавиш как: ё, ю,б, э, х, ъ и цифр. Подскажите пожалуйсто может вместо 32768 надо чтото другое подставлять или чтото, как? Подскажите пожалуйсто!!!
------------------------------------------
Заранее всем очень благодарен!!!


 
Новочеркасский Волк ©   (2006-03-09 00:16) [1]

Удалено модератором


 
jack128 ©   (2006-03-09 00:54) [2]

function KeyPressed(Key: word): boolean;
begin
 Result := (GetKeyState(Key) and ($1000) = $1000);
end;


 
Новочеркасский Волк ©   (2006-03-09 17:38) [3]

Извеняюсь за тупость но как это применить, чтоб получить в Edit1 код желаемой клавиши при её нажатии???
-----------------------------------------
Заранее всем очень благодарен!!!


 
Алхимик ©   (2006-03-09 19:21) [4]

OnKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); ?


 
Новочеркасский Волк ©   (2006-03-10 16:45) [5]

И что??? И какую из этих переменных мне в Edit1 отображать??? Чтоб получился код нажатой клавиши? Именно клавиши, не символа!


 
Сергей М. ©   (2006-03-10 16:54) [6]


> Новочеркасский Волк ©   (10.03.06 16:45) [5]


> какую из этих переменных


Нет тут "переменных".
Есть параметры процедуры обработки события OnKeyDown.

Параметр Key как раз и содержит код нажатой клавиши.

Цитата из справки :

The Key parameter is the key on the keyboard. For non-alphanumeric keys, use virtual key codes to determine the key pressed. For more information, see Virtual Key codes.


 
Новочеркасский Волк ©   (2006-03-10 18:07) [7]

Блин. Да я не въеду никак можно сразу исходник кода чтоб в Edit1 отображал этот самый код. Я тогда разберусь. ОК?
-----------------------------------------
Заранее всем очень благодарен!!!


 
jack128 ©   (2006-03-10 18:18) [8]

procedure TForm1.Edit1KeyDown(Sender: TObject; var Key: Word;
 Shift: TShiftState);
begin
 Edit1.Text := "#" + IntToStr(Key); // показываешь код введенной клавиши
end;

procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
 Key := #0; // чтобы сам введенный символ не отображался в Edit
end;


 
Manic Mechanic ©   (2006-03-10 18:19) [9]

unit KeyCodeUnit;

interface

uses
 Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
 ExtCtrls;

type
 TForm1 = class(TForm)
   Panel1: TPanel;
   procedure FormKeyDown(Sender: TObject; var Key: Word;
     Shift: TShiftState);
 private
   { Private declarations }
 public
   { Public declarations }
 end;

var
 Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
 Shift: TShiftState);
begin
 Panel1.Caption:= IntToStr(Key);
end;

end.

Твоя задача - заменить Panel1 на Edit1. Дерзай.


 
grisme ©   (2006-03-10 18:27) [10]

А ты разобрался с этим кодом,что я тебе дал(принцип):
procedure TForm1.Timer1Timer(Sender: TObject);
var
r: word;
begin
r:=GetKeyState(Ord("z"));
if (r and 32768)=32768 then
beep;
end;
?
Если бы разобрался - не задал бы этот вопрос.:)


 
Новочеркасский Волк ©   (2006-03-11 15:00) [11]

Ну переменная при OnKeyDown r мне ничё не возвращаяет!!! Ну подскажите по нормальному на конкретно заданный вопрос пожалуйсто!!!
----------------------------------------------------------
Заранее всем благодарен.


 
Новочеркасский Волк ©   (2006-03-11 15:03) [12]

Удалено модератором


 
grisme ©   (2006-03-11 16:44) [13]

procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
 Shift: TShiftState);
begin
 Edit1.text:="Код нажатой клавиши:"+inttostr(Key);
end;


 
grisme ©   (2006-03-11 16:48) [14]

В догонку, в [13] лучше не Edit1.text, а Caption! Сейчас тока проверил - ~ работает - код ее 192!:) х (хЭ :)-219 и т.д.:)


 
Новочеркасский Волк ©   (2006-03-12 22:44) [15]

Да не не то это!!! Ну вот подставил я 192 в код получилось:

procedure TForm1.Timer1Timer(Sender: TObject);
var
r: word;
begin
r:=GetKeyState(Ord("~"));
if (r and 192)=192 then
beep;
end;

Правильно??? И не работает!!! Чё делать ? Надо чёто другое думать!
---------------------------------------------------------------
Заранее всем благодарен!!!


 
Новочеркасский Волк ©   (2006-03-12 22:46) [16]

Удалено модератором


 
Virgo_Style ©   (2006-03-12 22:59) [17]

неправильно. и не будет. учиться, три раза. надо.

подскажу, так и быть - не туда 192 пишешь.


 
grisme ©   (2006-03-13 04:59) [18]

Новочеркасский Волк ©   (12.03.06 22:44) [15]
вними ответу
Virgo_Style ©   (12.03.06 22:59) [17]
:) Ты действительно не туда пишешь. Ну я ж тебе приводил двоичный расклад, почему там 32768 должно быть (это так ради намека) :)


 
Новочеркасский Волк ©   (2006-03-13 16:06) [19]

Virgo_Style спасибо. Намёк понял. Всё работает!!!! Всем спасибо!!!!



Страницы: 1 вся ветка

Текущий архив: 2006.03.26;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.043 c
2-1142192465
Ilg
2006-03-12 22:41
2006.03.26
Список файлов в ComboBox


2-1141721172
dera
2006-03-07 11:46
2006.03.26
Никак не могу разобраться в чем ошибка


2-1142336458
Fenix
2006-03-14 14:40
2006.03.26
TreeView.


2-1141716984
Ivolg
2006-03-07 10:36
2006.03.26
Чтение из потока...


2-1142161827
Sollo
2006-03-12 14:10
2006.03.26
DBX SimpleDataSet кажется проблемы с кэшированием