Re: Info sur CanevasGadget
Publié : jeu. 20/sept./2012 21:42
C'est possible de skiner une fenêtre avec un CanvasGadget ????
Code : Tout sélectionner
OpenWindow(0,0,0,1024,768,"",#PB_Window_BorderLess |#PB_Window_ScreenCentered)
CreateImage(0,32,32)
StartDrawing(ImageOutput(0))
Box(0,0,32,32,$EEEEEE)
Box(1,1,31,31,$AAAAAA)
Line(0,31,32,1,$0)
Line(31,0,1,32,$0)
LineXY(5,5,32-5,32-5,RGB(255,0,0))
LineXY(32-5,5,5,32-5,RGB(255,0,0))
StopDrawing()
CreateImage(1,32,32)
StartDrawing(ImageOutput(1))
Box(0,0,32,32,$EEEEEE)
Box(1,1,31,31,$FFFFFF)
Line(0,31,32,1,$0)
Line(31,0,1,32,$0)
LineXY(5,5,32-5,32-5,RGB(255,0,0))
LineXY(32-5,5,5,32-5,RGB(255,0,0))
StopDrawing()
CanvasGadget(0,0,0,1024,768)
timerRefresh.i = 0
Repeat
event = WindowEvent()
If WindowMouseX(0) > 1024-32-10 And WindowMouseX(0) < (1024-32-10)+32 And WindowMouseY(0) > 10 And WindowMouseY(0) < 10+32
If event = #WM_LBUTTONDOWN
quit = 1
EndIf
hoover = #True
Else
hoover = #False
EndIf
If timerRefresh < ElapsedMilliseconds()
timerRefresh = ElapsedMilliseconds() + 75
StartDrawing(CanvasOutput(0))
Box(0,0,1024,768,$BABABA)
If hoover = #False
DrawImage(ImageID(0),1024-32-10,10)
Else
DrawImage(ImageID(1),1024-32-10,10)
EndIf
DrawText(10,10,"Titre de ma fenetre !")
StopDrawing()
EndIf
Until quit = 1
Code : Tout sélectionner
;LIB GDI : http://danilo.purearea.net/gDrawing/gDrawing_v0.84.zip
;Adresse Image : http://www.purebasic.fr/english/viewtopic.php?f=13&t=38041
XIncludeFile "gDrawing.pbi"
UsePNGImageDecoder()
Enumeration
#Window_0
#ImageGadget_1
#Image_1
EndEnumeration
LoadImage(#Image_1,"C:\PureBasic\wheel.png")
Procedure rotation(image.l, X.l, Y.l, Angle.f)
ImageID = CreateImage(#PB_Any,ImageWidth(image),ImageHeight(image))
If gStartDrawing(ImageOutput(ImageID))
Box(0,0,ImageWidth(image),ImageHeight(image),#White)
gRotateAt(X,Y,Angle)
gDrawImage(image,0,0)
gResetTransform()
gStopdrawing()
EndIf
ProcedureReturn ImageID
EndProcedure
If gInit()
OpenWindow(#Window_0, 0, 0, 530, 530, "Essai Roue",#PB_Window_SystemMenu|#PB_Window_ScreenCentered)
SetWindowColor(#Window_0,#White)
ImageGadget(#ImageGadget_1, 5, 5, 530, 530, 0)
X=ImageWidth(#Image_1)/2
Y=ImageHeight(#Image_1)/2
For i=1 To 360 Step 15
image1=rotation(#Image_1, X, Y, i)
SetGadgetState(#ImageGadget_1,ImageID(Image1))
Next i
Repeat:Until WaitWindowEvent() = #PB_Event_CloseWindow
gEnd()
EndIf
Code : Tout sélectionner
Structure s_Gadget
x.i
y.i
width.i
height.i
mouseIsHoover.b
mouseIsClicked.b
image_normal.i
image_hoover.i
image_clicked.i
image_current.i
*event_callback.i
EndStructure
Code : Tout sélectionner
Structure s_ToggleButton Extends s_Gadget
state.b
EndStructure
Code : Tout sélectionner
Structure s_Gui
windowID.i
canvasID.i
needToRender.b
List *gadget_list.s_Gadget()
Array MouseButton.b(2)
mousex.i
mousey.i
EndStructure
Code : Tout sélectionner
CreateImage(0,32,32)
CreateImage(1,32,32)
CreateImage(2,32,32)
StartDrawing(ImageOutput(0))
Box(0,0,32,32,RGB(255,0,0))
StopDrawing()
StartDrawing(ImageOutput(1))
Box(0,0,32,32,RGB(0,255,0))
StopDrawing()
StartDrawing(ImageOutput(2))
Box(0,0,32,32,RGB(0,0,255))
StopDrawing()
Structure s_Gadget
x.i
y.i
width.i
height.i
mouseIsHoover.b
mouseIsClicked.b
image_normal.i
image_hoover.i
image_clicked.i
image_current.i
*event_callback.i
EndStructure
Structure s_ToggleButton Extends s_Gadget
state.b
EndStructure
Structure s_Gui
windowID.i
canvasID.i
needToRender.b
List *gadget_list.s_Gadget()
Array MouseButton.b(2)
mousex.i
mousey.i
EndStructure
Procedure.i create_gui(windowID.i)
*gui.s_Gui = AllocateMemory(SizeOf(s_Gui))
InitializeStructure(*gui,s_Gui)
*gui\windowID = WindowID
*gui\needToRender = #True
*gui\canvasID = CanvasGadget(#PB_Any,0,0,WindowWidth(*gui\windowID),WindowHeight(*gui\windowID))
ProcedureReturn *gui
EndProcedure
Procedure gui_event(*gui.s_Gui)
*gui\mousex = WindowMouseX(*gui\windowID)
*gui\mousey = WindowMouseY(*gui\windowID)
CompilerIf #PB_Compiler_OS = #PB_OS_Windows
*gui\MouseButton(0) = GetAsyncKeyState_(#VK_LBUTTON)
*gui\MouseButton(1) = GetAsyncKeyState_(#VK_RBUTTON)
*gui\MouseButton(2) = GetAsyncKeyState_(#VK_MBUTTON)
CompilerEndIf
; foreach all gadget for event
;
ForEach *gui\gadget_list()
*cGadget.s_Gadget = *gui\gadget_list()
; the mouse is over the gadget
;
If *gui\mousex => *cGadget\x And *gui\mousex < *cGadget\x + *cGadget\width And *gui\mousey => *cGadget\y And *gui\mousey < *cGadget\y + *cGadget\height
*cGadget\mouseIsHoover = #True
Else
*cGadget\mouseIsHoover = #False
EndIf
; update the correct image
;
If *cGadget\mouseIsHoover = #False And *cGadget\image_current = *cGadget\image_hoover
*cGadget\image_current = *cGadget\image_normal
*gui\needToRender = #True
EndIf
If *cGadget\mouseIsHoover = #True
*cGadget\image_current = *cGadget\image_hoover
*gui\needToRender = #True
EndIf
; call the gadget event function
;
If *cGadget\event_callback <> #Null
CallFunctionFast(*cGadget\event_callback, *cGadget)
EndIf
Next
EndProcedure
Procedure render_gui(*gui.s_Gui)
gui_event(*gui)
If *gui\needToRender = #True
StartDrawing(CanvasOutput(*gui\canvasID))
*gui\needToRender = #False
ForEach *gui\gadget_list()
*cGadget.s_Gadget = *gui\gadget_list()
If IsImage(*cGadget\image_current)
DrawAlphaImage(ImageID(*cGadget\image_current), *cGadget\x, *cGadget\y)
EndIf
Next
StopDrawing()
EndIf
EndProcedure
Procedure add_gadget_to_gui(*gui.s_Gui, *gadget.s_Gadget)
AddElement(*gui\gadget_list())
*gui\gadget_list() = *gadget
EndProcedure
Procedure toggleButonEventCallBack(*gadget.s_ToggleButton)
If *gadget\mouseIsHoover = #True
Debug "mouse is over this gadget : " + Str(*gadget)
EndIf
EndProcedure
Procedure.i createToggleButton(*gui.s_Gui, x.i,y.i,width.i,height.i)
*b.s_ToggleButton = AllocateMemory(SizeOf(s_ToggleButton))
*b\state = #False
;chargement des images...
*b\image_normal = 0
*b\image_hoover = 1
*b\image_clicked = 2
*b\x = x
*b\y = y
*b\width = width
*b\height = height
;callback du gadget
*b\event_callback = @toggleButonEventCallBack()
;ajout à la gui
add_gadget_to_gui(*gui,*b)
ProcedureReturn *b
EndProcedure
;-example
OpenWindow(0,0,0,442,442,"gui canvas")
*gui = create_gui(0)
For y = 0 To 9
For x = 0 To 9
createToggleButton(*gui,10+(x*42),10+(y*42),32,32)
Next
Next
Repeat
event = WindowEvent()
render_gui(*gui)
Until event = #PB_Event_CloseWindow