Модераторы: Snowy, MetalFan, bems, Poseidon
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Перехват сообщения кнопки мыши Delphi 6, Пытаюсь делать все по правилам не получа 
:(
    Опции темы
Aehn
Дата 25.7.2008, 12:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 64
Регистрация: 24.4.2008

Репутация: нет
Всего: нет



Надо перехватить сообщение при нажатии на правую кнопку мыши

Пытаюсь делать такую вещь:

Код

private
.......
    procedure WMRBUTTONDOWN(var a:TWMRBUTTONDOWN); message WM_RButtonDown;
........
implementation
........

 procedure TFom11.WMRBUTTONDOWN(var a:TWMRBUTTONDOWN);
 begin
   showmessage('!!!');
   inherited;
 end;


Вещь компилируется, работает, но при нажатии на правую кнопку делает все как и делала до написания этой процедуры. Никакого сообщения не показывает.

Что я делаю не так?
PM MAIL   Вверх
Rennigth
Дата 25.7.2008, 12:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1708
Регистрация: 21.6.2004
Где: Moscow

Репутация: 15
Всего: 76



Aehn, значит кто-то раньше перехватывает WM_RBUTTONDOWN. Что у тебя еще в проекте используеться? Если код не брльшой, выкладывай.

Добавлено через 1 минуту и 53 секунды
у тебя на форме случаем ничего не лежит, может ты кликаешь по чему-то другому? 


--------------------
(* Honesta mors turpi vita potior *)
PM MAIL ICQ   Вверх
Christoph
Дата 25.7.2008, 14:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 667
Регистрация: 23.1.2008
Где: Харьков

Репутация: 5
Всего: 11



Сейчас подумаем....  smile 

Это сообщение отредактировал(а) Christoph - 25.7.2008, 15:16


--------------------
user posted image
PM MAIL ICQ   Вверх
Christoph
Дата 25.7.2008, 15:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 667
Регистрация: 23.1.2008
Где: Харьков

Репутация: 5
Всего: 11



Сделал....Работает 

Код


type
  TForm1 = class(TForm)
      private
   procedure WMRBUTTONDOWN(var Msg:TWMMOUSE); message  WM_RButtonUp;
     public
  end;

var
  Form1: TForm1;

  implementation

{$R *.dfm}

procedure TForm1.WMRBUTTONDOWN(var Msg:TWMMOUSE);
 begin
   ShowMessage('Ура перехватил');
  end;

end.



ой та и твой код рабочий...если нажимаешь на форму...работает, а если клацнешь на компонент правой кнопкой, то ничего не будет обрабатываться

Это сообщение отредактировал(а) Christoph - 25.7.2008, 15:24


--------------------
user posted image
PM MAIL ICQ   Вверх
THandle
Дата 26.7.2008, 05:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Хранитель Клуба
Group Icon
Награды: 1



Профиль
Группа: Админ
Сообщений: 3639
Регистрация: 31.7.2007
Где: Moscow, Dubai

Репутация: 50
Всего: 372



Можно попробовать подменить WindowProc...

Пример:

Код


unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    procedure FormCreate(Sender: TObject);
  private
    FOldWndProc : TWndMethod;
    { Private declarations }
  public
    procedure NewWndProc(var Message : TMessage);
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
  FOldWndProc := WindowProc;
  WindowProc := NewWndProc;
end;

procedure TForm1.NewWndProc(var Message: TMessage);
begin
  if (Message.Msg = WM_RBUTTONDOWN) then
    //код, который будет работать при нажатии правой кнопки мыши...
    ShowMessage('');
  FOldWndProc(Message);
end;

end.

PM   Вверх
Arigato
Дата 27.7.2008, 18:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Программист



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 27.7.2008
Где: Россия

Репутация: нет
Всего: нет



Я извиняюсь, а почему просто не использовать события формы OnMouseDown или OnMouseUp?
PM MAIL   Вверх
Aehn
Дата 28.7.2008, 08:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 64
Регистрация: 24.4.2008

Репутация: нет
Всего: нет



Проблема в том, что на правой кнопке висит PopupMenu. Была идея отрубить PopupMenu на время выполнения обработчика и вызывать его в конце процедуры обработчика, но как это сделать? Ведь у Popup menu четко прописана кнопка по которой оно вызывается (Свойство TrckButton). Либо правая, либо левая тертьего не дано, чтобы оно просто было в памяти и вызывалось когда ей прикажут. Код уже приличный, тащить его сюда - себе дороже.

OnMouseDown, OnMouseUp отрабатывают интересным образом, вначале вызывается popupmenu а уж потом все, что мне нужно. Положение Inherited (после/до того, что мне нужно) для правой кнопки не срабатывает, только для левой. Короче,  вся надежда на свой обработчик, который пока тоже не срабатывает до вызова этого чертового popupmenu.

Нужно, чтобы когда мы нажимали правую кнопку мыши у меня отрабатывалась моя процедура, потом выпадало меню, пункты которого работают для выделенного узла TreeView.
PM MAIL   Вверх
VICTAR
Дата 28.7.2008, 13:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник
Сообщений: 1108
Регистрация: 6.10.2006

Репутация: 10
Всего: 80



Цитата(Aehn @  28.7.2008,  09:34 Найти цитируемый пост)
Была идея отрубить PopupMenu на время выполнения обработчика и вызывать его в конце процедуры обработчика, но как это сделать? 

Ну отрубить понятно как  smile , а вызвать
Код

PopupMenu1.Popup(X, Y);

PM MAIL   Вверх
Aehn
Дата 28.7.2008, 14:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 64
Регистрация: 24.4.2008

Репутация: нет
Всего: нет



Как раз непонятно как отрубить. А эта штука PopupMenu1.Popup(X, Y); вызывается для левой кнопки нормально, для правой при задании X,Y  Попап меню все равно непосредственно под курсором.
А как ее отрубить?
PM MAIL   Вверх
VICTAR
Дата 28.7.2008, 14:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник
Сообщений: 1108
Регистрация: 6.10.2006

Репутация: 10
Всего: 80



Как отрубить? В инспекторе объектов убрать PopupMenu. Или я чего-то не понимаю?
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Для новичков"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0787 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.