![]() |
Umleiten von Mousewheel events funktioniert mit TStringGrid nicht
Hallo,
ich wollte in meiner Anwendung die Verhaltensweise implementieren, dass das WinControl gescrollt wird, welches sich unter dem Mauszeiger befindet, nicht das, welches den Focus hat. Dazu habe ich folgenden Code für TApplicationEvents.OnMessage() gefunden:
Delphi-Quellcode:
Dies funktioniert soweit recht ordentlich (z.B. bei TMemo, TListBox, usw.), nur leider nicht bei allen Komponenten. Wenn ich z.B. eine TStringGrid auf das Formular ziehe wird das Grid nicht gescrollt, auch wenn es unter dem Mauszeiger ist. Genauso wird kein anderes WinControl gescrollt, welches unter dem Mauszeiger liegt, wenn das TStringGrid den Fokus hat.
procedure TForm1.ApplicationEvents1Message(var Msg: tagMSG; var Handled: Boolean);
var mousePos: TPoint; wc: TWinControl; begin if Msg.message = WM_MOUSEWHEEL then begin mousePos.X := Word(Msg.lParam); mousePos.Y := HiWord(Msg.lParam); wc := FindVCLWindow(mousePos); if wc = nil then begin Handled := True; end else if wc.Handle <> Msg.hwnd then begin SendMessage(wc.Handle, WM_MOUSEWHEEL, Msg.wParam, Msg.lParam); Handled := True; end; end; end; Dies passiert auch mit anderen Komponenten (z.B. einige Komponten von DevExpress)! Gibt es eine Möglichkeit, die Komponenten wie z.B. TStringGrid dazu zu bringen, dass diese auch auf MouseWheel wie alle anderen reagieren? ... oder habe ich hier irgendwas übersehen? Ich hoffe ich konnte mich einigermaßen verständlich ausdrücken. Danke schon mal! |
AW: Umleiten von Mousewheel events funktioniert mit TStringGrid nicht
hallo,
Zitat:
mfg frank ps.: zum technischen Problem kann ich leider nichts beitragen, aber was ist an der Stelle Erwartungskomform??? |
AW: Umleiten von Mousewheel events funktioniert mit TStringGrid nicht
Ich weiß auch nicht ob ich das so toll finde. Es gibt 3rd-Party Tools (oder seit Windows 10 nativ einstellbar) die das systemweit irgendwie realisieren. Ich glaube ich wäre auch etwas ... überrascht.
Zum Problem: Getippt hätte ich dass der LPARAM nicht stimmt. Du gibst den ja unverändert weiter, und der enthält Koordinaten an welchem das andere TWinControl überhaupt nicht liegt. Aber abgesehen davon funktioniert es bei mir noch nicht mal mit einem normalen TMemo. Obwohl SendMessage sogar TRUE zurückgibt. Komisch... |
AW: Umleiten von Mousewheel events funktioniert mit TStringGrid nicht
Über Sinn und Zweck dieses Verhaltens kann man natürlich streiten, aber wenn es ein ausdrücklicher Kundenwunsch ist ....
Mit TMemo, TListbox (auch der von DevExpress, also TcxListBox) funktioniert es bei mir so wie angegeben. D.h. ich denke, dass der Code grundsätzlich so passt. Nur irgendwie werden die Events bei z.B. TStringGrid anderst behandelt, abgefangen ...? |
AW: Umleiten von Mousewheel events funktioniert mit TStringGrid nicht
Habe nochmals über lParam nachgedacht:
über diesen Code finde ich das darunterliegende Window:
Delphi-Quellcode:
d.h. doch dann, dass in lParam genau die Koordinaten für das darunterliegende Window stecken, oder?
mousePos.X := Word(Msg.lParam);
mousePos.Y := HiWord(Msg.lParam); wc := FindVCLWindow(mousePos); |
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:57 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz