Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Назначение клавишам действий [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.


Наверх

Титульная страница Поиск, карта сайта Написать письмо