Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Сложная комбинация клавиш


Автор: CHERRY 21.3.2007, 16:42
Как в RichEdit отследить нажатие сложных комбинаций клавиш
Например: Ctrl+Q+Y в RichEdit

Автор: Snowy 21.3.2007, 17:36
Отследить никак.
Подобные комбинации не порождают единого сообщения.
Проверить нажаты ли в данный момент все три можно - GetKeyState

Автор: Yanis 21.3.2007, 17:52
Код
function IsKeysDown(const a: array of Byte): Boolean;
var
  i, l, h, c: Integer;
  State : TKeyboardState;
begin
  Result := False;
  c := 0;
  l := Low(a);
  h := High(a);
  GetKeyboardState(State);
  for i := l to h do
    if ((State[a[i]] And 128) <> 0) then
      Inc(c);

  Result := c = Length(a);
end;

procedure TForm1.RichEdit1KeyPress(Sender: TObject; var Key: Char);
begin
  if IsKeysDown([VK_CONTROL, Ord('Q'), Ord('W'), Ord('E')]) then
    begin
      RichEdit1.Lines.Add('Ctrl+Q+W+E pressed');
      Key := #0;
    end;

  if IsKeysDown([VK_SHIFT, Ord('Q')]) then
    begin
      RichEdit1.Lines.Add('Shift+Q pressed');
      Key := #0;
    end;
end;

Автор: CHERRY 21.3.2007, 18:49
Спасибо.
В хелпе Delphi 2006 описаны виртуальные клавиши в виде

VK_LSHIFT (A0)
Left SHIFT key

VK_RSHIFT (A1)
Right SHIFT key

VK_LCONTROL (A2)
Left CONTROL key

VK_RCONTROL (A3)
Right CONTROL key

как с ними работать?
Насколько я знаю раньше вопределить левый-правый Ctrl было трудно.


Автор: Yanis 21.3.2007, 21:14
Цитата(CHERRY @  21.3.2007,  19:49 Найти цитируемый пост)
Насколько я знаю раньше вопределить левый-правый Ctrl было трудно.

С приходом 2000 и XP стало легче smile

Цитата(CHERRY @  21.3.2007,  19:49 Найти цитируемый пост)
как с ними работать?

Очень легко:

if IsKeysDown([VK_LCONTROL, Ord('......),....) then
if IsKeysDown([VK_RCONTROL, Ord('......),....) then
if IsKeysDown([VK_RSHIFT, Ord('......),....) then

и т.д.

Функция универсальная. Главное код символьных клавишь передавать для верхнего регистра.

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