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-е должно это отображаться. Как это сделать? Заранее спасибо.


Leonid Troyanovsky   (2006-08-23 14:23:00) [1]


> Alita ©   (23.08.06 12:17) [33]

> Эта часть задачи такова: на форме три ListBox'а - Л1, Л2
> и Л3 (или других подобных компонента). В Л1 идет перебор
> пунктов с помощью клавиш 'a' u 's'.  При этом в Л2 должны


ApplicationEvents1.OnShortCut

const
 Chars: set of Char = ['A', 'S', 'D', 'F'];

procedure TForm1.ApplicationEvents1ShortCut(var Msg: TWMKey;
 var Handled: Boolean);
begin
 Handled := Char(msg.CharCode) in Chars and (..) ;
 if Handled then
   case Char(msg.CharCode) of
     'A':
        with ListBox1 do
          ItemIndex := ItemIndex +1;
     'S':
        with ListBox1 do
          ItemIndex := ItemIndex -1;
     'D':
        with ListBox2 do
          ItemIndex := ItemIndex +1;
     'F':
        with ListBox2 do
          ItemIndex := ItemIndex -1;
   end;
end;


--
Regards, LVT.


Alita   (2006-08-23 12:17:00) [2]

Эта часть задачи такова: на форме три ListBox'а - Л1, Л2 и Л3 (или других подобных компонента). В Л1 идет перебор пунктов с помощью клавиш 'a' u 's'.  При этом в Л2 должны отображаться подпункты Л1, которые, в свою очередь, должны перебираться с помощью 'd' u 'f'. При нажатии 'z' пункт из Л2 должен добавляться в Л3, при чем количество добавлений должно быть ограничено некоторым счетчиком, который увеличивается при нажатии на пробел. Коды клавиш, только перечисленные выше, так как сигнал с клавиатуры передается на некоторое устройство, которое зашито на клавиатуру.


Leonid Troyanovsky   (2006-08-22 19:18:00) [3]


> Alita ©   (22.08.06 12:18) [22]

> Да, действительно работает. Я просто нашла у себя ошибку.


К сожалению, это, видимо, не единственная ошибка.
Т.к. появились подозрения в ошибочности дизайна.

Поэтому, IMHO, неплохо бы огласить всю задачу, с учетом уже
усвоенной в результате обсуждений информации.

--
Regards, LVT.


Ketmar   (2006-08-22 19:14:00) [4]

так же, как и VK_0..VK_9. %-)


Leonid Troyanovsky   (2006-08-22 19:12:00) [5]


> Alita ©   (22.08.06 11:44) [16]

> клавиши вроде есть виртуальный код vk_a-vk_z. Через них


В дельфи их не определяли.
Cочли, что достаточно Ord('A')..Ord('Z')

--
Regards, LVT.


Leonid Troyanovsky   (2006-08-22 19:02:00) [6]


> Ketmar ©   (22.08.06 18:56) [28]

> я отвечал исключительно на [25]. сорри.


Я тоже вынужден извиниться, бо говорил про исходную постановку.
А в [25] уже "он может не и меть фокуса ввода".
Т.е., sorry.

--
Regards, LVT.


Ketmar   (2006-08-22 18:56:00) [7]

> [27] Leonid Troyanovsky ©   (22.08.06 18:55)
я отвечал исключительно на [25]. сорри.


Leonid Troyanovsky   (2006-08-22 18:55:00) [8]


> Ketmar ©   (22.08.06 18:27) [26]

> можно и в компоненте. кто мешает сделать в компоненте два
> поля, где запомнить нужные коды? и потом плодить себе хоть
> 100 компонентов.


Можно, конечно, и в контроле.
Но, исходная постановка задачи недвусмысленно намекает на то,
что управление листбоксами осуществляется на уровне формы.
Т.е., видимо, здесь будет весьма полезен TActionList & etc.
Конечно, тогда потребуются не сами клавиши, а комбинации типа Ctrl+A,
Ctrl+S & etc. Хотя, неопределенностей, связанных с нажатием одиночных
клавиш станет, IMHO, на порядок меньше.

--
Regards, LVT.


Ketmar   (2006-08-22 18:27:00) [9]

> [25] Alita ©   (22.08.06 12:28)
можно и в компоненте. кто мешает сделать в компоненте два поля, где запомнить нужные коды? и потом плодить себе хоть 100 компонентов.


Alita   (2006-08-22 12:28:00) [10]

Компонент у меня несколько и нужно, чтобы на "a" и "s" реагировал один компонент, на "d" и "f" другой и т.д. Поэтому в самом компоненте нельзя разместить, так как при нажатии на клавишу он может не и меть фокуса ввода.

P.S. Спасибо за помощь. И извинясь за опрометчивость в ответах.


novill   (2006-08-22 12:23:00) [11]

Если уже используешь
> Form.KeyPreview
то в условия добавь and listbox1.focused
иначе будут проблемы с вводом текста.

Лучше все же обработку разместить в событии самого компонетна.


novill   (2006-08-22 12:20:00) [12]

Свой вариант я уже писал в [1]

Вот еще вариант, так же работает:
procedure TForm1.ListBox1KeyDown(Sender: TObject; var Key: Word;
 Shift: TShiftState);
begin
if chr(key)='A' then Key:=VK_DOWN;
If chr(key)='S' then Key:=VK_UP;
end;


Если вообще нифига не получается  - кинь на форму мемо и а в ListBox1KeyDown помести   Memo1.Lines.Add(IntToStr(key))
и посмотри какие коды вообще приходят.


Alita   (2006-08-22 12:18:00) [13]

Да, действительно работает. Я просто нашла у себя ошибку.

Form.KeyPreview = false

procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
 Shift: TShiftState);
begin
   if key=83 then Key:=VK_DOWN;
   if key=65 then Key:=VK_UP;
     DirList.OnKeyDown(self,Key, []);
end;


clickmaker   (2006-08-22 12:07:00) [14]


> [18] Alita ©   (22.08.06 11:58)

а как все это у тебя выглядит?


novill   (2006-08-22 12:04:00) [15]

> [18] Alita ©   (22.08.06 11:58)
> [1] и далее не работают.

тебе что, прогамму кинуть? где это всё работает?


novill   (2006-08-22 12:03:00) [16]

> [15] umbra ©   (22.08.06 11:11)
> а если CapsLock включен?
>
> P.S. Я не издеваюсь, просто эта задача немного (?) сложнее,
> чем кажется на первый взгляд

Код клавиши не зависит от положения CapsLock


Alita   (2006-08-22 11:58:00) [17]

[1] и далее не работают. Делфи  Key:=VK_DOWN и Key:=VK_UP не обрабатывает в OnKeyDown, OnKeyUp и OnKeyPress. После присваивания они  не обрабатываются.


Ketmar   (2006-08-22 11:46:00) [18]

> [16] Alita ©   (22.08.06 11:44)
читать ответы религия запрещает? [1]. и далее.


Alita   (2006-08-22 11:44:00) [19]

А как тогда эту проблему решить? Я точно не знаю, но у каждой клавиши вроде есть виртуальный код vk_a-vk_z. Через них можно?


umbra   (2006-08-22 11:11:00) [20]

а если CapsLockвключен?

P.S. Я не издеваюсь, просто эта задача немного (?) сложнее, чем кажется на первый взгляд.


Страницы:   1 2

Наверх

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