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