Всем привет. Возник такой вопросец, даже вопросище. Как можно привязать клавиши к кнопкам. Допустим у меня есть пианино, я хочу чтобы при нажатии клавиши 'z' у меня нажималась кнопка button1. искал в нете ничего так внятно и не понял. Вообщем как там писали я сделал KeyPreview трушным, затем попылся найти OnShortCut что-то там в Проджекте в разделе Application намудрил. и в итоге решил централизованно спросить… Как это делается всё) Заранее большое СПАСИБО. Просто сутки не спал уже, и интересно и непонятно(
26 марта 2010 в 15:04
26 марта 2010 в 15:02
>>> Я просто все данные о клавишах в форму забивал, а на самих кнопках ничего не писал)
<<< Видимо ты так ничего и не понял.
26 марта 2010 в 14:05
Спасибо разобрался)
26 марта 2010 в 14:05
Я просто все данные о клавишах в форму забивал, а на самих кнопках ничего не писал)
26 марта 2010 в 12:02
Как обещал, вот ссылка //depositfiles.com/files/rx41m1xep
Твоя задача, как она есть, проект, исходный код и исполняемый файл.
Посмотри, надеюсь разберешься…
26 марта 2010 в 9:00
>>>"Вроде бы когда убираю (self) и после Button'a точку ставлю . Прога запускается но ничего не нажимается,(как ранее мне сказали).. Вот а KeyPreview я true сделал.
Думаю что-то надо в Application добавить, но вот что…"
<<<"Ну как объяснить студентам, что если программа компилируется, но вместо химической реакции моделирует ядерный взрыв, это значит, что она НЕ работает?"
26 марта 2010 в 8:04
Да что ж у тебя не получается то…
Попозже свой простой пример через хостинг дам ссылку…
Посмотришь код, как назначены события, найдешь свои ошибки…
26 марта 2010 в 8:02
Алан, боюсь, тебе надо идти в группу "Начинающие программисты". Начни с более простых вещей – может быть, даже с ТурбоПаскаля.
В данном случае компилятор тебе явно сообщает, чего не хватает, и проблем тут нет. Функцию Button1Click тебе необходимо сделать самому. Также, как и self =)) Причём, с точки зрения ООП правильнее сделать Button1.OnClick();вместо Button1Click(self);
P.S. По поводу "пойду плакать" – это оффтоп, тебе предупреждение. Ещё один оффтоп приведёт к бану =)
26 марта 2010 в 8:00
пойду плакать(
26 марта 2010 в 1:01
Артур это немножко не то)
26 марта 2010 в 1:00
В названии(Caption) кнопки вроде бы можно просто перед горячяей клавишей поставить амперсанд &
26 марта 2010 в 0:02
Сделал так, как мне сказали… На кнопульку Button1 В событиях OnKeyPress два щелчка ввожу: после
procedure TForm1.Button1KeyPress(Sender: TObject; var Key: Char);
begin
//ввожу данные
Case Key Of
'r','R':Button1Click(self);
end;
end.
Ну вот и пишет мол не знаю что такое Button1Click
26 марта 2010 в 0:02
там энд не конечный если, что. Но не из-за энда ошибка… Вроде бы когда убираю (self) и после Button'a точку ставлю . Прога запускается но ничего не нажимается,(как ранее мне сказали).. Вот а KeyPreview я true сделал.
Думаю что-то надо в Application добавить, но вот что…
Ух.. Я скоро расплачусь..) Столько времени в пустую, даже интерес пропадает…(
26 марта 2010 в 0:01
Не фига не получается пишет
[Error] Unit1.pas(33): Undeclared identifier: 'Button2Click'
он не понимаетэтот клик
25 марта 2010 в 23:03
self – указатель на сам объект.
25 марта 2010 в 23:03
явное задание экземпляра класса в его методе. Так точнее)
25 марта 2010 в 23:00
Не получилось( а всё-таки что обозначает (self)?
25 марта 2010 в 22:03
Ну если от регистра то по идее мы либо булеановским либо циклом(хотя бред наверно))
Сейчас с OnKeyDown попробую..)
Там смысл в том что 2 действия зажатие клавиши и отпускание… по идее всё правильно, ну как ты привёл.. Логично, а дельфя не хочет(
25 марта 2010 в 22:03
Мой вариант работает, иначе не писал бы.
Button1Click – это обработчик нажатия на кнопку, без точки.
Обрати внимание, я написал еще: FormKeyPress нужно выбрать в Events> OnKeyPress каждого компонента на форме, получающего фокус ввода. Без этого работать не будет. Перебираешь все компоненты на форме, для каждого из них в выпадающем списке OnKeyPress выбираешь FormKeyPress (в том числе и твои кнопки).
25 марта 2010 в 22:03
Избавиться от влияния регистра можно так.
Пишешь не <'r' : Button1Click(self);>, а <'r', 'R' : Button1Click(self);>
25 марта 2010 в 22:03
аааааа) сейчас попробую_)
25 марта 2010 в 22:02
А может быть сразу при TForm1.FormCreate запустить эту процедурку?
просто я ввёл данные те, которые ты написал не получилось
я тогда так сделал. Всё тоже, что и ты посоветовал, только по другому:
procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char);
begin
case Key of
'r' : BitBtn3.Click(self); // в данном случае мои кнопульки с картинкой
'z' : BitBtn4.Click(self);
end;
я правда не совсем понял для чего (self) т.е при компиляции ошибку выдаёт, мол что за…?
И думаю ты имел ввиду перед кликом(Click) точку)
а то без точки не признаёт..(
25 марта 2010 в 22:00
Вот сейчас состряпал, хотя самому не очень нравится решение…
Например обработчик (заготовка создается двойным кликом в Events> OnKeyPress):
procedure TFORM1.FormKeyPress(Sender: TObject; var Key: Char);
begin
case Key of
'r' : Button1Click(self);
'z' : Button2Click(self);
// и другие кнопки сколько надо
end;
end;
Что не нравится, FormKeyPress нужно выбрать в Events> OnKeyPress каждого компонента на форме, получающего фокус ввода((
25 марта 2010 в 22:00
К тому же зависит от регистра
Лучше наверно OnKeyDown использовать…
25 марта 2010 в 21:04
В теле обработчика OnKeyPress (или KeyUp, KeyDawn) формы задаешь селектор по кодам или символам нужных тебе клавиш. По соответствию прописываешь обработчик Click нужной тебе кнопки. Я бы так решил.
25 марта 2010 в 21:04
А по точнее можно?))
25 марта 2010 в 21:04
Типо массивчик из кнопок?