Welkom bij de Tweaking4All gemeenschapsforums!
Voor je gaat deelnemen, bekijk de Forum Regels!
Specifieke onderwerpen: Start het onderwerp met de naam van het programma of systeem.
Bijvoorbeeld “MacOS X – Jouw vraag“, of bijvoorbeeld “MS Word – Jouw Tip of Truc“.
Merk op: Omschakelen naar een andere taal zal niet werken als je een post aan het lezen bent aangezien er waarschijnlijk geen vertaling beschikbaar is.
[Opgelost] Lazarus - Hoe vang ik WheelMouse events voor controls die het niet ondersteunen?
Delphi, Lazarus, Free Pascal
(@hans)
Famed Member Admin
Deelgenomen: 12 jaar geleden
Berichten: 2864
Topic starter
21 november 2013 21:43
Met wat hulp van het Lazarus Forum (speciale dank aan engkin!), heb ik het eindelijk voor elkaar gekregen om beweging van het muis wieltje (wheel mouse) to vangen met controls die dat eigenlijk niet (direct) ondersteunen.
In onderstaande code definiëren we een nieuwe class welke we aan de WindowProc van de gewenste control hangen zodat we berichten kunnen ondervangen, verwerken en doorsturen ...
Het gebruik is eenvoudig:
- Zorg ervoor dat Controls en LMessages toegevoegd zijn aan de uses clause.
- Kopieer en plak de onderstaande code in de type en implementation sectie.
- Pas indien nodig de AdjustedWindowProc aan.
- Voor elke control waarvoor je de WheelMouse events wilt hebben: TWheelCatcher.Create(<componentnaam>);
uses
..., Controls, LMessages;
type
...
{ TWheelCatcher }
TWheelCatcher=class
public
PrvWindowProc: TWndMethod;
WinControl:TWinControl;
procedure AdjustedWindowProc(var TheMessage: TLMessage);
constructor Create(Target: TWinControl);
end;
...
implementation
...
{ TWheelCatcher }
procedure TWheelCatcher.AdjustedWindowProc(var TheMessage: TLMessage);
begin
if TheMessage.msg = LM_MOUSEWHEEL then
begin
//Doe hier wat je wilt doen met de wiel bewegingen
//Lees de waarden van de "TheMessage" om te zien of het wiel omhoog of omlaag beweegt
ShowMessage('Wheel event!');
end;
PrvWindowProc(TheMessage);
end;
constructor TWheelCatcher.Create(Target: TWinControl);
begin
WinControl := Target;
PrvWindowProc := WinControl.WindowProc;
WinControl.WindowProc := @AdjustedWindowProc;
end;
...
// Voeg TWheelCatcher toe aan de controls die het nodig hebben, b.v. mijnPanel is een TPanel
// Als de control al bestaat b.v. in het onCreate event van de Form.
TWheelCatcher.Create(myPanel);
// of b.v. als je een control tijdens runtime aanmaakt:
tmpPanel := TPanel.Create(ParentPanel);
tmpPanel.Parent := ParentPanel;
...
TWheelCatcher.Create(tmpPanel);
...