Hallo nochmal an alle,
noch ein Problemchen. Also ich möchte in einer Paintbox die WM_MouseWheel verwenden (Ziel ist es einen Zoom in das Bild zu ermöglichen). Dies funktioniert, allerdings nicht so gut, wie ich mir das dachte. Also hier mal schnell, was ich dazu gefunden hab oder besser was ich aus den Quellen produziert hab:
Delphi-Quellcode:
// Quellcode in der Paintbox
const MouseWheel = WM_MouseWheel;
type TOnZoomOut = procedure(Sender: TObject) of Object;
TOnZoomIn = procedure(Sender: TObject) of Object;
Type TPaintboxPos = Class(TPaintbox)
private
FOnZoomIn: TOnZoomIn;
FOnZoomOut: TOnZoomOut;
procedure WMMouseWheel(var Msg: TWMMouseWheel); message MouseWheel;
protected
procedure doZoomIn;
procedure doZoomOut;
published
property OnZoomIn: TOnZoomIn read FOnZoomIn write FOnZoomIn;
property OnZoomOut: TOnZoomOut read FOnZoomOut write FOnZoomOut;
public
...//unwichtiges Zeug entfernt
End;
implementation
...//unwichtiges Zeug entfernt
procedure TPaintboxPos.WMMouseWheel(var Msg: TWMMouseWheel);
begin
// Welche Variable muss überprüft werden von MSG?
if Msg.WheelDelta > 0 then doZoomOut
else doZoomIn;
end;
procedure TPaintBoxPos.doZoomIn;
begin
if assigned(FOnZoomIn) then FOnZoomIn(Self);
end;
procedure TPaintBoxPos.doZoomOut;
begin
if assigned(FOnZoomOut) then FOnZoomOut(Self);
end;
end.
Ok so weit so gut, das mit der MSG.WheelDelta hatte ich mal getestet und zumindest in dem Test kam in eine Richtung das
Rad gedreht positive Werte raus und in die andere Richtung negative. Das ist auch schonmal ein Ansatz, dass es funktioniert. Allerdings funktioniert das irgendwie nur sporadisch und wenn deutliche Bewegungen an dem Mausrad anliegen. Also denke ich mal, dass ich vieleicht noch nicht den optimalen Weg gewählt hab.
Da ich in der Oberklasse (für die die PaintBoxklasse geschrieben hab) einen Timer verwende, dachte ich anfangs, dass dieser den Ärger macht. Dies konnte aber nach ein paar Überlegungen und Test (Timer einfach off schalten) ausgeschlossen werden. Ich habe deswegen ein kleines Testprogramm mal zusammen gestellt und da sind mir die oben genannten Probleme aufgefallen.
Vieleicht sieht jemand, was ich noch falsch mache oder kann sich mal das kleine Testprojekt anschauen, in dem ich euch meinen Versuch zur Verfügung stelle.
Vielen Dank
BAMatze
2. Account Sero