Page 1 sur 2

ScrollArea qui ne marche pas oO

Publié : sam. 15/août/2009 16:14
par lepiaf31
bonjour, j'ai ptit probleme de ScrollArea: on ne peut pas descendre l'ascenseur :

Code : Tout sélectionner

UsePNGImageDecoder()

#Move_Open = 1 ;indique qu'on doit "ouvrir" la fenetre
#Move_Close = 2 ;indique qu'on doit "fermer" la fenetre

#Window_Height = 400
#Window_Width = 500
#Window_Tab_Width = 50 ;onglet
#Window_Tab_Height = 100
#Window_Menu_Width = 150 ;menu à droite

#Window_Main = 0
Enumeration
  #ScrollArea
EndEnumeration

;images
Enumeration
  #Image_Settings
  #Image_Help
  #Image_Quit
EndEnumeration

Procedure WindowCallback(Window , message, wParam, lParam)
  res=#PB_ProcessPureBasicEvents
  Select message
    Case #WM_PAINT
      If Window = WindowID(#Window_Main)
        ;fond de la fenetre
        hBrush = CreateSolidBrush_(RGB(248, 250, 253))
        Rgn = CreateRoundRectRgn_(51, 1, 499, 399, 30, 30)
        Rgn2 = CreateRoundRectRgn_(1, 151, 69, 249, 30, 30)
        CombineRgn_(Rgn, Rgn, Rgn2, #RGN_OR)
        hDC=BeginPaint_(Window,ps.PAINTSTRUCT)
        FillRgn_(hDC, Rgn, hBrush)
        EndPaint_(Window, ps)
        DeleteObject_(Rgn)
        DeleteObject_(Rgn2)
        
        DeleteObject_(hBrush)
        ProcedureReturn 0
      EndIf

  EndSelect
  ProcedureReturn res
EndProcedure

Procedure   RemoveFromTaskbar(hwnd)
  If IsWindow_ (hwnd)
    a=hwnd : b= GetWindowLong_ (a, #GWL_HWNDPARENT ) : If b<>0 : a=b : EndIf ; Needed for "TaskAssign.exe".
    ShowWindow_ (a, #SW_HIDE ) : GetWindowRect_ (a,win.RECT) : w=win\right-win\left : h=win\bottom-win\top
    SetWindowLong_ (a, #GWL_EXSTYLE , #WS_EX_TOOLWINDOW ) : SetWindowPos_ (a,0,0,0,w-1,h-1, #SWP_NOMOVE )
    SetWindowPos_ (a,0,0,0,w,h, #SWP_NOMOVE|#SWP_SHOWWINDOW ) : ProcedureReturn 1
  EndIf
EndProcedure
Procedure OpenMainWindow(Window, Color)
  OpenWindow(Window, 0, 0, #Window_Width, #Window_Height, "Program Name", #PB_Window_ScreenCentered|#PB_Window_BorderLess)
  SetWindowColor(Window, RGB(124, 185, 252)) ;couleur bleu qui devriendra la bordure de la fenetre
  StickyWindow(Window, 1)
  RemoveFromTaskBar(WindowID(Window))
  
  ;on découpe la fenetre
  Rgn = CreateRoundRectRgn_(#Window_Tab_Width, 0, #Window_Width, #Window_Height, 30, 30) ;gros cadre
  Rgn2 = CreateRoundRectRgn_(0, (#Window_Height-#Window_Tab_Height)/2, #Window_Tab_Width+20, (#Window_Height-#Window_Tab_Height)/2+#Window_Tab_Height, 30, 30) ;languette
  CombineRgn_(Rgn, Rgn, Rgn2, #RGN_OR)
  SetWindowRgn_(WindowID(Window), Rgn, #True)
  DeleteObject_(Rgn)
  DeleteObject_(Rgn2)
  
  ;resolution
  ExamineDesktops()
  ScreenWidth = DesktopWidth(0)
  ScreenHeight = DesktopHeight(0)
  ResizeWindow(Window, ScreenWidth-#Window_Tab_Width, WindowY(Window), #PB_Ignore, #PB_Ignore) ;on place la fenetre

  ScrollAreaGadget(#ScrollArea, #Window_Tab_Width+10, 5, #Window_Width-#Window_Tab_Width-#Window_Menu_Width-15, #Window_Height-10, #Window_Width-#Window_Tab_Width-#Window_Menu_Width-40-18, 600, 10, #PB_ScrollArea_BorderLess)
  ;CloseGadgetList()
  SetGadgetColor(#ScrollArea, #PB_Gadget_BackColor, RGB(248, 250, 253))
  
  ;on peint la fentre
  SetWindowCallback(@WindowCallback(), #Window_Main)
  
EndProcedure



OpenMainWindow(#Window_Main, 0)
ExamineDesktops()
WindowState = 0 ;fenetre fermée
Move = 0 ;le fenetre n'est pas en mouvement
xOpened = DesktopWidth(0) - WindowWidth(#Window_Main)
xClosed = DesktopWidth(0) - 50
time = 0

HandCursor = LoadCursor_(0, #IDC_HAND)
Repeat
  
  ;-*****Mouvement de la fenetre*****
  If Move
    If Move = #Move_Open ;on doit ouvrir la fenetre
      StepWindow = -1
      xEnd = xOpened
      EndState = 1
    Else
      StepWindow = 1
      xEnd = xClosed
      EndState = 0
    EndIf
    
    If WindowX(#Window_Main)%10 = 0 
      If ElapsedMilliseconds() - time >= 1
        ResizeWindow(#Window_Main, WindowX(#Window_Main)+StepWindow, #PB_Ignore, #PB_Ignore, #PB_Ignore)
        time = ElapsedMilliseconds()
      EndIf
    Else
      ResizeWindow(#Window_Main, WindowX(#Window_Main)+StepWindow, #PB_Ignore, #PB_Ignore, #PB_Ignore)
      time = ElapsedMilliseconds()
    EndIf
    If WindowX(#Window_Main) = xEnd
      Move = 0
      State = EndState
    EndIf
  EndIf
  ;*********************************
  
  ;-*****Curseur de la souris*****
  MouseX = WindowMouseX(#Window_Main)
  MouseY = WindowMouseY(#Window_Main)
  If MouseX<=50 And MouseY>=150 And MouseY<=250 ;"languette"
    SetCursor_(HandCursor)
  EndIf
  ;*******************************
  
  Select WaitWindowEvent(1)
    Case #PB_Event_CloseWindow
      Break
      
    Case #WM_LBUTTONDOWN ;-clic
      If WindowMouseX(#Window_Main) <= 50 And WindowMouseY(#Window_Main) >= 150 And WindowMouseY(#Window_Main) <= 250
        Clic = 1
      EndIf
    
    Case #WM_LBUTTONUP
      If Clic
        Clic = 0
        If WindowMouseX(#Window_Main) <= 50 And WindowMouseY(#Window_Main) >= 150 And WindowMouseY(#Window_Main) <= 250
          If State = 0
            Move = #Move_Open
            time = ElapsedMilliseconds()
          Else
            Move = #Move_Close
            time = ElapsedMilliseconds()
          EndIf
        EndIf
      EndIf
  EndSelect
ForEver

Publié : sam. 15/août/2009 18:55
par Thyphoon
chez moi ça marche 4.40Beta1 ! Mais j'ai du virer le resizewindow car je ne voyais pas la fenêtre !

Publié : sam. 15/août/2009 19:30
par lepiaf31
Ben normalement il y a une petite 'languette' à droite de l'ecran et quand on clique dessus, la fenetre apparait. Moi aussi ca marche si je retire le resizewindow mais je veux le laisser ^^

Publié : sam. 15/août/2009 19:51
par Thyphoon
lepiaf31 a écrit :Ben normalement il y a une petite 'languette' à droite de l'ecran et quand on clique dessus, la fenetre apparait. Moi aussi ca marche si je retire le resizewindow mais je veux le laisser ^^
oups pardon !!! :P mais le scrollaera fonctionne tres bien même avec le resize chez moi ! j'ai aucun souci ! l'ascenceur fonctionne parfaitment

Publié : sam. 15/août/2009 20:04
par lepiaf31
Eh bien moi je ne peux pas descendre l'ascenseur :( Je l'ai testé sur 2 PC et toujours le meme probleme :(

Publié : sam. 15/août/2009 20:53
par Thyphoon
lepiaf31 a écrit :Eh bien moi je ne peux pas descendre l'ascenseur :( Je l'ai testé sur 2 PC et toujours le meme probleme :(
quel version de PB ? car sur mon portable là je suis en 4.40beta 1

Publié : sam. 15/août/2009 20:55
par lepiaf31
Thyphoon a écrit : quel version de PB ? car sur mon portable là je suis en 4.40beta 1
Version 4.3

Publié : dim. 16/août/2009 10:38
par Ar-S
Testé en 4.30 sans aucun soucis.
Par contre l'affichage est propre mais lorsque l'on re-clique sur la languette pour le faire disparaitre, le temps qu'il se replie, ça laisse une vielle trainée bien moche.

Publié : dim. 16/août/2009 11:02
par lepiaf31
Bon ben moi je ne comprends pas pourquoi le scrollArea ne fonctionne pas ...
ça laisse une vielle trainée bien moche.
Je sais ca mais depend des machines, chez moi ca marche très bien, je n'ai pas de trainée. Mais je ne sais pas comment enlever cette trainée quand elle se produit.

Publié : dim. 16/août/2009 11:36
par Atomo
Je te rassure...ou pas, j'ai le même problème avec le scrollarea, par contre je peux scroller avec la molette de la souris, je n'ai pas de trainée sinon.

Windows Vista SP2
PB 4.31

Publié : dim. 16/août/2009 11:40
par lepiaf31
Bon ben moi je peux meme pas scroller avec la souris ... je suis sous Vista SP1

Publié : lun. 17/août/2009 14:30
par lepiaf31
Bon alors tant que la fenetre n'est pas sortie de l'ecran, le ScrollArea fonctionne parfaitement mais dès qu'on fait disparaitre la fenetre et qu'on la fait réapparaitre, le ScrollArea ne marche plus :(
Quelqu'un connait une fonction pour "actualiser" le gadget ? J'ai bien essayé avec un UpdateWindow_() mais ca ne fonctionne pas =( .

Code : Tout sélectionner

UsePNGImageDecoder() 

#Move_Open = 1 ;indique qu'on doit "ouvrir" la fenetre 
#Move_Close = 2 ;indique qu'on doit "fermer" la fenetre 

#Window_Height = 400 
#Window_Width = 500 
#Window_Tab_Width = 50 ;onglet 
#Window_Tab_Height = 100 
#Window_Menu_Width = 150 ;menu à droite 

#Window_Main = 0 
Enumeration 
  #ScrollArea 
EndEnumeration 

;images 
Enumeration 
  #Image_Settings 
  #Image_Help 
  #Image_Quit 
EndEnumeration 

Procedure WindowCallback(Window , message, wParam, lParam) 
  res=#PB_ProcessPureBasicEvents 
  Select message 
    Case #WM_PAINT 
      If Window = WindowID(#Window_Main) 
        ;fond de la fenetre 
        hBrush = CreateSolidBrush_(RGB(248, 250, 253)) 
        Rgn = CreateRoundRectRgn_(51, 1, 499, 399, 30, 30) 
        Rgn2 = CreateRoundRectRgn_(1, 151, 69, 249, 30, 30) 
        CombineRgn_(Rgn, Rgn, Rgn2, #RGN_OR) 
        hDC=BeginPaint_(Window,ps.PAINTSTRUCT) 
        FillRgn_(hDC, Rgn, hBrush) 
        EndPaint_(Window, ps) 
        DeleteObject_(Rgn) 
        DeleteObject_(Rgn2) 
        
        DeleteObject_(hBrush) 
        ProcedureReturn 0 
      EndIf 

  EndSelect 
  ProcedureReturn res 
EndProcedure 

Procedure   RemoveFromTaskbar(hwnd) 
  If IsWindow_ (hwnd) 
    a=hwnd : b= GetWindowLong_ (a, #GWL_HWNDPARENT ) : If b<>0 : a=b : EndIf ; Needed for "TaskAssign.exe". 
    ShowWindow_ (a, #SW_HIDE ) : GetWindowRect_ (a,win.RECT) : w=win\right-win\left : h=win\bottom-win\top 
    SetWindowLong_ (a, #GWL_EXSTYLE , #WS_EX_TOOLWINDOW ) : SetWindowPos_ (a,0,0,0,w-1,h-1, #SWP_NOMOVE ) 
    SetWindowPos_ (a,0,0,0,w,h, #SWP_NOMOVE|#SWP_SHOWWINDOW ) : ProcedureReturn 1 
  EndIf 
EndProcedure 
Procedure OpenMainWindow(Window, Color) 
  OpenWindow(Window, 0, 0, #Window_Width, #Window_Height, "Program Name", #PB_Window_ScreenCentered|#PB_Window_BorderLess) 
  SetWindowColor(Window, RGB(124, 185, 252)) ;couleur bleu qui devriendra la bordure de la fenetre 
  StickyWindow(Window, 1) 
  RemoveFromTaskBar(WindowID(Window)) 
  
  ;on découpe la fenetre 
  Rgn = CreateRoundRectRgn_(#Window_Tab_Width, 0, #Window_Width, #Window_Height, 30, 30) ;gros cadre 
  Rgn2 = CreateRoundRectRgn_(0, (#Window_Height-#Window_Tab_Height)/2, #Window_Tab_Width+20, (#Window_Height-#Window_Tab_Height)/2+#Window_Tab_Height, 30, 30) ;languette 
  CombineRgn_(Rgn, Rgn, Rgn2, #RGN_OR) 
  SetWindowRgn_(WindowID(Window), Rgn, #True) 
  DeleteObject_(Rgn) 
  DeleteObject_(Rgn2) 
  
  ;resolution 
  ExamineDesktops() 
  ScreenWidth = DesktopWidth(0) 
  ScreenHeight = DesktopHeight(0) 

  ScrollAreaGadget(#ScrollArea, #Window_Tab_Width+10, 5, #Window_Width-#Window_Tab_Width-#Window_Menu_Width-15, #Window_Height-10, #Window_Width-#Window_Tab_Width-#Window_Menu_Width-40-18, 600, 10, #PB_ScrollArea_BorderLess) 
  ;CloseGadgetList() 
  SetGadgetColor(#ScrollArea, #PB_Gadget_BackColor, RGB(248, 250, 253)) 
  
  ;on peint la fentre 
  SetWindowCallback(@WindowCallback(), #Window_Main) 
  
EndProcedure 



OpenMainWindow(#Window_Main, 0) 
ExamineDesktops() 
State = 0 ;fenetre fermée 
Move = 0 ;le fenetre n'est pas en mouvement 
xOpened = DesktopWidth(0) - WindowWidth(#Window_Main) 
xClosed = DesktopWidth(0) - 50 
time = 0 

HandCursor = LoadCursor_(0, #IDC_HAND)

State = 1
ResizeWindow(Window, xOpened, WindowY(Window), #PB_Ignore, #PB_Ignore) ;on place la fenetre 
Repeat 
  
  ;-*****Mouvement de la fenetre***** 
  If Move 
    If Move = #Move_Open ;on doit ouvrir la fenetre 
      StepWindow = -1 
      xEnd = xOpened 
      EndState = 1 
    Else 
      StepWindow = 1 
      xEnd = xClosed 
      EndState = 0 
    EndIf 
    
    If WindowX(#Window_Main)%10 = 0 
      If ElapsedMilliseconds() - time >= 1 
        ResizeWindow(#Window_Main, WindowX(#Window_Main)+StepWindow, #PB_Ignore, #PB_Ignore, #PB_Ignore) 
        time = ElapsedMilliseconds() 
      EndIf 
    Else 
      ResizeWindow(#Window_Main, WindowX(#Window_Main)+StepWindow, #PB_Ignore, #PB_Ignore, #PB_Ignore) 
      time = ElapsedMilliseconds() 
    EndIf 
    If WindowX(#Window_Main) = xEnd 
      Move = 0 
      State = EndState 
    EndIf 
  EndIf 
  ;********************************* 
  
  ;-*****Curseur de la souris***** 
  MouseX = WindowMouseX(#Window_Main) 
  MouseY = WindowMouseY(#Window_Main) 
  If MouseX<=50 And MouseY>=150 And MouseY<=250 ;"languette" 
    SetCursor_(HandCursor) 
  EndIf 
  ;******************************* 
  
  Select WaitWindowEvent(1) 
    Case #PB_Event_CloseWindow 
      Break 
      
    Case #WM_LBUTTONDOWN ;-clic 
      If WindowMouseX(#Window_Main) <= 50 And WindowMouseY(#Window_Main) >= 150 And WindowMouseY(#Window_Main) <= 250 
        Clic = 1 
      EndIf 
    
    Case #WM_LBUTTONUP 
      If Clic 
        Clic = 0 
        If WindowMouseX(#Window_Main) <= 50 And WindowMouseY(#Window_Main) >= 150 And WindowMouseY(#Window_Main) <= 250 
          If State = 0 
            Move = #Move_Open 
            time = ElapsedMilliseconds() 
          Else 
            Move = #Move_Close 
            time = ElapsedMilliseconds() 
          EndIf 
        EndIf 
      EndIf 
  EndSelect 
ForEver

Publié : sam. 29/août/2009 13:56
par lepiaf31
Personne n'a d'idée ?? :( J'ai le meme probleme sous XP SP3

Publié : sam. 29/août/2009 14:51
par MLD
Aucun problème. je suis sous XP3, avec deux écrans. Ta fenêtre chevauche sur les deux écrans. Regarde si le problème ne vient pas de la position de la fenêtre ?

Publié : sam. 29/août/2009 16:26
par zaphod
Salut,
j'arrive à ça :

Code : Tout sélectionner

UsePNGImageDecoder() 

#Move_Open = 1 ;indique qu'on doit "ouvrir" la fenetre 
#Move_Close = 2 ;indique qu'on doit "fermer" la fenetre 

#Window_Height = 400 
#Window_Width = 500 
#Window_Tab_Width = 50 ;onglet 
#Window_Tab_Height = 100 
#Window_Menu_Width = 150 ;menu à droite 

#Window_Main = 0 
Enumeration 
  #ScrollArea 
EndEnumeration 

;images 
Enumeration 
  #Image_Settings 
  #Image_Help 
  #Image_Quit 
EndEnumeration 

Procedure WindowCallback(Window , message, wParam, lParam) 
  res=#PB_ProcessPureBasicEvents 
  Select message 
    Case #WM_PAINT 
      If Window = WindowID(#Window_Main) 
        ;fond de la fenetre 
        hBrush = CreateSolidBrush_(RGB(248, 250, 253)) 
        Rgn = CreateRoundRectRgn_(51, 1, WindowWidth(#window_main), 399, 30, 30) 
        Rgn2 = CreateRoundRectRgn_(1, 151, 69, 249, 30, 30) 
        CombineRgn_(Rgn, Rgn, Rgn2, #RGN_OR) 
        hDC=BeginPaint_(Window,ps.PAINTSTRUCT) 
        FillRgn_(hDC, Rgn, hBrush) 
        EndPaint_(Window, ps) 
        DeleteObject_(Rgn) 
        DeleteObject_(Rgn2) 
        
        DeleteObject_(hBrush) 
        ProcedureReturn 0 
      EndIf 

  EndSelect 
  ProcedureReturn res 
EndProcedure 

Procedure   RemoveFromTaskbar(hwnd) 
  If IsWindow_ (hwnd) 
    a=hwnd : b= GetWindowLong_ (a, #GWL_HWNDPARENT ) : If b<>0 : a=b : EndIf ; Needed for "TaskAssign.exe". 
    ShowWindow_ (a, #SW_HIDE ) : GetWindowRect_ (a,win.RECT) : w=win\right-win\left : h=win\bottom-win\top 
    SetWindowLong_ (a, #GWL_EXSTYLE , #WS_EX_TOOLWINDOW ) : SetWindowPos_ (a,0,0,0,w-1,h-1, #SWP_NOMOVE ) 
    SetWindowPos_ (a,0,0,0,w,h, #SWP_NOMOVE|#SWP_SHOWWINDOW ) : ProcedureReturn 1 
  EndIf 
EndProcedure 
Procedure OpenMainWindow(Window, Color) 
  OpenWindow(Window, 0, 0, #Window_Width, #Window_Height, "Program Name", #PB_Window_ScreenCentered|#PB_Window_BorderLess) 
  SetWindowColor(Window, RGB(124, 185, 252)) ;couleur bleu qui devriendra la bordure de la fenetre 
  StickyWindow(Window, 1) 
  RemoveFromTaskBar(WindowID(Window)) 
  
  ;on découpe la fenetre 
  Rgn = CreateRoundRectRgn_(#Window_Tab_Width, 0, #Window_Width, #Window_Height, 30, 30) ;gros cadre 
  Rgn2 = CreateRoundRectRgn_(0, (#Window_Height-#Window_Tab_Height)/2, #Window_Tab_Width+20, (#Window_Height-#Window_Tab_Height)/2+#Window_Tab_Height, 30, 30) ;languette 
  CombineRgn_(Rgn, Rgn, Rgn2, #RGN_OR) 
  SetWindowRgn_(WindowID(Window), Rgn, #True) 
  DeleteObject_(Rgn) 
  DeleteObject_(Rgn2) 
  
  ;resolution 
  ExamineDesktops() 
  ScreenWidth = DesktopWidth(0) 
  ScreenHeight = DesktopHeight(0) 

  ScrollAreaGadget(#ScrollArea, #Window_Tab_Width+10, 5, #Window_Width-#Window_Tab_Width-#Window_Menu_Width-15, #Window_Height-10, #Window_Width-#Window_Tab_Width-#Window_Menu_Width-40-18, 600, 10, #PB_ScrollArea_BorderLess) 
  ;CloseGadgetList() 
  SetGadgetColor(#ScrollArea, #PB_Gadget_BackColor, RGB(248, 250, 253)) 
  
  ;on peint la fentre 
  SetWindowCallback(@WindowCallback(), #Window_Main) 
  
EndProcedure 



OpenMainWindow(#Window_Main, 0) 
ExamineDesktops() 
State = 0 ;fenetre fermée 
Move = 0 ;le fenetre n'est pas en mouvement 
xOpened = DesktopWidth(0) - WindowWidth(#Window_Main) 
xClosed = DesktopWidth(0) - 50 
time = 0 

HandCursor = LoadCursor_(0, #IDC_HAND) 

State = 1 
ResizeWindow(Window, xOpened, WindowY(Window), #PB_Ignore, #PB_Ignore) ;on place la fenetre 
Repeat 
  
  ;-*****Mouvement de la fenetre***** 
  If Move 
    If Move = #Move_Open ;on doit ouvrir la fenetre 
      StepWindow = -1 
      xEnd = xOpened 
      EndState = 1 
    Else 
      StepWindow = 1 
      xEnd = xClosed 
      EndState = 0 
    EndIf 
    
    ;If WindowX(#Window_Main)%10 = 0 
    ; If ElapsedMilliseconds() - time >= 1 
    ;    ResizeWindow(#Window_Main, WindowX(#Window_Main)+stepwindow, #PB_Ignore,#PB_Ignore, #PB_Ignore) 
    ;    time = ElapsedMilliseconds() 
    ;  EndIf 
    ;Else 
   Delay(1)
      ResizeWindow(#Window_Main, WindowX(#Window_Main)+stepwindow, #PB_Ignore, #PB_Ignore, #PB_Ignore) 
    ;  time = ElapsedMilliseconds() 
    ;EndIf 
    If WindowX(#Window_Main) = xEnd 
      Move = 0 
      State = EndState 
    EndIf 
  EndIf 
  ;********************************* 
  
  ;-*****Curseur de la souris***** 
  MouseX = WindowMouseX(#Window_Main) 
  MouseY = WindowMouseY(#Window_Main) 
  If MouseX<=50 And MouseY>=150 And MouseY<=250 ;"languette" 
    SetCursor_(HandCursor) 
  EndIf 
  ;******************************* 
  
  Select WaitWindowEvent(1) 
    Case #PB_Event_CloseWindow 
      Break 
      
    Case #WM_LBUTTONDOWN ;-clic 
      If WindowMouseX(#Window_Main) <= 50 And WindowMouseY(#Window_Main) >= 150 And WindowMouseY(#Window_Main) <= 250 
        Clic = 1 
      EndIf 
    
    Case #WM_LBUTTONUP 
      If Clic 
        Clic = 0 
        If WindowMouseX(#Window_Main) <= 50 And WindowMouseY(#Window_Main) >= 150 And WindowMouseY(#Window_Main) <= 250 
          If State = 0 
            Move = #Move_Open 
            time = ElapsedMilliseconds() 
          Else 
            Move = #Move_Close 
            time = ElapsedMilliseconds() 
          EndIf 
        EndIf 
      EndIf 
  EndSelect 
ForEver