![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Перенаправить сообщение [D7, WinXP]
Alita © (2006-08-21 12:56:00)Есть форма, на ней ListBox. Когда нажимаешь на клавиатуре буквы "a" и "s" должно эмулироваться нажатие на кнопки со стрелками "вверх" и "вниз" соответственно, при этом на ListBox-е должно это отображаться. Как это сделать? Заранее спасибо.
Alita (2006-08-22 11:03:00) [21]Ошиблась немного
....
else if key=65 then
ListBox1.Perform(WM_KEYDOWN, VK_DOWN, 0);
end;
Alita (2006-08-22 11:00:00) [22]А так? Вроде должно.
procedure TForm1.Form1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if key=83 then
ListBox1.Perform(WM_KEYDOWN, VK_UP, 0)
else iif key=83 then
ListBox1.Perform(WM_KEYDOWN, VK_DOWN, 0);
end;
umbra (2006-08-22 10:48:00) [23]2 Alita © (22.08.06 10:26) [8]
а если раскладка украинская? :)
DprYg (2006-08-22 10:33:00) [24]Кстати [8] тоже работать не будет:)
Ketmar (2006-08-22 10:31:00) [25]> [8] Alita © (22.08.06 10:26)
"других решений" всегда есть. а вот ты точно хочешь их узнать? %-)
clickmaker (2006-08-22 10:28:00) [26]
> Или есть другое решение?
тебе уже давно написали решение. [1] + [3]
Alita (2006-08-22 10:26:00) [27]Очевидно, что тогда:
procedure TMyForm.OnKeyPress(Sender: TObject; var Key: Char);
begin
if (UpperCase(Key) = 'A') or (UpperCase(Key) = 'Ф') then
ListBox1.Perform(WM_KEYDOWN, VK_UP, 0)
else if (UpperCase(Key) = 'S') or (UpperCase(Key) = 'Ы') then
ListBox1.Perform(WM_KEYDOWN, VK_DOWN, 0);
end;
Или есть другое решение?
umbra (2006-08-22 09:53:00) [28]
> Я уже на шла решение (вернее подсказали)
а если раскладка клавиатуры русская? :)
Alita (2006-08-22 09:26:00) [29]Не обрабатывает нажатие на клавиши "вверх" и "вниз". Я уже на шла решение (вернее подсказали):
Свойство Form.KeyPreview = True
procedure TMyForm.OnKeyPress(Sender: TObject; var Key: Char);
begin
if UpperCase(Key) = 'A' then
ListBox1.Perform(WM_KEYDOWN, VK_UP, 0)
else if UpperCase(Key) = 'S' then
ListBox1.Perform(WM_KEYDOWN, VK_DOWN, 0);
end;
Leonid Troyanovsky (2006-08-21 19:15:00) [30]
> Alita © (21.08.06 17:25) [2]
> Так не работает. Такие коды клавиш Delphi не обрабатывает.
Почему ж не обрабатывает?
Просто зовут их обычно, скажем как Ord('s'), Ord('a') & etc
--
Regards, LVT.
Leonid Troyanovsky (2006-08-21 19:07:00) [31]
> clickmaker © (21.08.06 17:41) [3]
> чтобы отключить контекстный поиск по умолчанию
Для полноты, видимо, еще нужно обработать OnKeyUp,
дабы не было OnKeyUp.
Скорее всего, задача решается просто для стиля LBS_NODATA
(or not LBS_HASSTRING), где-нибудь в районе WM_CHARTOITEM,
но, проверять ломает :)
--
Regards, LVT.
clickmaker (2006-08-21 17:41:00) [32]+ к [1] надо еще в OnKeyPress
if (Key = 'a') or (Key = 's') then Key := #0;
чтобы отключить контекстный поиск по умолчанию
Alita (2006-08-21 17:25:00) [33]Так не работает. Такие коды клавиш Delphi не обрабатывает.
novill (2006-08-21 14:26:00) [34]procedure TForm1.ListBox1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if key=83 then Key:=VK_DOWN;
if key=65 then Key:=VK_UP;
end;