ScrollArea qui ne marche pas oO
Publié : sam. 15/août/2009 16:14
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