Einzelnen Beitrag anzeigen

BAMatze

Registriert seit: 18. Aug 2008
Ort: Berlin
759 Beiträge
 
Turbo Delphi für Win32
 
#1

Mausradbewegung erkennen

  Alt 14. Aug 2009, 11:56
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
Angehängte Dateien
Dateityp: zip paintbox_270.zip (240,8 KB, 18x aufgerufen)
2. Account Sero
  Mit Zitat antworten Zitat