Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Problem beim Scrollen mit Code durch Mausrad: gelöst (https://www.delphipraxis.net/40842-problem-beim-scrollen-mit-code-durch-mausrad-geloest.html)

etom291272 21. Feb 2005 22:54


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:
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;
wenn nun der Benutzer das Mausrad über dieser Scrollbox bewegt lasse ich mit folgendem Code das Bild
scrollen

Delphi-Quellcode:
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;
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.
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

etom291272 22. Feb 2005 06:25

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:

Stevie 22. Feb 2005 11:48

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 MSDN-Library durchsuchenWM_VSCROLL abzusetzen.

MfG
Stevie

etom291272 22. Feb 2005 20:36

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:
//------------------------------------------------------------------------------

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;
:coder:

vielleicht erspart das jemandem stundenlanges suchen


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:34 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz