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

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

Как Запретить сообщение ? [D7, WinXP]


Nikk ©   (2005-11-01 15:49:00) 

Нужно заблокировать событие клика мыши, что бы оно не дошло до компонента. Как можно это сделать?
Исходников компонента нету, по этому такая проблема.


umbra   (2005-11-02 12:49:00) [1]

можно вот так


unit Unit1;

interface

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

type
 TForm1 = class(TForm)
   Button1: TButton;
   ApplicationEvents1: TApplicationEvents;
   procedure ApplicationEvents1Message(var Msg: tagMSG;
     var Handled: Boolean);
   procedure Button1Click(Sender: TObject);
 private
   { Private declarations }
 public
   { Public declarations }
 end;

var
 Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.ApplicationEvents1Message(var Msg: tagMSG;
 var Handled: Boolean);
begin
   if msg.hwnd = Button1.Handle then
     if (Msg.message = WM_LBUTTONDOWN) or (Msg.message = WM_LBUTTONUP)
         or (msg.message = WM_LBUTTONDBLCLK) then
     begin
       Handled := True;
     end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
 ShowMessage('!!!');
end;

end.


Lexer   (2005-11-02 11:54:00) [2]

Поддерживаю [3], переопределяешь WndProc и игнорируешь ненужные сообщения

FLastButtonWndProc: TWndMethod;
procedure ButtonWndProc(var Message: TMessage);

FLastButtonWndProc := Button1.WindowProc;  
Button1.WindowProc := ButtonWndProc;

procedure TForm1.ButtonWndProc(var Message: TMessage);
begin
 if not(Message.Msg = WM_LBUTTONDOWN or Message.Msg = WM_RBUTTONDOWN) then  FLastButtonWndProc(Message);
end;


evvcom   (2005-11-02 09:30:00) [3]

Возможно, достаточно будет из ControlState исключить csClickEvents


wicked   (2005-11-01 21:19:00) [4]

имхо, лучше использовать св-во WindowProc.... подробности - в справке....


BFG9k   (2005-11-01 16:06:00) [5]

Обработай сообщение до того, как оно придет в компонент.


var M:TMessage;

...

M.Result:=0;


Leonid Troyanovsky   (2005-11-01 16:06:00) [6]


> Nikk   (01.11.05 15:49)


> Нужно заблокировать событие клика мыши, что бы оно не дошло
> до компонента. Как можно это сделать?

TControl - procedure Click; override

> Исходников компонента нету, по этому такая проблема.

Безразлично.

--
Regards, LVT.


Наверх

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