Code : Tout sélectionner
Define.i Event, Image
If OpenWindow(0, 0, 0, 430, 100, "Exemple...", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
ButtonGadget(1, 5, 70, 200, 30, "Dessiner sur la fenêtre")
ButtonImageGadget(2, 0, 0, 210, 70, 0)
Repeat
Event = WaitWindowEvent()
Select Event
Case #PB_Event_Gadget
Select EventGadget()
Case 1
If StartDrawing(WindowOutput(0))
;Debug OutputDepth()
If IsImage(Image)
FreeImage(Image)
EndIf
Image = GrabDrawingImage(#PB_Any, GadgetX(1), GadgetY(1), GadgetWidth(1), GadgetHeight(1))
DrawImage(ImageID(Image), 220, 20)
;DrawAlphaImage(ImageID(Image), 220, 20)
StopDrawing()
SetGadgetAttribute(2, #PB_Button_Image, ImageID(Image) )
EndIf
EndSelect
EndSelect
Until Event = #PB_Event_CloseWindow
EndIf
cela fonctionne bien avec le gadget texte, j'ai créer un bouton bidon avec l'id 1 et je lui retransfaire le focus au cas ou, mais c'est pas ça qui coince....
pour que le bouton soit pris, il faut le désactiver avant sa capture (procedure AjouteGadget - disableGadget....)
le principe du programme, je crée le gadget voulu avec toujours le même identifiant, je capture son image, détruit le gadget, affiche l'image dans #PB_Event_Repaint
je comprends pas, un truc bateau que je fais mal ou auquel je pense pas... ???
Patrick
Code : Tout sélectionner
EnableExplicit
Enumeration window
#Form_principal
EndEnumeration
Enumeration menu
#Mnu_principal
#Mnu_insert_button
#Mnu_insert_text
EndEnumeration
Enumeration 0
#gad_DessinGadget
EndEnumeration
#Souris_Bouge = 512;
#SourisBG_BAS = 513;
#SourisBG_HAUT = 514;
#SourisBG_Dbl_Clic = 515;
#SourisBD_BAS = 516;
#SourisBD_HAUT = 517;
#SourisBD_Dbl_Clic = 518;
#SourisBM_BAS = 519;
#SourisBM_HAUT = 520;
#SourisBM_Dbl_Clic = 521;
Structure STRUC_GADGET
l_identifiant.l
l_type.l
l_posX.l
l_posY.l
l_largeur.l
l_hauteur.l
s_titre.s
l_option.l
l_Image_du_gadget.l
EndStructure
Structure STRUC_Sauve_Event
no_event.b
xdep.l
ydep.l
bouton_souris.b
souris_bouge.b
EndStructure
Global NewList List_Gadget.STRUC_GADGET()
Global EtatEvent.STRUC_Sauve_Event
Global l_DenierNumeroIdentifiant.l
Global b_DemandeCaptureGadget.b
Procedure CaptureGadget()
Protected Image.l
If StartDrawing(WindowOutput(#Form_principal))
If IsImage(Image)
FreeImage(Image)
EndIf
Image = GrabDrawingImage(#PB_Any,GadgetX(#gad_DessinGadget), GadgetY(#gad_DessinGadget), GadgetWidth(#gad_DessinGadget), GadgetHeight(#gad_DessinGadget))
List_Gadget()\l_Image_du_gadget = Image
;FreeGadget(#gad_DessinGadget)
StopDrawing()
EndIf
b_DemandeCaptureGadget = #False
EndProcedure
Procedure AjouteGadget(type_gadget.l,x.l,y.l,largeur.l,hauteur.l,titre.s,option.l)
AddElement(List_Gadget())
With List_Gadget()
\l_identifiant = l_DenierNumeroIdentifiant
\l_type = type_gadget
\l_posX = x
\l_posY = y
\l_largeur = largeur
\l_hauteur = hauteur
\s_titre = titre
\l_option = option
Select type_gadget
Case #PB_GadgetType_Button
ButtonGadget(#gad_DessinGadget,\l_posX,\l_posY,\l_largeur,\l_hauteur,\s_titre);,\l_option)
;DisableGadget(#gad_DessinGadget,#True)
Case #PB_GadgetType_Text
TextGadget(#gad_DessinGadget,\l_posX,\l_posY,\l_largeur,\l_hauteur,\s_titre);,\l_option)
EndSelect
SetActiveGadget(1)
EndWith
b_DemandeCaptureGadget = #True
l_DenierNumeroIdentifiant+1
EndProcedure
Procedure Fen_Principale()
Protected Event.l
If OpenWindow(#Form_principal,10,10,1024,768,"Edit-minator",#PB_Window_SystemMenu)
If CreateMenu(#Mnu_principal, WindowID(#Form_principal))
MenuTitle("Inserer")
MenuItem(#Mnu_insert_button, "Bouton")
MenuItem(#Mnu_insert_text, "Text")
EndIf
ButtonGadget(1,0,0,100,50,"lijhk")
l_DenierNumeroIdentifiant = 1000
b_DemandeCaptureGadget = #False
Repeat
Event = WaitWindowEvent()
Select Event
Case #PB_Event_Repaint
ForEach List_Gadget()
If StartDrawing(WindowOutput(#Form_principal))
DrawImage(ImageID(List_Gadget()\l_Image_du_gadget), List_Gadget()\l_posX,List_Gadget()\l_posY+100)
StopDrawing()
EndIf
Next
Case #PB_Event_Menu
Select EventMenu()
Case #Mnu_insert_button
AjouteGadget(#PB_GadgetType_Button,100,100,100,20,"Bouton_",#NUL)
Case #Mnu_insert_text
AjouteGadget(#PB_GadgetType_Text,100,100,100,20,"text_",#NUL)
EndSelect ; event menu
Default
;Debug event
EndSelect ; event general
If b_DemandeCaptureGadget = #True
CaptureGadget()
EndIf
Until Event = #PB_Event_CloseWindow
EndIf
EndProcedure
Fen_Principale()
End