![]() |
Problem beim Scrollen mit Code durch Mausrad: gelöst
Hy Leute
Ich verwende auf einer kleinen Form ein Panel darauf befindet sich eine Scrollbox. In dieser Scrollbox befindet sich ein TmcmImageCrtl (ein bessere TImageComponente). Mit folgendem Code erreiche ich das die Scrollbox wenn die Maus darüberfährt automatisch den Focus erhält
Delphi-Quellcode:
wenn nun der Benutzer das Mausrad über dieser Scrollbox bewegt lasse ich mit folgendem Code das Bild
procedure TFmDokViewer.ImageCtrlVorschauMouseMove(Sender: TObject;
Shift: TShiftState; X, Y: Integer); var a:array[0..255] of char; begin if not ScrollReUnten.Focused then begin getwindowtext(GetActiveWindow, a, 256); if a = BezBrowserFenster then ScrollReUnten.SetFocus; end; end; scrollen
Delphi-Quellcode:
das scrollen funktioniert auch aber man kann das bild sowohl nach oben als auch nach unten aus der sichtscrollen (z.b.: Mausrad 5 mal nach oben gedreht und das Bild verschwindet nach Oben aus dem Sichtbereich der Scrollbox) ausserdem zeigen die Balken etwas falsches an die werden nur grösser und kleiner.
procedure TFmDokViewer.ScrollReUntenMouseWheelDown(Sender: TObject;
Shift: TShiftState; MousePos: TPoint; var Handled: Boolean); begin ScrollReUnten.ScrollBy(0,-30); end; procedure TFmDokViewer.ScrollReUntenMouseWheelUp(Sender: TObject; Shift: TShiftState; MousePos: TPoint; var Handled: Boolean); begin ScrollReUnten.ScrollBy(0,30); end; Wenn man mit der Maus mit dem Balken und nicht per Code verschiebt funktioniert es normal Ich will aber das es mit dem Mausrad funktioniert aber nur in dem Bereich das das Bild innerhalb des Sichtbaren Bereiches bleibt. Bin dankbar für jeden Tipp |
Re: Problem beim Scrollen mit Code durch Mausrad
Liste der Anhänge anzeigen (Anzahl: 1)
Ich hab zum besseren Verständnis wo mein Problem liegt einen Screenshot angefügt. Man sieht deutlich wie das dokument (TMCMImageCtrl) zuweit scrollt und aus dem sichtbaren Bereich verschwindet. :wall:
Wie gesagt bitte um Tips wie dieses Problem zu lösen oder zu umgehen ist :wiejetzt: |
Re: Problem beim Scrollen mit Code durch Mausrad
Hi,
der Befehl ScrollBy sollte laut OH genau das machen. Allerdings funktioniert er irgendwie nicht richtig - bei mir zumindest ist ein ähnliches Problem aufgetreten, wie bei dir. Versuch mal, mit Perform die Message ![]() MfG Stevie |
Re: Problem beim Scrollen mit Code durch Mausrad
für alle interessierte meine Lösung dieses Problems :mrgreen:
der untere code erlaubt es mit dem Mousewheel innerhalb des richtigen Bereiches vertikal zu scrollen und mit der linken und rechten Maustaste ein Mousewhell für das horizontale scrollen zu simulieren. Die scrollbalken verhalten sich in beiden Richtungen jetzt richtig :warn: Achtung in der Scrollbox Property Autoscroll auf True in die beiden Scrollbars in der visible property auch auf true stellen sonst geht gar nichts.
Delphi-Quellcode:
:coder:
//------------------------------------------------------------------------------
procedure TFmDokViewer.ImageCtrlVorschauMouseMove(Sender: TObject; //scrollbox focus setzen Shift: TShiftState; X, Y: Integer); var a:array[0..255] of char; begin if not ScrollReUnten.Focused then begin getwindowtext(GetActiveWindow, a, 256); if a = BezBrowserFenster then ScrollReUnten.SetFocus; end; end; //------------------------------------------------------------------------------ procedure TFmDokViewer.ScrollReUntenMouseWheelDown(Sender: TObject; Shift: TShiftState; MousePos: TPoint; var Handled: Boolean); begin ScrollReUnten.VertScrollBar.Position:=ScrollReUnten.VertScrollBar.Position+10; end; procedure TFmDokViewer.ScrollReUntenMouseWheelUp(Sender: TObject; Shift: TShiftState; MousePos: TPoint; var Handled: Boolean); begin ScrollReUnten.VertScrollBar.Position:=ScrollReUnten.VertScrollBar.Position-10; end; procedure TFmDokViewer.ImageCtrlVorschauMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin LetzteMausTaste:=Button; TimHorScroll.Enabled:=True; end; procedure TFmDokViewer.TimHorScrollTimer(Sender: TObject); begin if LetzteMausTaste=mbLeft then ScrollReUnten.HorzScrollBar.Position:=ScrollReUnten.HorzScrollBar.Position-10; if LetzteMausTaste=mbRight then ScrollReUnten.HorzScrollBar.Position:=ScrollReUnten.HorzScrollBar.Position+10; end; procedure TFmDokViewer.ImageCtrlVorschauMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin TimHorScroll.Enabled:=False; LetzteMausTaste:=Unassigned; end; vielleicht erspart das jemandem stundenlanges suchen |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:11 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