Page 1 sur 1

scrollareagadget

Publié : sam. 24/janv./2004 11:38
par gaut
j'utilise la commande scrollareagadget et j'aimerai savoir la position de la barre de defilement, seulement voila, le probleme c'est que j'ai aucune fonction ou commande que je connaisse qui pourait me retourner la position de la barre, si vous avez un morceau de code permettant de le faire n'hesité pas a repondre !!

merci d'avance

Publié : sam. 24/janv./2004 11:48
par comtois
Un bout de code trouvé sur le forum anglais :)

Code : Tout sélectionner

Procedure GetMouseX(gadget) 
  GetCursorPos_(mouse.POINT) 
  MapWindowPoints_(0,GadgetID(gadget),mouse,1) 
  ProcedureReturn mouse\x 
EndProcedure 

Procedure GetMouseY(gadget) 
  GetCursorPos_(mouse.POINT) 
  MapWindowPoints_(0,GadgetID(gadget),mouse,1) 
  ProcedureReturn mouse\y 
EndProcedure 

Procedure GetDesktopWidth() 
  ProcedureReturn GetSystemMetrics_(#SM_CXSCREEN) 
EndProcedure 

Procedure GetDesktopHeight() 
  ProcedureReturn GetSystemMetrics_(#SM_CYSCREEN) 
EndProcedure 

Procedure ResizeCallback(hWnd,Msg,wParam,lParam) 
  Result = #PB_ProcessPureBasicEvents 
  If Msg = #WM_SIZE 
    w = lParam & $FFFF 
    h = (lParam >> 16 ) & $FFFF 
    MoveWindow_(GadgetID(1),0,0,w,h,1) 
  EndIf 
  ProcedureReturn Result 
EndProcedure 

OpenWindow( 0,0,0,300,300,#PB_Window_SystemMenu|#PB_Window_SizeGadget|#PB_Window_ScreenCentered,"PB_Scrollpaint") 
  CreateGadgetList(WindowID()) 
  SetWindowCallback(@ResizeCallback()) 

  AreaX = GetDesktopWidth() : AreaY = GetDesktopHeight() 

  hImg = CreateImage(0,AreaX,AreaY) 
  StartDrawing(ImageOutput()) 
    For x = 0 To AreaX Step 40 
     For y = 0 To AreaY Step 40 
       Box(x,y,20,20,RGB(0,0,255)) : Box(x+20,y,20,20,RGB(0,0,180)) 
       Box(x,y+20,20,20,RGB(0,0,128)) : Box(x+20,y+20,20,20,RGB(0,0,80)) 
     Next y 
    Next x 
  StopDrawing() 

  ScrollAreaGadget(1,0,0,WindowWidth(),WindowHeight(),AreaX,AreaY,10,#PB_ScrollArea_BorderLess) 
    ImageGadget(2,0,0,AreaX,AreaY,hImg)  
  CloseGadgetList() 

pendown=0 

Repeat 
  Select WaitWindowEvent(): 
     Case #PB_EventCloseWindow: End 
      
     Case #WM_LBUTTONDOWN 
       mx=GetMouseX(2) : my=GetMouseY(2) 
       mxx=(mx/20)*20 : myy=(my/20)*20 
       UseImage(0) 
       StartDrawing(ImageOutput()) 
          Box(mxx,myy,20,20,RGB(255,180,0)) 
       StopDrawing() 
       SetGadgetState(2, UseImage(0)) 
       pendown=1 
      
     Case #WM_LBUTTONUP 
       pendown=0 

     Case #WM_MOUSEMOVE 
       If pendown=1 
         mx=GetMouseX(2) : my=GetMouseY(2) 
         mxx=(mx/20)*20 : myy=(my/20)*20 
         UseImage(0) 
         StartDrawing(ImageOutput()) 
            Box(mxx,myy,20,20,RGB(255,180,0)) 
         StopDrawing() 
       SetGadgetState(2, UseImage(0)) 
       EndIf 
      
     Case #PB_EventGadget 
       Select EventGadgetID() 
         Case 3 
             End 
       EndSelect 
  EndSelect 
ForEver 
End 
Et Denis m'avait donné une autre façon de faire
en utilisant

; Position curseur de la ScrollArea
PosScrollH.l = GetScrollPos_(GadgetID(0), #SB_HORZ)
PosScrollV.l = GetScrollPos_(GadgetID(0), #SB_VERT)

Code : Tout sélectionner

Procedure.l GetWindowSize(type.l) 
   ; Source http://forum.purebasic.fr/    
   ; type = 1 : largeur de la bordure droite, gauche ou basse d'une fenêtre 
   ; type = 2 : hauteur de la bordure de titre d'une fenêtre 
   ; type = 3 : largeur de la fenêtre 
   ; type = 4 : hauteur de la fenêtre 
    
   GetWindowRect_(WindowID(), @Taille_Fenetre.RECT) 
   Largeur_Fenetre = Taille_Fenetre\Right - Taille_Fenetre\Left 
   Hauteur_Fenetre = Taille_Fenetre\Bottom - Taille_Fenetre\top 
   Largeur_Bordure = (Largeur_Fenetre - WindowWidth()) / 2 
   Hauteur_Titre = Hauteur_Fenetre - WindowHeight() - Largeur_Bordure 
   Select type 
      Case 1 
         ProcedureReturn Largeur_Bordure 
      Case 2 
         ProcedureReturn Hauteur_Titre 
      Case 3 
         ProcedureReturn Largeur_Fenetre 
      Case 4 
         ProcedureReturn Hauteur_Fenetre 
   EndSelect 
EndProcedure 

If OpenWindow(0, 0, 0, 500, 500, #PB_Window_SystemMenu | #PB_Window_MinimizeGadget, "TEST") 
  
   If CreateGadgetList(WindowID()) 
      ScrollAreaGadget(0, 0, 0, 450, 450, 1000, 1000, 5, #PB_ScrollArea_BorderLess) 
      CloseGadgetList() 
   EndIf 
  
   If CreateStatusBar(0, WindowID()) 
      AddStatusBarField(100) 
      AddStatusBarField(100) 
   EndIf 

   Repeat 
      ; Position curseur de la ScrollArea 
      PosScrollH.l = GetScrollPos_(GadgetID(0), #SB_HORZ) 
      PosScrollV.l = GetScrollPos_(GadgetID(0), #SB_VERT) 
      
      ; Largeur et hauteur bordures de la fenêtre 
      Largeur.l = GetWindowSize(1) 
      Hauteur.l = GetWindowSize(2) 
      
      ; Calcule la position de la souris sur la ScrollArea 
      MulotX = PosScrollH + WindowMouseX()-Largeur 
      MulotY = PosScrollV + WindowMouseY()-Hauteur 
      
      StatusBarText(0,0,Str(PosScrollH)+" - " +Str(PosScrollV),#PB_StatusBar_Center) 
      StatusBarText(0,1,Str(MulotX)+" - " +Str(MulotY),#PB_StatusBar_Center) 
  Until WaitWindowEvent() = #PB_EventCloseWindow 
EndIf 
End

Publié : sam. 24/janv./2004 11:58
par gaut
apparament pour que ca marche il faut avoir la version enregistrer et non la version demo, et moi j'ai la version demo, bon bah je crois que je ais aller acheter purebasic...

Publié : sam. 24/janv./2004 12:06
par Invité
oui les apis ne fonctionnent pas avec la version démo .

comtois