Je rencontre un petit problème qui me grattouille.
J'utilise le Form Designer pour créer mon interface (sous Windows) : 2 boutons qui vont basculer de l'état ON à l'état OFF en changeant de couleur.
Pour le changement de couleur, j'utilise un code proposé par Zorro qui consiste à lire les caractéristiques du bouton juste après le click, à le détruire et à le recréer avec une nouvelle couleur de fond.
Mon problème est que quand j'utilise le debugger, le programme s'arrête en m'indiquant une erreur du type :
Evidement, j'utilise le debugger pour ... débugger. Je devrai m'en sortir en bricolant mais ce n'est pas totalement satisfaisant.[ERREUR] Le numéro d'objet #Gadget est très élevé (au dessus de 10000), Êtes-vous sûr ?
Pas de soucis en revanche après compilation.
Par avance merci pour votre aide.
Les codes sont les suivants :
INTERFACE :
Code : Tout sélectionner
;
; This code is automatically generated by the FormDesigner.
; Manual modification is possible to adjust existing commands, but anything else will be dropped when the code is compiled.
; Event procedures needs to be put in another source file.
;
Global Window_1
Global btn_B1, btn_B2
Enumeration FormFont
#Font_Window_1_0
EndEnumeration
LoadFont(#Font_Window_1_0,"Bodoni MT Condensed", 10)
Declare P_B1(EventType)
Declare P_B2(EventType)
Procedure OpenWindow_1(x = 0, y = 0, width = 150, height = 170)
Window_1 = OpenWindow(#PB_Any, x, y, width, height, "", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
btn_B1 = ButtonGadget(#PB_Any, 20, 10, 110, 40, "ON")
SetGadgetFont(btn_B1, FontID(#Font_Window_1_0))
btn_B2 = ButtonGadget(#PB_Any, 20, 60, 110, 40, "ON")
EndProcedure
Procedure Window_1_Events(event)
Select event
Case #PB_Event_CloseWindow
ProcedureReturn #False
Case #PB_Event_Menu
Select EventMenu()
EndSelect
Case #PB_Event_Gadget
Select EventGadget()
Case btn_B1
P_B1(EventType())
Case btn_B2
P_B2(EventType())
EndSelect
EndSelect
ProcedureReturn #True
EndProcedure
Code : Tout sélectionner
Declare SetButtonColor(hGadget, coul_ecriture, coul_fond)
XIncludeFile("frm_Bouton.pbf") ; Inclusion IHM.
OpenWindow_1() ; Démarrage de l'interface.
coul_fond = RGB(110, 110, 110) ; Couleur du fond.
coul_ecriture=RGB(255,255,255) ; Couleur du texte.
;--------------------------------------:
; Changement couleur bouton btn_B1 :
;--------------------------------------:
SetButtonColor(btn_B1, coul_ecriture, coul_fond) ; Appel fonction.
SetGadgetText(btn_B1, "ON") ; Récriture du texte (sinon, pas de texte)µ
;--------------------------------------:
; Changement couleur bouton btn_B2 :
;--------------------------------------:
SetButtonColor(btn_B2, coul_ecriture, coul_fond)
SetGadgetText(btn_B2, "ON")
;------------------------------------------------------------------------------------:
; --- Boucle principale --- :
;------------------------------------------------------------------------------------:
Repeat
event = WaitWindowEvent()
Until Window_1_Events(event) = #False
End
;------------------------------------------------------------------------------------:
; --- SetButtonColor --- :
;------------------------------------------------------------------------------------:
Procedure SetButtonColor(Id, coul_ecriture, coul_fond)
; by Zorro
; en clair on transforme un bouton normal en bouton image ...
Txt.s = GetGadgetText(Id) ; Récupération du texte du bouton.
Larg = GadgetWidth(Id) ; Récupération de la largeur du bouton.
Haut = GadgetHeight(Id) ; Récupération de la hauteur du bouton.
x = GadgetX(Id) ; Récupération de la position en X du bouton.
y = GadgetY(Id) ; Récupération de la position en Y du bouton.
FreeGadget(Id) ; Effacement du bouton.
;-----------------------------------------------------------------:
; Si une police a été définie pour le gadget : on la supprime :
;-----------------------------------------------------------------:
If IsFont(Id)
FreeFont(Id)
EndIf
;------------------------------------------------------------:
; Si une image est associée au gadget : on l'a supprime :
;------------------------------------------------------------:
If IsImage(Id)
FreeImage(Id)
EndIf
;--------------------------------------:
; Chargement de la nouvelle police :
;--------------------------------------:
;LoadFont(Id, "Century Gothic", 14, #PB_Font_Bold)
;--------------------------------------------------:
; Création du graphisme pour le nouveau bouton :
;--------------------------------------------------:
If CreateImage(Id, larg, haut)
StartDrawing(ImageOutput(Id))
DrawingMode(#PB_2DDrawing_Transparent)
Box(0, 0,larg, haut, coul_fond) ; Création de la Box.
DrawingFont(FontID(Id)) ; Affectation de la nouvelle police.
FrontColor(coul_ecriture) ; Affectation de la couleur de la police.
DrawText((Larg-TextWidth(txt))/2,(Haut-TextHeight(txt))/2,Txt.s) ; Ecriture du texte.
StopDrawing()
EndIf
;---------------------------:
; Re-création du bouton :
;---------------------------:
ButtonImageGadget(Id,x,y,larg,Haut,ImageID( Id), #PB_Button_Toggle )
ProcedureReturn result
EndProcedure
;------------------------------------------------------------------------------------:
; --- Gestion du bouton btn_B1 --- :
;------------------------------------------------------------------------------------:
Procedure P_B1(EventType)
If GetGadgetText(btn_B1) = "OFF"
SetGadgetText(btn_B1, "ON") ; Ecriture du texte une première fois ...
SetButtonColor(btn_B1, 0, RGB(110,110,100))
SetGadgetText(btn_B1, "ON") ; ... et une seconde fois, sinon, pas de texte.
Else
SetGadgetText(btn_B1, "OFF")
SetButtonColor(btn_B1, RGB(2255,255,255), 3091137)
SetGadgetText(btn_B1, "OFF")
EndIf
EndProcedure ; -----------------------------------------< Fin de la procédure "P_B1" >
;------------------------------------------------------------------------------------:
; --- Gestion du bouton btn_B2 --- :
;------------------------------------------------------------------------------------:
Procedure P_B2(EventType)
If GetGadgetText(btn_B2) = "OFF"
SetGadgetText(btn_B2, "ON")
SetButtonColor(btn_B2, 0, RGB(110,110,100))
SetGadgetText(btn_B2, "ON")
Else
SetGadgetText(btn_B2, "OFF")
SetButtonColor(btn_B2, RGB(2255,255,255), 3091137)
SetGadgetText(btn_B2, "OFF")
EndIf
EndProcedure ; -----------------------------------------< Fin de la procédure "P_B2" >