AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi Ärger bei Scrollbox mit .Min, .Max und PageSize
Thema durchsuchen
Ansicht
Themen-Optionen

Ärger bei Scrollbox mit .Min, .Max und PageSize

Ein Thema von delphin · begonnen am 9. Dez 2006 · letzter Beitrag vom 11. Dez 2006
Antwort Antwort
delphin

Registriert seit: 21. Aug 2003
Ort: Chemnitz
29 Beiträge
 
Delphi 7 Professional
 
#1

Ärger bei Scrollbox mit .Min, .Max und PageSize

  Alt 9. Dez 2006, 23:12
Hallo,

ich frage mich schon seit Tagen, wo mein Denkfehler liegt. Vielleicht kann mir jemannd weiterhelfen.

Ich habe einen eigenen Scrollbalken erzeugt, der mir von einem vorhanden Bild den betreffenden Ausschnitt proportional anzeigen und beim Klicken mit Hilfe einer Scrollbox verschieben soll.

z.B.: gesamtes Bild = 100 Pixel, sichtbarer Ausschnitt = 50 Pixel

ergibt sich doch:

ScrollBar1.Min := 1; ScrollBar1.Max = 100; ScrollBar1.PageSize = 50 (oder ???)

Verschiebt man nun den Scrollbalken direkt mit der Maus ans Ende der Leiste erhält man bei Abfrage im OnScroll-Ereignis genau wie bei Abfrage im OnChange-Ereignis als ScrollBar1.Position das Ergebnis = 51; (wobei eigentlich 50 zu erwarten wäre!)

Wird aber noch besser: Klick man nun weiter mit der Maus auf die Pfeil-Runter Taste läuft die ScrollBar1.Position tätsächlich noch bis 100 !!! ohne den Balken weiter zu verschieben (wie auch - steht ja schon am Ende)

Wer kann mir das jemand erklären ???
Angehängte Dateien
Dateityp: zip _sample_204.zip (6,4 KB, 18x aufgerufen)
  Mit Zitat antworten Zitat
delphin

Registriert seit: 21. Aug 2003
Ort: Chemnitz
29 Beiträge
 
Delphi 7 Professional
 
#2

Re: Ärger bei Scrollbox mit .Min, .Max und PageSize

  Alt 10. Dez 2006, 18:15
Hallo Leute,

hat den niemand das beschriebene Problem nachvollzogen??? Bin immernoch auf der Suche nach des Rätesels Lösung und brauchte mal einen kompetenten Rat von Euch.
Für eine Antwort wäre ich sehr dankbar.

Vielleicht kennt ja auch jemand eine Möglichkeit, wie man das OnScroll-Ereignis abfängt, um selbst Hand an zulegen.


Gruß Gerd
  Mit Zitat antworten Zitat
marabu

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

Re: Ärger bei Scrollbox mit .Min, .Max und PageSize

  Alt 10. Dez 2006, 21:47
Hallo Gerd,

alles ist in bester Ordnung. Deine Werte (Min=1, Max=100, Page=50) sind korrekt und das Verhalten des ScrollBar in meinen Augen auch. Dass die ScrollBox bei Pos=51 unten anschlägt ist völlig in Ordnung, da ja der ScrollRange für die zweite Page von 51 bis 100 geht. Dass du die Position bis hin zu Max weiter erhöhen kannst macht auch Sinn, wenn du statt Pixeln als Einheit mal die Zeilen eines Memo-Textes betrachtest. Nach dem ersten PageDown steht der Cursor in Zeile 51 und die ScrollBox hat ihre unterste Position erreicht. Du kannst jetzt den Cursor zeilenweise weiter nach unten fahren, aber die ScrollBox verharrt wo sie ist: am unteren Ende des ScrollBars.

Wenn du mit der Einheit Pixel arbeitest und in einem Bild gar keinen Cursor einsetzen möchtest, dann musst du in deinem Programm einfach verhindern, dass die Position größer als 51 wird. Das sollte im Ereignis OnScroll() problemlos möglich sein.

Gute Nacht
  Mit Zitat antworten Zitat
delphin

Registriert seit: 21. Aug 2003
Ort: Chemnitz
29 Beiträge
 
Delphi 7 Professional
 
#4

Re: Ärger bei Scrollbox mit .Min, .Max und PageSize

  Alt 11. Dez 2006, 09:29
Hallo marabu,

Danke für Deine Antwort. Für eine Textbox magst Du ja recht haben, wobei ich trotzdem der Meinung bin, wenn ich schon 50% von 100% sehe brauche ich auch nur noch die restlichen 50% nach unten scrollen.

Nun aber zu Deinen Lösungvorschlag: abfangen im OnScroll-Ereignis:

Hatte ich schon probiert und so ging es nicht:

Delphi-Quellcode:
procedure TForm1.ScrollBar1Scroll(Sender: TObject; ScrollCode: TScrollCode; var ScrollPos: Integer);
begin if (ScrollBar1.Position) > 50 then ScrollBar1.Position:=50;

end;
  Mit Zitat antworten Zitat
Benutzerbild von Tormentor32
Tormentor32

Registriert seit: 27. Okt 2005
Ort: Düsseldorf
369 Beiträge
 
Delphi XE5 Professional
 
#5

Re: Ärger bei Scrollbox mit .Min, .Max und PageSize

  Alt 11. Dez 2006, 10:43
versuchs mal mit

Delphi-Quellcode:
procedure TForm1.ScrollBar1Scroll(Sender: TObject; ScrollCode: TScrollCode; var ScrollPos: Integer);
begin
  if Scrollpos > 50 then ScrollPos :=50;

end;
Durch das Ändern des Wertes Scrollpos sollte der gewünschte effekt eintreten
Richard Mahr
  Mit Zitat antworten Zitat
delphin

Registriert seit: 21. Aug 2003
Ort: Chemnitz
29 Beiträge
 
Delphi 7 Professional
 
#6

Re: Ärger bei Scrollbox mit .Min, .Max und PageSize

  Alt 11. Dez 2006, 15:13
Hallo,

besten Dank. Habe noch eine Möglichkeit im OnChange-Ereignis gefunden:

Geht offensichtlich auch so:

Delphi-Quellcode:
procedure TForm1.ScrollBar1Change(Sender: TObject);
begin if Scrollbar1.Position > 50 then ScrollBar1.Position:=50
end;
Um den ganzen Ärger zu entgehen habe ich noch an der Möglichkeit gearbeitet eine eigene Komponente zu erstellen und dass OnScroll-Ereignis abzufangen.

Folgendes ist das Resultat:

Delphi-Quellcode:
TmyScroll = class(TScrollBar)
        private
          //== Lösungsvorschlag hier aus der Delphipraxis !!! ============
          procedure WMVScroll(var Message: TWMScroll); message WM_VSCROLL;

          // Scrollen mit Wheel-Rad reagieren, wenn Focus auf Element
          procedure WMMouseWheel(var Msg: TWMMouseWheel); message WM_MOUSEWHEEL;

          // aufs Scrollen mit den Tasten reagieren, wenn Focus auf Element
          procedure WMKeyDown(var Msg:TWMKey); message WM_KEYDOWN;
        
  end;
leider funktioniert so aber WMVScroll nicht. Es erfolgt gar kein Aufruf.

Setzte ich die Procedure in den privaten Teil der Form1 klappt es aber. Wieso das ?
  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 18:11 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