AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi Problem beim Scrollen mit Code durch Mausrad: gelöst
Thema durchsuchen
Ansicht
Themen-Optionen

Problem beim Scrollen mit Code durch Mausrad: gelöst

Ein Thema von etom291272 · begonnen am 21. Feb 2005 · letzter Beitrag vom 22. Feb 2005
Antwort Antwort
etom291272

Registriert seit: 16. Feb 2004
Ort: ---
232 Beiträge
 
#1

Problem beim Scrollen mit Code durch Mausrad: gelöst

  Alt 21. Feb 2005, 22:54
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
  Mit Zitat antworten Zitat
etom291272

Registriert seit: 16. Feb 2004
Ort: ---
232 Beiträge
 
#2

Re: Problem beim Scrollen mit Code durch Mausrad

  Alt 22. Feb 2005, 06:25
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.

Wie gesagt bitte um Tips wie dieses Problem zu lösen oder zu umgehen ist
Miniaturansicht angehängter Grafiken
screen1_161.jpg  
  Mit Zitat antworten Zitat
Benutzerbild von Stevie
Stevie

Registriert seit: 12. Aug 2003
Ort: Soest
4.008 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#3

Re: Problem beim Scrollen mit Code durch Mausrad

  Alt 22. Feb 2005, 11:48
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
Stefan
“Simplicity, carried to the extreme, becomes elegance.” Jon Franklin

Delphi Sorcery - DSharp - Spring4D - TestInsight
  Mit Zitat antworten Zitat
etom291272

Registriert seit: 16. Feb 2004
Ort: ---
232 Beiträge
 
#4

Re: Problem beim Scrollen mit Code durch Mausrad

  Alt 22. Feb 2005, 20:36
für alle interessierte meine Lösung dieses Problems

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

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;


vielleicht erspart das jemandem stundenlanges suchen
  Mit Zitat antworten Zitat
Antwort Antwort


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 20:38 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