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;