'Compileroption -s gui
#include "sGUI\sGUI.bas"

#include once "sGUI\ScrollBar.bas"

declare sub ShowCut(xo as integer,yo as integer)
screenres 418,318,32',,&H04'kein Fullscreen erlaubt

InitGFX

dim shared as integer ptr img,cut
img=imagecreate(1280,1024)
cut=imagecreate(400,300)

if img>0 and cut>0 then
  bload "BMPs\Bild.bmp",img

  'bild ist 1280x1024 pixel
  'Grösse des Ausschnittfensters (und Image cut) ist 400x300

  'die Parameter für hslider:
  'erstes Element in x-Richtung = 0
  'letztes Element  in x-Richtung = 1279
  'Pagegrösse= Breite unseres Ausschnittfensters = 400

  'die Parameter für vslider:
  'erstes Element in y-Richtung = 0
  'letztes Element  in y-Richtung = 1023
  'Pagegrösse = Höhe unseres Ausschnittfensters = 300
  dim as integer xoffset,yoffset
  xoffset=0
  yoffset=0

  get img,(xoffset,yoffset)-(xoffset+399,yoffset+299),cut
  put(1,1),cut,pset

  dim as EventHandle ptr event  'Deklaration einer Variable als EventHandle Pointer
  event=CreateEventHandle       'Erzeugen des EventHandles

  dim as Gadget ptr hslider,vslider
  hslider=AddScrollBar (event,0,302,402,0,1279,xoffset,400,0)
  vslider=AddScrollBar (event,402,0,302,0,1023,yoffset,300,1)


  GadgetOn (hslider)
  GadgetOn (vslider)


  do
    event->xSleep(1)

    select case event->GADGETMESSAGE
    case hslider
      xoffset=GetScrollBarVal(hslider)
      ShowCut(xoffset,yoffset)
    case vslider
      yoffset=GetScrollBarVal(vslider)
      ShowCut(xoffset,yoffset)
    end select

  loop until event->EXITEVENT

  DestroyEventHandle (event)
  imagedestroy img
  imagedestroy cut
end if
end

sub ShowCut(xo as integer,yo as integer)
  get img,(xo,yo)-(xo+399,yo+299),cut
  put(1,1),cut,pset
end sub



/'
function AddScrollBar(event as EventHandle ptr,x as integer,y as integer,l as integer,mi as integer,ma as integer,va as integer,p as integer,hv as integer) as Gadget ptr
event   ein Zeiger zu einem EventHandle
x       Position in px
y       Position in px
l       länge des ScrollBars in px
mi      Minimalwert den der Scrollwert annehmen kann
ma      Maximalwert den der Scrollwert annehmen kann
va      voreingestellter Scrollwert
p       Pagegröße, Anzahl der gleichzeitig zu sehenden Elemente, wenn >1 beeinflusst dies Größe des Scrollbereiches
        der Scrollwert wird dann nicht mehr den Maximalwert erreichen, sondern sich wie folgt errechnen:
        wenn p>1 dann erreichbarer Maximalwert von va=mi-p+1
hv      Schalter horizontal=0 vertikal=1


sub ModifyScrollBar overload(gad as Gadget ptr,va as integer)
sub ModifyScrollBar (gad as Gadget ptr,mi as integer,ma as integer)
sub ModifyScrollBar (gad as Gadget ptr,mi as integer,ma as integer,va as integer)
neuberechnen der internen Werte bei Veränderung von va,mi,ma
3 Varianten dieses Befehls
gad         Zeiger auf ein Control
va          neuer Scrollwert(Regelgröße)
mi          neuer Minimalwert den der Scrollwert annehmen kann
ma          neuer Maximalwert den der Scrollwert annehmen kann



sub SetScrollBarVal (gad as Gadget ptr,va as integer)
sub SetScrollBarLimits(gad as Gadget ptr,mi as integer,ma as integer)
beide Befehle funktionieren noch, sollten aber durch ModifyScrollbar ersetzt werden



function GetScrollBarVal (gad as Gadget ptr) as integer
liefert den Scrollwert, auf dem das Scrollbar steht
gad         Zeiger auf ein Control



'/


