Einzelnen Beitrag anzeigen

Schwedenbitter

Registriert seit: 22. Mär 2003
Ort: Finsterwalde
622 Beiträge
 
Turbo Delphi für Win32
 
#1

Wie Fehler suchen: WM_MouseWheel nicht in WindowProc()

  Alt 6. Sep 2010, 15:35
Hallo,

ich habe auf meinem Form ein TRichEdit zu liegen und möchte gern, dass dieses mit der Mouse gescrollt wird; und zwar auch dann, wenn es nicht den Focus besitzt. An sich habe ich das mit folgendem Codeausschnitt geschafft:
Delphi-Quellcode:
type
  TMsgsTester = class(TForm)
         Log : TRichEdit;
         BtnNewCount : TButton;
         procedure FormCreate(Sender: TObject);
         procedure FormShow(Sender: TObject);
        private
         procedure NewWndProc(var Msg: TMessage);
end;

var
  MsgsTester: TMsgsTester;

implementation

{$R *.dfm}

procedure TMsgsTester.FormCreate(Sender: TObject);
begin
  self.WindowProc:=NewWndProc;
end;

procedure TMsgsTester.FormShow(Sender: TObject);
begin
  BtnNewCount.SetFocus;// <- nur zum Focus verlieren
end;

procedure TMsgsTester.NewWndProc(Var Msg: TMessage);
begin
  if (not Log.Focused) and
     (Msg.Msg = WM_MouseWheel) then
  begin
    Log.Perform(WM_MouseWheel, Msg.WParam, Msg.LParam);
  end;
  inherited WndProc(Msg);
end;

end.
In meinem (un)fertigen Programm kommt aber WM_MouseWheel in NewWndProc() nicht an. Ich habe keine Ahnung warum und habe mir in NewWndProc() bereits einige Messages mitloggen lassen. WM_HotKey, WM_DeviceChange, WM_SysCommand z.B. kommen und lassen sich entsprechend verarbeiten. Die Bedingung Msg.Msg = WM_MouseWheel tritt nie ein, egal wie stark "ich am Rad drehe".

Ich habe mir bereits die Mühe gemacht und mein doch sehr umfangreiches Programm bzgl. der Message-Behandlungsroutinen nachgebaut. Der Nachbau läuft super und ich resigniere langsam.

Hat jemand eine Idee, wie ich dem Fehler auf die Schliche kommen kann?

Gruß und Danke fürs Mitdenken, Alex
Alex Winzer
  Mit Zitat antworten Zitat