Forum Delphi.cz

Delphi => Obecné => Téma založeno: vojtech.vitasek 12-06-2012, 12:35:37

Název: ScrollBox max position
Přispěvatel: vojtech.vitasek 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.
Název: Re:ScrollBox max position
Přispěvatel: Radek Červinka 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.  
Název: Re:ScrollBox max position
Přispěvatel: vojtech.vitasek 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;