AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Mausradbewegung erkennen

Ein Thema von BAMatze · begonnen am 14. Aug 2009 · letzter Beitrag vom 15. Aug 2009
 
BAMatze

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

Mausradbewegung erkennen

  Alt 14. Aug 2009, 10: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
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:34 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz