AGB  ·  Datenschutz  ·  Impressum  







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

Scrollrad und Touchpad-Bildlauf

Ein Thema von bernie110 · begonnen am 12. Mai 2005 · letzter Beitrag vom 18. Mai 2005
Antwort Antwort
bernie110

Registriert seit: 13. Sep 2004
Ort: Uetersen
27 Beiträge
 
Delphi XE6 Professional
 
#1

Scrollrad und Touchpad-Bildlauf

  Alt 12. Mai 2005, 16:51
Hallo,
ich habe eine Scrollbox mit einer unterlagerten Paintbox programmiert. Nun soll auch mit dem Scrollrad an der Maus vertikal gescrollt werden.

1. Frage:
Wenn der Focus auf einer Listbox steht, so wird die Listbox durchgescrollt (häßlich!) und nicht die Scrollbox. Wie kann ich das hinbekommen, dass immer die Scrollbox das OnMouseWheel-Ereignis erhält, egal wo der Focus gerade ist?

Mein Touchpad und das an anderen Laptops hat einen "virtuellen Bildlauf" und das System tut dann bspw. im Explorer so, als ob das Mausrad betätigt wurde. In meinem Programm hat dieser "virtuelle Bildlauf" aber überhaupt keine Auswirkung/Funktion.

Daher die 2. Frage:
Wie kann ich den "virtuellen Bildlauf" des Touchpads in ein OnMouseWheel-Ereignis transformieren?

Wäre schön, wenn mir jemand helfen könnte.

Danke im Voraus,
Bernie110
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#2

Re: Scrollrad und Touchpad-Bildlauf

  Alt 13. Mai 2005, 18:07
Deine Form ist der Dispatcher für die MouseWheel-Message. Ich habe dir eine Beispiel-Unit erstellt, die dir zeigt, wie du deine Paintbox (bei mir ist sie einfach mal leer) mit dem Wheel rauf und runter scrollen kannst.

Grüße vom marabu
Angehängte Dateien
Dateityp: zip wheelu_189.zip (1.002 Bytes, 288x aufgerufen)
  Mit Zitat antworten Zitat
bernie110

Registriert seit: 13. Sep 2004
Ort: Uetersen
27 Beiträge
 
Delphi XE6 Professional
 
#3

Re: Scrollrad und Touchpad-Bildlauf

  Alt 17. Mai 2005, 11:58
Danke, marabu, das funzt schon ganz gut.
Nur wird das Scrollrad am rechten und am unteren Rand des Form nicht erkannt, das heißt: ist der Mauszeiger in einem bestimmten Bereich rechts bzw. unten, so läßt sich die Paintbox nicht per Scrollrad bewegen. Läßt sich da noch etwas verbessern?

Außerdem, weiss jemand zum 2. Punkt meiner Anfrage ' "virtueller Bildlauf" des Touchpads' eine Lösung?

Bernie110
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#4

Re: Scrollrad und Touchpad-Bildlauf

  Alt 17. Mai 2005, 12:14
Wenn dein mouse wheel rechts und unten nicht erkannt wird, dann liegt das daran, dass du den Rahmen der Scrollbox nicht berücksichtigst. Überprüfen kannst du das, indem du BorderStyle zum Test auf bsNone setzt. Korrigier einfach das Rect, welches du für die Funktion ptInRect() übergibst.

marabu
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#5

Re: Scrollrad und Touchpad-Bildlauf

  Alt 17. Mai 2005, 13:00
Funktioniert virtual scrolling mit irgendeiner Anwendung?
Hast du den Treiber für das Touchpad schon aktualisiert?

marabu
  Mit Zitat antworten Zitat
bernie110

Registriert seit: 13. Sep 2004
Ort: Uetersen
27 Beiträge
 
Delphi XE6 Professional
 
#6

Re: Scrollrad und Touchpad-Bildlauf

  Alt 18. Mai 2005, 10:34
Zitat von marabu:
Wenn dein mouse wheel rechts und unten nicht erkannt wird, dann liegt das daran, dass du den Rahmen der Scrollbox nicht berücksichtigst. [...] Korrigier einfach das Rect, welches du für die Funktion ptInRect() übergibst.

marabu
Hallo marabu,
in Deinem Beispiel stand u.a.
Delphi-Quellcode:
procedure TMainForm.FormMouseWheelDown(Sender: TObject; Shift: TShiftState;
  MousePos: TPoint; var Handled: Boolean);
begin
  if PtInRect(ScrollBox.ClientRect, ScreenToClient(MousePos)) then
    ScrollBoxMouseWheelDown(Sender, Shift, MousePos, Handled);
end;

procedure TMainForm.FormMouseWheelUp(Sender: TObject; Shift: TShiftState;
  MousePos: TPoint; var Handled: Boolean);
