Einzelnen Beitrag anzeigen

TiGü

Registriert seit: 6. Apr 2011
Ort: Berlin
3.070 Beiträge
 
Delphi 10.4 Sydney
 
#4

AW: Mausrad (mousewheel event ) in TFrame aktivieren

  Alt 26. Okt 2015, 09:26
Aha, das tritt tatsächlich nur mit den Frame auf.

Wahrscheinlich ruft Control.DefaultHandler immer wieder rekursiv TMainForm.MouseWheelHandler auf.
Versuche mal ggf. diesen Ausdruck nach der if-Abfrage wegzulassen.

Wenn unumgänglich, kannst du dir auch mit folgenden Workaround helfen.
Die Klassen-Variable FEntered ist von Typ Boolean, also im private-Abschnitt des Formular anlegen.

Delphi-Quellcode:
procedure TMainForm.MouseWheelHandler(var AMessage: TMessage);
var
  Control: TWinControl;
begin
  try
    if not FEntered then
    begin
      FEntered := True;
      Control := FindVCLWindow(SmallPointToPoint(TWMMouseWheel(AMessage).Pos));
      if Assigned(Control) then
      begin
        AMessage.Result := Control.Perform(CM_MOUSEWHEEL, AMessage.WParam, AMessage.LParam);
        if AMessage.Result = 0 then
          Control.DefaultHandler(AMessage);
      end
      else
        inherited MouseWheelHandler(AMessage);
    end;
  finally
    FEntered := False;
  end;
end;
  Mit Zitat antworten Zitat