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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 28.02.2010, 01:56   #1
БулатМастер
Новичок
Джуниор
 
Регистрация: 27.02.2010
Сообщений: 2
По умолчанию как обработать нажатие клавиши когда курсор на объекте?

на форме некий объект. необходимо уничтожить объект когда на него наводиться мышь и нажимаеться клавиша DEL.
как лучше всего реализовать?
БулатМастер вне форума Ответить с цитированием
Старый 28.02.2010, 08:08   #2
0nni
Форумчанин
 
Аватар для 0nni
 
Регистрация: 24.07.2008
Сообщений: 279
По умолчанию

Код:
procedure TForm1.ApplicationEvents1Message(var Msg: tagMSG;
  var Handled: Boolean);
var
  Control : TControl;
begin
  case msg .message of
    WM_KEYDOWN :
      begin
        if (msg.wParam = VK_DELETE)  then
        begin
          Control := TForm1.ControlAtPos(TForm1.ScreenToClient(Mouse.CursorPos), true, true, true);
          if Control = Form1 then Control := nil;
          if Control <> nil then
          Control.Free
          else
          inherited;
        end
          else
       inherited;
      end;
    else
      inherited;
  end;
end;
Тебе прийдется добавить еще несколько проверок. Если нужно удалять объекты, которые находятся не на самой форме, а на каком-то объекте сверху формы - нужно сделать небольшой цикл с применениме
Код:
ParentControl := Control.ControlAtPos(Control.ScreenToClient(Mouse.CursorPos), true, true, true);
Сказал и загрустил от бесспорности своей правоты.
0nni вне форума Ответить с цитированием
Старый 28.02.2010, 08:08   #3
0nni
Форумчанин
 
Аватар для 0nni
 
Регистрация: 24.07.2008
Сообщений: 279
По умолчанию

Код:
procedure TForm1.ApplicationEvents1Message(var Msg: tagMSG;
  var Handled: Boolean);
var
  Control : TControl;
begin
  case msg .message of
    WM_KEYDOWN :
      begin
        if (msg.wParam = VK_DELETE)  then
        begin
          Control := TForm1.ControlAtPos(TForm1.ScreenToClient(Mouse.CursorPos), true, true, true);
          if Control = Form1 then Control := nil;
          if Control <> nil then
          Control.Free
          else
          inherited;
        end
          else
       inherited;
      end;
    else
      inherited;
  end;
end;
Тебе прийдется добавить еще несколько проверок. Если нужно удалять объекты, которые находятся не на самой форме, а на каком-то объекте сверху формы - нужно сделать небольшой цикл с применениме
Код:
ParentsControl := Control.ControlAtPos(Control.ScreenToClient(Mouse.CursorPos), true, true, true);
Сказал и загрустил от бесспорности своей правоты.
0nni вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Долгое нажатие клавиши в KeyDown как одно нажатие marina15056 Общие вопросы Delphi 7 16.08.2009 00:22
Как перехватить нажатие клавиши Windows? UnD)eaD)Snake Win Api 3 16.03.2009 18:21
Как в Си обработать нажатие управлавляющих клавиш ? feranic Общие вопросы C/C++ 5 14.04.2008 19:20
как мне узнать когда одновременно нажаты две клавиши vitalik007 Помощь студентам 8 11.10.2007 17:13