begin
  if PtInRect(ScrollBox.ClientRect, ScreenToClient(MousePos)) then
    ScrollBoxMouseWheelUp(Sender, Shift, MousePos, Handled);
end;
Wenn ich nun statt der "ScrollBox.ClientRect" die ClientRect des Formulars einsetze, also
Delphi-Quellcode:
procedure TMainForm.FormMouseWheelDown(Sender: TObject; Shift: TShiftState;
  MousePos: TPoint; var Handled: Boolean);
begin
  if PtInRect(Form.ClientRect, ScreenToClient(MousePos)) then
    ScrollBoxMouseWheelDown(Sender, Shift, MousePos, Handled);
end;

procedure TMainForm.FormMouseWheelUp(Sender: TObject; Shift: TShiftState;
  MousePos: TPoint; var Handled: Boolean);
begin
  if PtInRect(Form.ClientRect, ScreenToClient(MousePos)) then
    ScrollBoxMouseWheelUp(Sender, Shift, MousePos, Handled);
end;
schreibe, funktioniert es, da nun nicht mehr nur die Größe der Scrollbox auf dem Formular für die Mausaktion erkannt wird, sondern das ganze Formular.

Zitat von marabu:
Funktioniert virtual scrolling mit irgendeiner Anwendung?
Beim MS-Explorer und - glaube ich - so ziemlich allen anderen käuflich erwerbbaren Programmen wird ein Bildlauf ausgelöst. Hier sieht es auch so aus, dass der Mauszeiger dabei auf den Scrollbalken springt.
Den Treiber habe ich noch nicht aktualisiert.

Gruß Bernie110
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#7

Re: Scrollrad und Touchpad-Bildlauf

  Alt 18. Mai 2005, 10:42
Zitat von bernie110:
Wenn ich nun statt der "ScrollBox.ClientRect" die ClientRect des Formulars einsetze, funktioniert es, da nun nicht mehr nur die Größe der Scrollbox auf dem Formular für die Mausaktion erkannt wird, sondern das ganze Formular.
Das funktioniert nur solange du keinen weiteren Scrollbar (Listbox, Memo, ...) auf deiner Form hast. Sauberer ist es, wenn du die Rahmendicke im Rect berücksichtigst.

marabu
  Mit Zitat antworten Zitat
bernie110

Registriert seit: 13. Sep 2004
Ort: Uetersen
27 Beiträge
 
Delphi XE6 Professional
 
#8

Re: Scrollrad und Touchpad-Bildlauf

  Alt 18. Mai 2005, 14:16
Hallo marabu,
Leider stimmt das insofern nicht, als
a) es sich nicht nur um den Rand der Scrollbox handelt (Deinen Tipp mit "BorderStyle zum Test auf bsNone setzen" habe ich ausprobiert --> brachte keine Verbesserung);

b) innerhalb der Scrollbox das Scrollrad vollständig erkannt wird;

c) meine Scrollbox nur ca. 4/5 der Breite und 2/3 der Höhe des Formulars einnimmt.
Beispielsweise:
Delphi-Quellcode:
Form.Width := 500;
Form.Height := 300;

Scrollbox.Top := 100;
Scrollbox.Left := 100;
Scrollbox.Width := 400;
Scrollbox.Height := 200;
Dann bleiben rechts und unten jeweils 100 Pixel übrig, die vom Scrollrad nicht "erfasst" werden und nicht nur der Rahmen.

Ich verstehe die Funktion "ptInRect()" auch so, dass, wenn sich die Maus in "diesem Bereich" befindet, dann wird diese Aktion an die Scrollbar weitergeleitet. Und "dieser Bereich" sollte doch das gesamte Formular sein.

Bernie110
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#9

Re: Scrollrad und Touchpad-Bildlauf

  Alt 18. Mai 2005, 17:11
Mein Beispiel kannst du etwa so an deine Bedürfnisse anpassen:

Delphi-Quellcode:
procedure TMainForm.FormMouseWheelDown(Sender: TObject; Shift: TShiftState;
  MousePos: TPoint; var Handled: Boolean);
var
  sbr: TRect;
begin
  with Scrollbox do begin
    sbr.TopLeft := ClientToParent(ClientRect.TopLeft);
    sbr.BottomRight := ClientToParent(ClientRect.BottomRight);
  end;
  if PtInRect(sbr, ScreenToClient(MousePos)) then
    ScrollBoxMouseWheelDown(Sender, Shift, MousePos, Handled);
end;
An diesem Code-Fragment solltest du sehen, warum dein Scrollrad rechts unten nicht erkannt wurde. Weitere Anpassungen kannst du, wenn nötig, nach dem gleichen Muster vornehmen.

marabu
  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 03:41 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