Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Для новичков > Как в калькуляторе запрограммировать ввод с клавы?


Автор: ruslandlion 18.11.2012, 16:04
Написал калькулятор, запрограммировал кнопки, а как привязать эти кнопки ( компонент BitBtn) с кнопками клавиатуры. Чтобы если я ввёл к примеру с клавиатуры число "7", эта клавиша связалась с событием нажатия на кнопку 7 в программе?

Автор: amsoft 18.11.2012, 18:29
обрабатывай OnKeyPress формы

Автор: ruslandlion 18.11.2012, 19:33
Я не очень хорошо разбираюсь в программировании , попытался вот так сделать 

Код

procedure TForm1.BitBtn1KeyPress(Sender: TObject; var Key: Char);
begin
if key=VK_NUMPAD1 then   procedure TForm1.BitBtn39Click(Sender: TObject); // клавиша 1 на калькуляторе

end;



Не удаётся скомпелировать. Тоесть я хотел задать программе условие если происходит нажатие на клавишу VK_NUMPAD1 , то должна вызваться процедура нажатие на клавишу "1" procedure TForm1.BitBtn39Click(Sender: TObject); Вылетает ошибка

Автор: northener 18.11.2012, 19:53
Код

 if key=VK_NUMPAD1 then   BitBtn39.Click;

Автор: ruslandlion 18.11.2012, 19:59
Не компилируется , вот так попробывал 

Код

begin
 if key=VK_NUMPAD1 then   form1.bitbtn39.Click;

end;



Тоже результатов не дало, ошибка "incompatible types"

Автор: northener 18.11.2012, 20:59
Цитата(ruslandlion @  18.11.2012,  19:59 Найти цитируемый пост)
Не компилируется

А. Это же KeyPress.
Код

   if key='1' then  bitbtn39.Click;

И не надо везде где попало добавлять form1.

Автор: ruslandlion 18.11.2012, 21:08
Спасибо большое, получилось.

Автор: Данкинг 18.11.2012, 21:21
ruslandlion, только лучше назначай каждой кнопке свою процедуру, и её уже вызывай. Т.е., например, выполняй свои действия не непосредственно в bitbtn39.Click, а в "самодельной" процедуре bitbtn39_new, которая будет вызываться по bitbtn39.Click. Я и сам так иногда делаю, но знаю, что это неправильно.

Автор: ruslandlion 18.11.2012, 21:50
 вначале хотел так сделать, потом отбросил затею, так как часто уникальные в своём роде функции выполняються, например вычисление Арктангенса на калькуляторе.

Автор: northener 19.11.2012, 00:17
Цитата(Данкинг @  18.11.2012,  21:21 Найти цитируемый пост)
Я и сам так иногда делаю, но знаю, что это неправильно

Не понятно, что "так" сам делаешь и что не правильно.

И сам совет делать отдельную процедуру, "которая будет вызываться по bitbtn39.Click" тоже не понимаю. И в общем случае и в данной конкретной задаче "Калькулятор".

Автор: Данкинг 19.11.2012, 01:38
Цитата(northener @  19.11.2012,  01:17 Найти цитируемый пост)
Не понятно, что "так" сам делаешь и что не правильно.

Пишу весь код непосредственно в процедуре нажатия кнопки.
Цитата(northener @  19.11.2012,  01:17 Найти цитируемый пост)
И сам совет делать отдельную процедуру,

В конкретном случае, может, действительно смысла нет. Но в общем случае читаемость кода как-то лучше, когда есть процедура "report", а не Button1.Click. smile 

Автор: northener 20.11.2012, 00:28
Цитата(Данкинг @  19.11.2012,  01:38 Найти цитируемый пост)
Но в общем случае читаемость кода как-то лучше, когда есть процедура "report", а не Button1.Click.

В общем случае читаемость кода лучше, если вместо Button1.Click будет btnReport.Click. smile
Я то задал этот вопрос в основном потому, что процедура TControl.Click весьма себе умная. Посмотри её описание в хелпе и/или её реализацию в исходниках.

Автор: superVad 20.11.2012, 02:28
Код из обработчика выносится в отдельную процедуру за 2 минуты.
Другое дело, что надо бы отделять интерфейс от логики.

Автор: northener 20.11.2012, 02:34
Цитата(superVad @  20.11.2012,  02:28 Найти цитируемый пост)
Код из обработчика выносится в отдельную процедуру за 2 минуты.
Другое дело, что надо бы отделять интерфейс от логики. 

Ты это к чему?
Мы тут, вроде, пока говорим о процедуре Click.

Автор: Данкинг 20.11.2012, 09:30
Цитата(northener @  20.11.2012,  01:28 Найти цитируемый пост)
 если вместо Button1.Click будет btnReport.Click.

Возможно, действительно так читабельней, но кнопок я никогда не переименовываю. Обычно делаю именно процедура, т.е. для отчёта процедура Report, для экспорта - Exporter и т.п.

Автор: bems 20.11.2012, 12:27
Цитата(Данкинг @  20.11.2012,  09:30 Найти цитируемый пост)
но кнопок я никогда не переименовываю
батюшки...

Автор: Данкинг 20.11.2012, 12:45
Цитата(bems @  20.11.2012,  13:27 Найти цитируемый пост)
батюшки...

Может быть, когда много кнопок, как в случае с калькулятором, это имеет смысл. Но у меня столько много обычно не бывает.

Автор: northener 21.11.2012, 00:40
Цитата(Данкинг @  20.11.2012,  12:45 Найти цитируемый пост)
Может быть, когда много кнопок, как в случае с калькулятором, это имеет смысл. Но у меня столько много обычно не бывает.

Но ведь Caption кнопок всё равно ведь, наверно, меняешь? Так почему бы и Name не сменить одновременно?

P.S.
Отчасти я ещё и потому не забыл этот топик, что я по основной своей линии порой весьма ограничен размером стека. И простое "подставление" одной процедуры в другую вызывает у меня некое "отторжение". 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)