Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 30.10.2011, 20:35   #1
Melanholly
Новичок
Джуниор
 
Регистрация: 24.06.2011
Сообщений: 2
По умолчанию Обработка клавиш на TListBox

Задача: при нажатии определенных кнопок(тильда или Энтер или ЛКМ) открыть другую форму.
Реализую
Код:
procedure TForm1.ListBox1KeyPress(Sender: TObject; var Key: char);
begin
   if (Key in [ #13, #96]) then
begin
  if ListBox1.Itemindex = 0  then
   begin
    ...
   end;
  if ListBox1.Itemindex = 1  then
   begin
    ...
   end;
  if ListBox1.Itemindex = 2  then
   begin
    ...
   end;
end;
end;
Когда пытаюсь сделать на onClick действия выполняются вне зависимости от того какая кнопка была нажата.
Melanholly вне форума Ответить с цитированием
Старый 30.10.2011, 21:17   #2
_SERGEYX_
Участник клуба
 
Аватар для _SERGEYX_
 
Регистрация: 07.07.2007
Сообщений: 1,518
По умолчанию

В смысле onClick на ListBox? Чтобы зажать клавишу и кликнуть по item-у ListBox-а?
А откуда он знает какая клавиша нажата?
Код:
procedure TfrmMain.ListBox1Click(Sender: TObject);
var
  State: TKeyboardState;
begin
{Получим состояние клавиатуры}
  GetKeyboardState(State);

{Если нажат Enter}
  if ((State[VK_RETURN] And 128) <> 0) then
    case ListBox1.ItemIndex of
      0:
        frmMain.Caption := 'Нажат Enter - Строка 1';
      1:
        frmMain.Caption := 'Нажат Enter - Строка 2';
      2:
        frmMain.Caption := 'Нажат Enter - Строка 3';
    end;

{Если нажат Ctrl}
  if ((State[VK_CONTROL] And 128) <> 0) then
    case ListBox1.ItemIndex of
      0:
        frmMain.Caption := 'Нажат Ctrl - Строка 1';
      1:
        frmMain.Caption := 'Нажат Ctrl - Строка 2';
      2:
        frmMain.Caption := 'Нажат Ctrl - Строка 3';
    end;

{... и так далее}
end;
_SERGEYX_ вне форума Ответить с цитированием
Старый 31.10.2011, 14:06   #3
Melanholly
Новичок
Джуниор
 
Регистрация: 24.06.2011
Сообщений: 2
По умолчанию

Может я неправильно реализую, но логика должна быть таковой: есть listbox, в нем несколько элементов, по нажатию на определенный элемент открывается определенная форма.
Я пробовал это реализовать через KeyPress, перечислив там обрабатываемые клавиши:
Код:
procedure TForm1.ListBox1KeyPress(Sender: TObject; var Key: char);
begin
    if (Key in [#13, #96]) then
    begin...
т.е. сначала идет проверка нажатия клавиш потом действия, это 2 кнопки, но т.к. это должно работать на кпк, где нажатие на определенном элементе и есть Click подумал что реализовывать нада всетаки там.
Вообще, вместо Listbox можна использовать PopupMenu, но там мне не удалось обработать кнопки, а в ListBox не удалось обработать нажатие мышкой.
Подскажите где не прав или как правильнее сделать.

Последний раз редактировалось Melanholly; 31.10.2011 в 14:16.
Melanholly вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Обработка событий клавиш клавиатуры Synapse Visual C++ 2 20.10.2011 18:37
TListBox hatsub Работа с сетью в Delphi 4 13.03.2011 13:40
обработка нажатия клавиш VC++ консоль rest Помощь студентам 0 06.10.2009 07:53
TListBox Dr.Badnezz Компоненты Delphi 3 03.02.2009 23:15
Вопрос по TListBox Rifler Помощь студентам 2 17.11.2008 22:01