Советы по Delphi


Имитация нажатия клавиши


Я имею набор кнопок (caption ='0'..'9') и хотел бы имитировать их нажатие во время нажатия пользователем соответствующей клавиши. То есть, когда пользователь нажимает клавишу '1', кнопка с таким заголовком также должна быть нажата на экране. Как мне это сделать без нового компонента Tbutton?

Нет проблем:

Вероятно вы захотите использовать 10 элементов управления TSpeedButton или их массив, поскольку этот тип кнопок имеет свойство "Down". Для начала установите у свойства "KeyPreview" вашей формы значение "True". Затем создайте обработчик события "OnKeyDown" примерно такого вида...

    case Key of VK_NUMPAD0: btn0.Down := True; VK_NUMPAD1: btn1.Down := True; VK_NUMPAD2: btn2.Down := True; VK_NUMPAD3: btn3.Down := True;

VK_NUMPAD4: btn4.Down := True; VK_NUMPAD5: btn5.Down := True; VK_NUMPAD6: btn6.Down := True; VK_NUMPAD7: btn7.Down := True; VK_NUMPAD8: btn8.Down := True; VK_NUMPAD9: btn9.Down := True; end;

в этом случае обработчик события "OnKeyUp" будет следующего вида...

    case Key of VK_NUMPAD0: btn0.Down := False; VK_NUMPAD1: btn1.Down := False; VK_NUMPAD2: btn2.Down := False; VK_NUMPAD3: btn3.Down := False; VK_NUMPAD4: btn4.Down := False; VK_NUMPAD5: btn5.Down := False; VK_NUMPAD6: btn6.Down := False; VK_NUMPAD7: btn7.Down := False; VK_NUMPAD8: btn8.Down := False; VK_NUMPAD9: btn9.Down := False; end;

Поэкспериментируйте со свойствами "AllowAllUp" и "GroupIndex" для получения необходимого эффекта.

Кроме того, массив кнопок TSpeedButtons был бы наиболее изящным решением в данной задаче, поскольку в этом случае вы могли бы использовать константу VK_ constant в качестве индекса, делая обработчики обоих событий длиной всего в одну строчку - Button[VK_x].Down := True {или False}. [000141]



Содержание раздела