Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: WinAPI и системное программирование > Сообщение WM_RBUTTONUP не приходит окну


Автор: malor 22.6.2011, 13:19
Сообщение WM_RBUTTONUP не приходит в процедуру, в отличие от WM_RBUTTONDOWN.
Код
procedure TForm1.Wndproc(var Message: TMessage);
var ...................
      ...................
begin

  case Message.Msg of
    WM_LBUTTONDOWN, WM_LBUTTONUP, WM_MBUTTONDOWN, WM_MBUTTONUP,
    WM_RBUTTONDOWN, WM_RBUTTONUP:
    // WM_MOUSEMOVE, WM_MOUSEWHEEL
    begin
      Point.X := LoWord(Message.lParam);
      Point.Y := HiWord(Message.lParam);
      keyflags := Message.wParam;
      ......................etc ..................

end;

Почему ?

Объявление в форме:
Код
  private
    procedure WndProc(var Message : TMessage); override;

user posted image

Автор: Rrader 23.6.2011, 05:13
Возможно, сообщение глушится далее по коду (у вас не видно всего кода WndProc). Вот так работает:
Код

unit Unit1;

interface

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

type
  TForm1 = class(TForm)
  private
    { Private declarations }
  protected
    procedure WndProc(var Message: TMessage); override;
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.WndProc(var Message: TMessage);
const
  Cpts: array[WM_LBUTTONDOWN..WM_MBUTTONUP] of String = ('WM_LBUTTONDOWN',
    'WM_LBUTTONUP', '', 'WM_RBUTTONDOWN', 'WM_RBUTTONUP', '', 'WM_MBUTTONDOWN',
    'WM_MBUTTONUP');
var
  Point: TPoint;
begin
  case Message.Msg of
    WM_LBUTTONDOWN, WM_LBUTTONUP, WM_MBUTTONDOWN, WM_MBUTTONUP,
    WM_RBUTTONDOWN, WM_RBUTTONUP:
    begin
      Caption := Cpts[Message.Msg];
      Point.X := LoWord(Message.lParam);
      Point.Y := HiWord(Message.lParam);
    end;
  end;
  inherited;
end;

end.


Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)