![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Назначение клавишам действий [D7, XP]
alikon1 © (2007-11-15 00:10:00)Здравствуйте. Допустим есть калькулятор, где есть кнопки 0..9, +,-,*,/ и .т.д. Как можно сделать так, чтоб при нажатии клавиши на настоящей клавиатуре (например 3, ну или +) выполнялась процедура кнопки калькулятора (соответственно для 3, ну или +). Другими словами, чтоб считать мог в калькуляторе не только кликая мышкой по кнопочкам, но и непосредствеено вводом с клавиатуры. Как делать процедуры на кнопки научился, а вот на клавиши клавиатуры никак не получается.
Ну или еще ситуация для применения: надо чтоб при нажатии любой кнопки/клавиши, еще параллельно с непосредственным выполнением соответствующей процедуры, выполнялась еще и процедура кнопки "равно". Спасибо.
Skyle (2007-11-21 08:21:00) [1]
> backspaсe #8 нашёл, а у Delete то ли нет кода, может не
> нашёл просто
Есть такая штука как virtual key codes, по этому сочетанию легко ищется в справке. Для Delete будет значение VK_DELETE. Для BackSpace - VK_BACK
alikon1 (2007-11-21 08:14:00) [2]А как вот такое сделать:
procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char);
begin
case key of
'a':
begin
Button1Click(Button1);
Key := #0; //а это чего код?
end;
end;
end;
только не по клавише "а", а на Delete нужно нажимать.
backspaсe #8 нашёл, а у Delete то ли нет кода, может не нашёл просто.
Skyle (2007-11-15 08:25:00) [3]Может уже стоит посмотреть TAction/TActionList?
alikon1 (2007-11-15 08:00:00) [4]Теперь сразу другой вопрос появился. А как сделать, чтоб не на нажатие одной клавиши процедура выполнялась, а комбинации. Например скобки нужны ( Shift+')' ). Как в такой ситуации быть?
alikon1 (2007-11-15 07:55:00) [5]
> > 'a': TForm1.Button1Click;
>
> и
>
> > procedure TForm1.Button1Click(Sender: TObject);
>
> чувствуешь разницу?
Разницу то "чувствую", только вот
'a': procedure TForm1.Button1Click(Sender: TObject); пробовал, и
'a': TForm1.Button1Click(Sender: TObject); пробовал и ничего не работало
ЮЮ: Спасибо большое, так заработало
ЮЮ (2007-11-15 03:40:00) [6]> case key of
> 'a': TForm1.Button1Click;
> end;
> end;
1) Button1Click - это не классовый метод, поэтому TForm1. - лишнее;
2) метод TForm1.Button1Click имеет параметр, поэтому при его вызове следует указывать значение.
Итак
procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char);
begin
case key of
'a':
begin
Button1Click(Button1);
Key := #0;
end;
end;
end;
ASoft (2007-11-15 03:33:00) [7]alikon1 сравни
> 'a': TForm1.Button1Click;
и
> procedure TForm1.Button1Click(Sender: TObject);
чувствуешь разницу?
Vice____ (2007-11-15 01:18:00) [8]и совет обрабатывай KeyUp KeyDown если так нужно
alikon1 (2007-11-15 01:16:00) [9]подскажите пожалуйста, как было бы правильно. Я понятия не имею, что за параметр такой.
Button1.Click; то же самое выдает
Vice____ (2007-11-15 01:12:00) [10]Button1.Click;
Anatoly Podgoretsky (2007-11-15 00:55:00) [11]> alikon1 (15.11.2007 00:51:02) [2]
Ну правильно не хватает, у метода один параметр, а не ноль.
alikon1 (2007-11-15 00:51:00) [12]Св-во формы KeyPreview в true сделал. Вот так пробую - пишет Not enough actual parameters. А как надо? Или я неправильно понял.
procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char);
begin
case key of
'a': TForm1.Button1Click;
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
edit2.Text:='Basta';
end;
Zeqfreed (2007-11-15 00:16:00) [13]Св-во формы KeyPreview в true. И обрабатывай ее события OnKeyUp / OnKeyDown / OnKeyPress.