Vielen Dank, Peter. Diesen Trick kannte ich schon, hatte ihn aber völlig vergessen. Merke ich mir hoffentlich für das nächste Mal.
Eine Verzögerung brauche ich dennoch, weil ich nicht nur den "Nachlauf" verhindern möchte, sondern anstrebe, dass pro Mausradbetätigung nur einmal das Bild gewechselt wird, so dass man nicht dauernd aufpassen muss, nicht zuviel zu drehen.
Ich habe jetzt von den Nachrichten ganz Abschied genommen und das Ganze in OnMouseWheel verlagert (BeimRollen ist eine globale Variable, auch verpönt, ich weiß):
Delphi-Quellcode:
procedure TFrmSB.AnzeigeMouseWheel(Sender: TObject; Shift: TShiftState; WheelDelta: Integer; MousePos: TPoint; var Handled: Boolean);
var Richtung:integer; GTC:Cardinal;
begin
Richtung := IfThen(WheelDelta = 0,-1,1);
If BeimRollen then
begin
Handled := True;
exit;
end;
BeimRollen := True;
GTC := GetTickCount;
Try
If Richtung = 1 then
SetzeNächstesBild(bwVor) else
SetzeNächstesBild(bwZurück);
While (GetKeyState(VK_CONTROL) >= 0) and (GetTickCount < (GTC + 250)) do
Application.ProcessMessages;
Finally
BeimRollen := False;
end;
end;
Das macht genau, was ich will.