MouseWheel Methoden überschreiben

Rund um die LCL und andere Komponenten
Antworten
siro
Beiträge: 730
Registriert: Di 23. Aug 2016, 14:25
OS, Lazarus, FPC: Windows 11
CPU-Target: 64Bit
Wohnort: Berlin

MouseWheel Methoden überschreiben

Beitrag von siro »

Hallo zusammen,
ich möchte meiner Komponente zusätzliche Funktionalität für das Mausrad hinzufügen.
Leider scheitere ich daran, daß ich die MouseWheel Methoden nicht überschrieben bekomme,
da es diese anscheinend garnicht gibt.

Zum Verständnis, dieser minimalistische Code:

Code: Alles auswählen

 
Type TTestComp = class(TCustomControl)
  protected
    procedure MouseMove(Shift: TShiftState; X, Y: Integer); override;
    procedure MouseDown(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); override;
    procedure MouseUp  (Button: TMouseButton; Shift: TShiftState; X, Y: Integer); override;
 
 
    procedure MouseWheel    (Shift: TShiftState; WheelDelta: Integer; MousePos: TPoint; var Handled: Boolean);  override;    // PROBLEME
//    procedure MouseWheelDown(Shift: TShiftState; MousePos: TPoint; var Handled: Boolean); override;
//    procedure MouseWheelUp  (Shift: TShiftState; MousePos: TPoint; var Handled: Boolean); override;
 
  public
    property OnMouseMove;
    property OnMouseDown;
    property OnMouseUp;
 
    property OnMouseWheel;
    property OnMouseWheelDown;
    property OnMouseWheelUp;
end;
 
procedure TTestComp.MouseMove(Shift: TShiftState; X, Y: Integer);
begin
end;
 
procedure TTestComp.MouseDown(Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
end;
 
procedure TTestComp.MouseUp(Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
end;
 
procedure TTestComp.MouseWheel(Shift: TShiftState; WheelDelta: Integer; MousePos: TPoint; var Handled: Boolean);
begin
end;                         


There is no method in an ancestor class to be overriden :

Da ich mit "property" die Ereignisse im Objectinspector veröffentlichen kann, gibt es die Methoden ja.
Aber wie kann ich die in meiner Komponente Überschreiben ?

Damit mein Wochenende gerettet werden kann, würde ich mich über jeden Hinweis freuen.... :wink:

Siro
Grüße von Siro
Bevor ich "C" ertragen muß, nehm ich lieber Lazarus...

siro
Beiträge: 730
Registriert: Di 23. Aug 2016, 14:25
OS, Lazarus, FPC: Windows 11
CPU-Target: 64Bit
Wohnort: Berlin

Re: MouseWheel Methoden überschreiben

Beitrag von siro »

Ich habe jetzt die Message vom Mausrad abgefangen und dann den Tastenstatus selbst abgefragt, das geht genauso gut.
Wenn jemand eine andere Lösung hat, würde ich mich aber auch sehr freuen.

Code: Alles auswählen

protected
    procedure WMMouseWheel(var Message: TLMMouseEvent); message LM_MOUSEWHEEL;
 
procedure TTestComp.WMMouseWheel(var Message: TLMMouseEvent);
var shift:TShiftState;
begin
  shift:=GetKeyShiftState;  // Tastenstatus holen
    if Message.WheelDelta < 0 // auswerten ob Scrollrad nach oben oder unten bewegt wird.
 
    // weiterer code...
 
  inherited;
end;
 


funktioniert SUPER, bin total begeistert..
Grüße von Siro
Bevor ich "C" ertragen muß, nehm ich lieber Lazarus...

Antworten