Autor Téma: ScrollBox max position  (Přečteno 3954 krát)

Offline vojtech.vitasek

  • Příspěvků: 6
  • Karma: 0
ScrollBox max position
« kdy: 12-06-2012, 12:35:37 »
Zdravim,

jak zjistit u ScrollBoxu maximalni pozici pro scrollbary?

Chci udelat to, ze se bude scrollbox scrollovat na onmousewheel a to tak, ze pokud bude vertikalni scrollbar na konci, zacnu scrollovat horizontalnim a naopak. Tedy dokud to lze roluji vertikalni a pak horizontalni. Ale nevim jak zjistit, ze uz je verikalni scrollbar na konci.

Offline Radek Červinka

  • Administrátoři
  • Padawan
  • *****
  • Příspěvků: 3554
  • Karma: 112
    • Verze Delphi: D2007, DXE + 2 poslední
    • O Delphi v češtině
Re:ScrollBox max position
« Odpověď #1 kdy: 12-06-2012, 13:13:15 »
Já používám něco takového v OnMouseWheeel  (navíc musíš podle mne pracovat s VertScrollBar.Range) :

Kód: Delphi [Vybrat]
  1.   with TScrollBox(Sender) do
  2.   begin
  3.     if VertScrollBar.IsScrollBarVisible then
  4.     begin
  5.       with VertScrollBar do
  6.       begin
  7.         if WheelDelta < 0 then
  8.           VertScrollBar.Position := VertScrollBar.Position  + ciStep
  9.         else
  10.           VertScrollBar.Position := VertScrollBar.Position  - ciStep ;
  11.         Handled := True;
  12.       end;
  13.     end;
  14.   end;
  15.  
  16.  
Embarcadero MVP - Czech republic

Offline vojtech.vitasek

  • Příspěvků: 6
  • Karma: 0
Re:ScrollBox max position
« Odpověď #2 kdy: 12-06-2012, 13:47:56 »
nakonec jsem vyresil jednoduse, ze si zapamatuji position pred zmenou a pokud po zmene se position neznemi u vertikalniho, tak zkusim zmenit u horizontalniho. Vyuzivam vlastnosti, ze pokud nastavuji position mino rozsah, tak se position nemeni. Chytre a jednoduche  :)

Kód: Delphi [Vybrat]
  1.     OldVertPos := sb.VertScrollBar.ScrollPos;
  2.     OldHorzPos := sb.HorzScrollBar.ScrollPos;
  3.     Delta := WheelDelta div 3;
  4.  
  5.     sb.VertScrollBar.Position := OldVertPos - Delta;
  6.  
  7.     if sb.VertScrollBar.ScrollPos = OldVertPos then
  8.       sb.HorzScrollBar.Position := OldHorzPos - Delta;
  9.  
  10.     if (sb.VertScrollBar.ScrollPos <> OldVertPos) or (sb.HorzScrollBar.ScrollPos <> OldHorzPos) then
  11.       Handled := True;