Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Перенаправить сообщение [D7, WinXP]


Страницы:   1 2

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;


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо