[Résolu] Comment placer la souris sur un canvas
[Résolu] Comment placer la souris sur un canvas
Je souhaiterais quand je clique sur un bouton, qu'une fenêtre canvas s'ouvre et que le curseur de la souris soit précipité dans ma fenêtre.
Après de multiples recherches, je n'ai rien trouvé sur le sujet et c'est pas faute d'avoir sondé partout !
Je vous remercierai jamais assez de me tirer de ce tracas.
Après de multiples recherches, je n'ai rien trouvé sur le sujet et c'est pas faute d'avoir sondé partout !
Je vous remercierai jamais assez de me tirer de ce tracas.
Dernière modification par Micoute le ven. 26/oct./2012 13:20, modifié 1 fois.
Microsoft Windows 10 Famille 64 bits : Carte mère : ASRock 970 Extreme3 R2.0 : Carte Graphique NVIDIA GeForce RTX 3080 : Processeur AMD FX 6300 6 cœurs 12 threads 3,50 GHz PB 6.20 LTS (x64)
Un homme doit être poli, mais il doit aussi être libre !
Un homme doit être poli, mais il doit aussi être libre !
Re: Comment placer la souris sur un canvas
Salut Micoute, tout d'abord il ni a pas de fenêtre canvas. Il y a des fenêtres, et des gadgets dans ces fenêtres.
Poste du code s'il te plait pour voir déjà l'ouverture de tes 2 fenêtres.
Poste du code s'il te plait pour voir déjà l'ouverture de tes 2 fenêtres.
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Re: Comment placer la souris sur un canvas
La bibliothèque de fonctions
le programme en question
je ne sais pas envoyer des images
Code : Tout sélectionner
; fonctionne avec EnableExplicit
; Exemple d'utilisation avec fonds chargés (normal et survol):
; DefinirPoliceBouton("Verdana", 16, 0, RGB(255,255,255), -120)
; InitBouton(CatchImage(#PB_Any, ?Fond), CatchImage(#PB_Any, ?FondSurvol))
; Define Bouton1.i = CreerBouton(#PB_Any, "moniteur", 10, 10, LoadImage(#PB_Any, "moniteur.png"))
;
; Exemple d'utilisation avec un fond auto-établi
; DefinirPoliceBouton("Verdana", 16, 0, RGB(255,255,255), -120)
; Init_BoutonPerso(Forme, RotationDegrade, 120, 120, RGBA(255,255,255,255), RGBA(214,226,236,255), RGBA(120,158,191,255), RGBA(255,255,255,255), RGBA(90,167,255,255),15, 2)
; Define Bouton1.i = CreerBouton(#PB_Any, IDFenetre, "moniteur", 10, 10, LoadImage(#PB_Any, "moniteur.png"))
;
; Faire un appel à VerifierSurvolBouton(WinID) dans votre boucle d'événements pour activer l'effet de survol
;
; ASTUCE: Il est possible d'appeler InitBouton(), Init_BoutonPerso() et DefinirPoliceBouton() plusieurs fois
; pour fabriquer des boutons différents sur la même fenêtre/écran.
UsePNGImageDecoder()
#Bouton_LargeurOmbre = 5 ; largeur de l'ombre autour du bouton (par défaut 5)
#Bouton_OpaciteOmbre = 30 ; 'foncé' qui entoure l'ombre: 10 = sombre, 100 = très lumineux (par défaut 30 = moyen)
#Bouton_DiminutionSurvol = 20 ; effet survolé d'assombrissement du dégradé du fond (> 0 = éclaircir, <0 = assombrir) (par défaut 20)
#Bouton_FacteurEchelle = 2 ; rendre plus lisse, surtout ne pas modifier (par défaut 2)
#Vrai = 1
#Faux = 0
Structure ListeBouton
Forme.i ; forme du bouton 1 = rectangle, 2 = arrondie, 3 = ronde, 4 Ellipse
RotationDegrade.i ; dégradé du bouton 1 = linéaire, 2 = circulaire, 3 elliptique, 4 boîte, 5 conique
Titre.s ; Titre du gadget
Actif.b ; #Vrai ou #Faux
IDGadget.i ; ID image-gadget
BoutonImageID_dessine.i ; id de l'image pour dessiner dessus
BoutonImageID_normal.i ; id du fond normal de l'image
BoutonImageID_survol.i ; id du fond survolé de l'image
x.i ; position X du gadget
y.i ; position Y du gadget
Largeur.i ; Largeur du gadget
Hauteur.i ; Hauteur du gadget
IconeImageID.i ; ID de l'icône
IconeLargeur.i ; Largeur de l'icône
IconeHauteur.i ; Hauteur de l'icône
IconeX.i ; Position X de l'icône dans le Gadget
IconeY.i ; Position Y de l'icône dans le Gadget
TexteX.i ; Position X du texte dans le Gadget
TexteY.i ; Position Y du texte dans le Gadget
NomPolice.s
TaillePolice.i
StylePolice.i
CouleurPolice.i
DiminutionOmbre.i
IDFenetre.i ; ID de la fenêtre où ce bouton est dessiné
EndStructure
Structure Bouton
Forme.i ; forme du bouton 1 = rectangle, 2 = arrondie, 3 = ronde, 4 Ellipse
RotationDegrade.i ; dégradé du bouton 1 = linéaire, 2 = circulaire, 3 elliptique, 4 boîte, 5 conique
BoutonImageID_normal.i
BoutonImageID_survol.i
NomPolice.s
TaillePolice.i
StylePolice.i
CouleurPolice.i
DiminutionOmbre.i
EpaisseurLigne.i
List ListeBouton.ListeBouton()
EndStructure
Global Bouton.Bouton
Global .i Forme = 0, RotationDegrade = 0
Procedure.b CurseurMain(GadgetID.i)
Static *curseur
If *curseur = 0
*curseur = LoadCursor_(0, #IDC_HAND)
EndIf
SetCursor_(*curseur)
EndProcedure
; Vérifie, si la position actuelle de la souris est sur le gadget donné.
; Renvoie #Vrai en cas de succès, sinon #Faux.
; Utilisez ceci dans votre boucle GUI (par exemple pour changer le curseur en
; conjonction avec CurseurMain()).
Procedure.b SourisSurBouton(IDFenetre.i, IDGadget.i)
Protected Sx.i = WindowMouseX(IDFenetre.i)
Protected Sy.i = WindowMouseY(IDFenetre.i)
Protected GX.i = GadgetX(IDGadget.i)
Protected GY.i = GadgetY(IDGadget.i)
Protected GL.i = GadgetWidth(IDGadget.i)
Protected GH.i = GadgetHeight(IDGadget.i)
If Sx.i > GX.i And Sx.i < (GX.i + GL.i) And Sy.i > GY.i And Sy.i < (GY.i + GH.i)
ProcedureReturn #Vrai
EndIf
ProcedureReturn #Faux
EndProcedure
; Aide à la fonction diminuer une couleur.
; Exemple:
; NouvelleCouleur.i = DiminuerCouleur(CouleurOrigine.i, -50); réduit par pas de 50
Procedure.i DiminuerCouleur(CouleurOrigine.i, Diminution.i)
Protected r.i = Red(CouleurOrigine.i)
Protected V.i = Green(CouleurOrigine.i)
Protected b.i = Blue(CouleurOrigine.i)
r.i = r.i + Diminution.i: If r.i < 0: r.i = 0: EndIf: If r.i > 255: r.i = 255: EndIf
V.i = V.i + Diminution.i: If V.i < 0: V.i = 0: EndIf: If V.i > 255: V.i = 255: EndIf
b.i = b.i + Diminution.i: If b.i < 0: b.i = 0: EndIf: If b.i > 255: b.i = 255: EndIf
ProcedureReturn RGB(r.i, V.i, b.i)
EndProcedure
; Définir la police pour le style des Boutons.
; Doit être appelé avant de créer le premier bouton.
; StylePolice.i obéit aux constantes purebasic LoadFont() comme #PB_Font_Bold.
ProcedureDLL.b DefinirPoliceBouton(NomPolice.s, TaillePolice.i, StylePolice.i = 0, CouleurPolice.i = 0, DiminutionOmbre.i = 0)
With Bouton
\NomPolice = NomPolice.s
\TaillePolice = TaillePolice.i
\StylePolice = StylePolice.i
\CouleurPolice = CouleurPolice.i
\DiminutionOmbre = DiminutionOmbre.i
EndWith
ProcedureReturn #Vrai
EndProcedure
; Initialiser les préférences Bouton principales avec ses propres images dessinées
ProcedureDLL.b Init_BoutonPerso(Forme.i, RotationDegrade.i, Largeur.i, Hauteur.i, CouleurFond.i, Couleur1.i, Couleur2.i, CouleurContour.i, CouleurContourSelectionne.i, RayonBordure.f = 15, EpaisseurLigne.i = 2)
;Forme
;0 = Rectangle
;1 = Arrondie
;2 = Ronde
;3 = Elliptique
;4 = Pillule
;RotationDegrade
;0 = diagonale tombante
;1 = diagonale montante
;2 = horizontale
;3 = verticale
Protected x.i, RayonBordureUtilise.f
Largeur.i = Largeur.i * #Bouton_FacteurEchelle
Hauteur.i = Hauteur.i * #Bouton_FacteurEchelle
RayonBordureUtilise.f = RayonBordure.f * #Bouton_FacteurEchelle
EpaisseurLigne.i = EpaisseurLigne.i * #Bouton_FacteurEchelle
Protected ImageFond.i = CreateImage(#PB_Any, Largeur.i, Hauteur.i, #PB_Image_Transparent | 32)
Protected LargeurOmbre.f = #Bouton_LargeurOmbre
Protected CentreX.f = Largeur.i / 2
Protected CentreY.f = Hauteur.i / 2
Protected RayonX.f = Largeur.i / 2 + #Bouton_FacteurEchelle
Protected RayonY.f = Hauteur.i / 2 + #Bouton_FacteurEchelle
StartDrawing(ImageOutput(ImageFond.i))
DrawingMode(#PB_2DDrawing_AlphaBlend)
; faire le fond avec la couleur de fond
Box(0, 0, Largeur.i, Hauteur.i, RGBA(Red(CouleurFond.i), Green(CouleurFond.i), Blue(CouleurFond.i), 255))
CouleurContour.i = RGBA(Red(CouleurContour.i), Green(CouleurContour.i), Blue(CouleurContour.i), 255)
CouleurContourSelectionne.i = RGBA(Red(CouleurContourSelectionne.i), Green(CouleurContourSelectionne.i), Blue(CouleurContourSelectionne.i), 255)
; faire les ombres
DrawingMode(#PB_2DDrawing_AlphaBlend)
Protected PasOmbre.f = #Bouton_OpaciteOmbre / LargeurOmbre.f
For x.i = 1 To LargeurOmbre.f
RayonX.f = RayonX.f - #Bouton_FacteurEchelle
RayonY.f = RayonY.f - #Bouton_FacteurEchelle
RayonBordureUtilise.f = RayonBordureUtilise.f - #Bouton_FacteurEchelle / 2
If RayonBordureUtilise.f < 0: RayonBordureUtilise.f = 0: EndIf
Bouton\Forme = Forme
If Bouton\Forme = 0 ; rectangle
Box(CentreX.f - RayonX.f, CentreY.f - RayonY.f, RayonX.f * 2, RayonY.f * 2, RGBA(0,0,0, x.i * PasOmbre.f))
ElseIf Bouton\Forme = 1 ; arrondi
RoundBox(CentreX.f - RayonX.f, CentreY.f - RayonY.f, RayonX.f * 2, RayonY.f * 2, RayonBordureUtilise.f, RayonBordureUtilise.f, RGBA(0,0,0, x.i * PasOmbre.f))
ElseIf Bouton\Forme = 2 ; rond
Circle(CentreX, CentreY, RayonX, RGBA(0, 0, 0, x.i * PasOmbre.f))
ElseIf Bouton\Forme = 3 ; ellipse
Ellipse(CentreX, CentreY, RayonX, RayonY, RGBA(0, 0, 0, x.i * PasOmbre.f))
ElseIf Bouton\Forme = 4 ; Pillule
Circle(CentreY, CentreY, RayonY, RGBA(0, 0, 0, x.i * PasOmbre.f))
Box(Largeur/16, CentreY.f - RayonY.f, Largeur-Largeur/8, Hauteur, RGBA(0,0,0, x.i * PasOmbre.f))
Circle(Largeur-Largeur/16, CentreY, RayonY, RGBA(0, 0, 0, x.i * PasOmbre.f))
EndIf
Next
; faire la bordure avec CouleurContour
DrawingMode(#PB_2DDrawing_AllChannels)
If Bouton\Forme = 0
Box(CentreX.f - RayonX.f, CentreY.f - RayonY.f, RayonX.f * 2, RayonY.f * 2, CouleurContour.i)
ElseIf Bouton\Forme = 1
RoundBox(CentreX.f - RayonX.f, CentreY.f - RayonY.f, RayonX.f * 2, RayonY.f * 2, RayonBordureUtilise.f, RayonBordureUtilise.f, CouleurContour)
ElseIf Bouton\Forme = 2
Circle(CentreX, CentreY, RayonX, CouleurContour)
ElseIf Bouton\Forme = 3
Ellipse(CentreX, CentreY, RayonX, RayonY, CouleurContour)
ElseIf Bouton\Forme = 4
Circle(CentreY, CentreY, RayonY, CouleurContour)
Box(Largeur/16, CentreY-RayonY, Largeur-Largeur/8, Hauteur, CouleurContour)
Circle(Largeur-Largeur/16, CentreY, RayonY, CouleurContour)
EndIf
RayonX.f = RayonX.f - EpaisseurLigne.i
RayonY.f = RayonY.f - EpaisseurLigne.i
RayonBordureUtilise.f = RayonBordureUtilise.f - EpaisseurLigne.i
If RayonBordureUtilise.f < 0: RayonBordureUtilise.f = 0: EndIf
; fond dégradé normal
DrawingMode(#PB_2DDrawing_Gradient)
BackColor(Couleur1.i)
FrontColor(Couleur2.i)
Protected Rotate.f = RayonY.f / 2
If RotationDegrade = 0 ; en biais \
;G = 100, H = 0, D = 0, B = 100
LinearGradient(CentreX.f, CentreY.f-Rotate, CentreX.f - Rotate.f/2, CentreY.f + RayonY.f)
ElseIf RotationDegrade = 1 ; en biais /
; G = 0, H = 0,D = 100, B = 100
LinearGradient(CentreX.f+Rotate/2, CentreY.f,CentreX, CentreY.f - RayonY.f)
ElseIf RotationDegrade = 2 ; horizontal
;G = 100, H = 0, D = 100, B = 100
LinearGradient(Largeur/2, CentreY.f - Rotate, Largeur/2, CentreY.f + Rotate.f)
ElseIf RotationDegrade = 3 ; vertical
;G = 0, H = 100, D = 100, B = 100
;LinearGradient(CentreX.f-Rotate/2, Hauteur/2, CentreX.f+Rotate/2, Hauteur/2)
LinearGradient(0, Hauteur, Largeur, Hauteur)
EndIf
If Bouton\Forme = 0
Box(CentreX.f - RayonX.f, CentreY.f - RayonY.f, RayonX.f * 2, RayonY.f * 2)
ElseIf Bouton\Forme = 1
RoundBox(CentreX.f - RayonX.f, CentreY.f - RayonY.f, RayonX.f * 2, RayonY.f * 2, RayonBordureUtilise.f, RayonBordureUtilise.f)
ElseIf Bouton\Forme = 2
Circle(CentreX.f, CentreY.f, RayonX.f)
ElseIf Bouton\Forme = 3
Ellipse(CentreX.f, CentreY.f, RayonX.f, RayonY.f)
ElseIf Bouton\Forme = 4
Circle(CentreY, CentreY, RayonY)
Box(Largeur/16, CentreY-RayonY, Largeur-Largeur/8, Hauteur)
Circle(Largeur-Largeur/16, CentreY, RayonY)
EndIf
StopDrawing()
ResizeImage(ImageFond.i, Largeur.i / #Bouton_FacteurEchelle, Hauteur.i / #Bouton_FacteurEchelle, #PB_Image_Smooth)
Protected BoutonImageNormalID.i = ImageFond.i
; SURVOL IMAGE
Protected ImageFondsurvol.i = CreateImage(#PB_Any, Largeur.i, Hauteur.i, #PB_Image_Transparent | 32)
RayonBordureUtilise.f = RayonBordure.f * #Bouton_FacteurEchelle
RayonX.f = Largeur.i / 2 + #Bouton_FacteurEchelle
RayonY.f = Hauteur.i / 2 + #Bouton_FacteurEchelle
StartDrawing(ImageOutput(ImageFondsurvol.i))
DrawingMode(#PB_2DDrawing_AlphaBlend)
; faire le fond avec la couleur de fond
Box(0, 0, Largeur.i, Hauteur.i, RGBA(Red(CouleurFond.i), Green(CouleurFond.i), Blue(CouleurFond.i), 255))
; Diminution des couleur pour l'effet survol
Couleur1.i = DiminuerCouleur(Couleur1.i, #Bouton_DiminutionSurvol)
Couleur2.i = DiminuerCouleur(Couleur2.i, #Bouton_DiminutionSurvol)
; faire les ombres
DrawingMode(#PB_2DDrawing_AlphaBlend)
PasOmbre.f = #Bouton_OpaciteOmbre / LargeurOmbre.f
For x.i = 1 To LargeurOmbre.f
RayonX.f = RayonX.f - #Bouton_FacteurEchelle
RayonY.f = RayonY.f - #Bouton_FacteurEchelle
RayonBordureUtilise.f = RayonBordureUtilise.f - #Bouton_FacteurEchelle / 2
If RayonBordureUtilise.f < 0: RayonBordureUtilise.f = 0: EndIf
If Bouton\Forme = 0
Box(CentreX.f - RayonX.f, CentreY.f - RayonY.f, RayonX.f * 2, RayonY.f * 2, RGBA(0,0,0, x.i * PasOmbre.f))
ElseIf Bouton\Forme = 1
RoundBox(CentreX.f - RayonX.f, CentreY.f - RayonY.f, RayonX.f * 2, RayonY.f * 2, RayonBordureUtilise.f, RayonBordureUtilise.f, RGBA(0,0,0, x.i * PasOmbre.f))
ElseIf Bouton\Forme = 2
Circle(CentreX.f, CentreY.f, RayonX.f, RGBA(0,0,0, x.i * PasOmbre.f))
ElseIf Bouton\Forme = 3
Ellipse(CentreX.f, CentreY.f, RayonX.f, RayonY.f, RGBA(0,0,0, x.i * PasOmbre.f))
ElseIf Bouton\Forme = 4
Circle(CentreY, CentreY, RayonY, RGBA(0,0,0, x.i * PasOmbre.f))
Box(Largeur/16, CentreY-RayonY, Largeur-Largeur/8, Hauteur, RGBA(0,0,0, x.i * PasOmbre.f))
Circle(Largeur-Largeur/16, CentreY, RayonY, RGBA(0,0,0, x.i * PasOmbre.f))
EndIf
Next
; faire la bordure avec CouleurContour
DrawingMode(#PB_2DDrawing_AllChannels)
If Bouton\Forme = 0
Box(CentreX.f - RayonX.f, CentreY.f - RayonY.f, RayonX.f * 2, RayonY.f * 2, CouleurContourSelectionne.i)
ElseIf Bouton\Forme = 1
RoundBox(CentreX.f - RayonX.f, CentreY.f - RayonY.f, RayonX.f * 2, RayonY.f * 2, RayonBordureUtilise.f, RayonBordureUtilise.f, CouleurContourSelectionne)
ElseIf Bouton\Forme = 2
Circle(CentreX.f, CentreY.f, RayonX.f, CouleurContourSelectionne)
ElseIf Bouton\Forme = 3
Ellipse(CentreX.f, CentreY.f, RayonX.f, RayonY.f, CouleurContourSelectionne)
ElseIf Bouton\Forme = 4
Circle(CentreY, CentreY, RayonY, CouleurContourSelectionne)
Box(Largeur/16, CentreY-RayonY, Largeur-Largeur/8, Hauteur, CouleurContourSelectionne)
Circle(Largeur-Largeur/16, CentreY, RayonY, CouleurContourSelectionne)
EndIf
RayonX.f = RayonX.f - EpaisseurLigne.i
RayonY.f = RayonY.f - EpaisseurLigne.i
RayonBordureUtilise.f = RayonBordureUtilise.f - EpaisseurLigne.i
If RayonBordureUtilise.f < 0: RayonBordureUtilise.f = 0: EndIf
; fond dégradé survolé
DrawingMode(#PB_2DDrawing_Gradient)
BackColor(Couleur1.i)
FrontColor(Couleur2.i)
Rotate.f = RayonY.f / 2
If RotationDegrade = 0 ; en biais \
LinearGradient(CentreX.f, CentreY.f-Rotate, CentreX.f - Rotate.f/2, CentreY.f + RayonY.f)
ElseIf RotationDegrade = 1 ; en biais /
LinearGradient(CentreX.f+Rotate/2, CentreY.f, Largeur/2, CentreY.f - RayonY.f)
ElseIf RotationDegrade = 2 ; horizontal
LinearGradient(Largeur/2, CentreY.f - Rotate, Largeur/2, CentreY.f + Rotate.f)
ElseIf RotationDegrade = 3 ; vertical
;LinearGradient(CentreX.f-Rotate/2, Hauteur/2, CentreX.f+Rotate/2, Hauteur/2)
LinearGradient(0, Hauteur, Largeur, Hauteur)
EndIf
If Bouton\Forme = 0
Box(CentreX.f - RayonX.f, CentreY.f - RayonY.f, RayonX.f * 2, RayonY.f * 2)
ElseIf Bouton\Forme = 1
RoundBox(CentreX.f - RayonX.f, CentreY.f - RayonY.f, RayonX.f * 2, RayonY.f * 2, RayonBordureUtilise.f, RayonBordureUtilise.f)
ElseIf Bouton\Forme = 2
Circle(CentreX.f, CentreY.f, RayonX.f)
ElseIf Bouton\Forme = 3
Ellipse(CentreX.f, CentreY.f, RayonX.f, RayonY.f)
ElseIf Bouton\Forme = 4
Circle(CentreY, CentreY, RayonY)
Box(Largeur/16, CentreY-RayonY, Largeur-Largeur/8, Hauteur)
Circle(Largeur-Largeur/16, CentreY, RayonY)
EndIf
StopDrawing()
ResizeImage(ImageFondsurvol.i, Largeur.i / #Bouton_FacteurEchelle, Hauteur.i / #Bouton_FacteurEchelle, #PB_Image_Smooth)
Protected BoutonImagesurvolID.i = ImageFondsurvol.i
With Bouton
\BoutonImageID_normal = BoutonImageNormalID.i
\BoutonImageID_survol = BoutonImagesurvolID.i
\EpaisseurLigne = EpaisseurLigne.i ; pour une utilisation ultérieure tout en dessinant
EndWith
EndProcedure
; Initialiser les préférences principales Bouton preferences:
; BoutonImageNormalID.i = ImageID d'une image à utiliser comme fond du bouton
; BoutonImagesurvolID.i = ImageID d'une image à utiliser comme fond du bouton en cas survol de la souris (même taille!)
ProcedureDLL.b InitBouton(BoutonImageNormalID.i, BoutonImagesurvolID.i)
With Bouton
\BoutonImageID_normal = BoutonImageNormalID.i
\BoutonImageID_survol = BoutonImagesurvolID.i
EndWith
EndProcedure
; Procédure filtre pour icônes actives dans la fonction RedessinerBouton
Procedure RappelFiltre(x, y, CouleurSource, CouleurDestination)
Protected ValeurAlpha = Alpha(CouleurSource)
Protected ValeurAlphaNeg = 255-Alpha(CouleurSource)
Protected NouveauRouge = (Green(CouleurSource) * 0.7 * ValeurAlpha + Red(CouleurDestination) * ValeurAlphaNeg) / 255
Protected NouveauBleu = (Green(CouleurSource) * 0.7 * ValeurAlpha + Blue(CouleurDestination) * ValeurAlphaNeg) / 255
Protected NouveauVert = (Green(CouleurSource) * 0.7 * ValeurAlpha + Green(CouleurDestination) * ValeurAlphaNeg) / 255
If NouveauRouge > 255: NouveauRouge = 255: EndIf
If NouveauBleu > 255: NouveauBleu = 255: EndIf
If NouveauVert > 255: NouveauVert = 255: EndIf
Protected NouvelleCouleur = RGBA(NouveauRouge, NouveauVert, NouveauBleu, 255)
ProcedureReturn NouvelleCouleur
EndProcedure
; Redessine un bouton existant
; Etat=0 -> normal
; Etat=1 -> survol / surbrillant
ProcedureDLL.b RedessinerBouton(BoutonID.i, Etat.i)
Protected Trouve.b = #Faux
Protected CouleurTexte.i
Protected SouleveIcone.i
Protected NomPolice.s, TaillePolice.i, CouleurPolice.i, StylePolice.i, CouleurOmbre.i
Protected px.i, py.i, Titre.s
ForEach Bouton\ListeBouton()
If Bouton\ListeBouton()\IDGadget = BoutonID.i
Trouve.b = #Vrai
Break
EndIf
Next
If Trouve.b = #Faux
MessageRequester("Attention", "BoutonID " + Str(BoutonID.i) + " non Trouvé (Redessiner)!", #MB_ICONEXCLAMATION)
ProcedureReturn #Faux
EndIf
If Bouton\ListeBouton()\Titre <> ""
Protected MonIDPolice.i = LoadFont(#PB_Any, Bouton\ListeBouton()\NomPolice, Bouton\ListeBouton()\TaillePolice, Bouton\ListeBouton()\StylePolice) ; charger la police dans la taille désirée
EndIf
; dessiner le fond
StartDrawing(ImageOutput(Bouton\ListeBouton()\BoutonImageID_dessine))
Box(0, 0, Bouton\ListeBouton()\Largeur, Bouton\ListeBouton()\Hauteur, RGBA(0,0,0,0)) ; initialiser comme fond transparent
If Bouton\ListeBouton()\Titre <> ""
DrawingFont(FontID(MonIDPolice.i))
EndIf
DrawingMode(#PB_2DDrawing_AlphaBlend)
If Bouton\ListeBouton()\Actif = #Faux
; -- ACTIVER --
If Etat.i = 0
DrawImage(ImageID(Bouton\ListeBouton()\BoutonImageID_normal), 0, 0)
CouleurPolice.i = DiminuerCouleur(Bouton\ListeBouton()\CouleurPolice, -10)
CouleurOmbre.i = DiminuerCouleur(Bouton\ListeBouton()\CouleurPolice, Bouton\ListeBouton()\DiminutionOmbre - 10)
SouleveIcone.i = 0
EndIf
If Etat.i = 1
DrawImage(ImageID(Bouton\ListeBouton()\BoutonImageID_survol), 0, 0)
CouleurPolice.i = Bouton\ListeBouton()\CouleurPolice
CouleurOmbre.i = DiminuerCouleur(Bouton\ListeBouton()\CouleurPolice, Bouton\ListeBouton()\DiminutionOmbre)
SouleveIcone.i = -1
EndIf
; dessiner icône
If Bouton\ListeBouton()\IconeImageID <> 0
DrawImage(ImageID(Bouton\ListeBouton()\IconeImageID), Bouton\ListeBouton()\IconeX, Bouton\ListeBouton()\IconeY + SouleveIcone.i)
EndIf
If Bouton\ListeBouton()\Titre <> ""
; dessiner titre
DrawingMode(#PB_2DDrawing_Transparent)
Titre.s = Bouton\ListeBouton()\Titre
If CouleurOmbre.i <> CouleurPolice.i
DrawText(Bouton\ListeBouton()\TexteX + 1, Bouton\ListeBouton()\TexteY + 1 + SouleveIcone.i, Titre.s, CouleurOmbre.i); ombre
EndIf
DrawText(Bouton\ListeBouton()\TexteX, Bouton\ListeBouton()\TexteY + SouleveIcone.i, Titre.s, CouleurPolice.i) ; réel
EndIf
Else
; -- Actif --
DrawImage(ImageID(Bouton\ListeBouton()\BoutonImageID_normal), 0, 0)
; dessiner icône
If Bouton\ListeBouton()\IconeImageID <> 0
DrawingMode(#PB_2DDrawing_CustomFilter)
CustomFilterCallback(@RappelFiltre())
DrawImage(ImageID(Bouton\ListeBouton()\IconeImageID), Bouton\ListeBouton()\IconeX, Bouton\ListeBouton()\IconeY)
EndIf
If Bouton\ListeBouton()\Titre <> ""
; dessiner titre
CouleurPolice.i = DiminuerCouleur(Bouton\ListeBouton()\CouleurPolice, 120)
CouleurOmbre.i = DiminuerCouleur(Bouton\ListeBouton()\CouleurPolice, 180)
SouleveIcone.i = 0
DrawingMode(#PB_2DDrawing_Transparent)
Titre.s = Bouton\ListeBouton()\Titre
If CouleurOmbre.i <> CouleurPolice.i
DrawText(Bouton\ListeBouton()\TexteX+1, Bouton\ListeBouton()\TexteY + 1, Titre.s, CouleurOmbre.i); ombre
EndIf
DrawText(Bouton\ListeBouton()\TexteX, Bouton\ListeBouton()\TexteY, Titre.s, CouleurPolice.i) ; réel
EndIf
EndIf
StopDrawing()
If IsFont(MonIDPolice.i)
FreeFont(MonIDPolice.i)
EndIf
; mise en image finale dans une ImageGadget
SetGadgetState(BoutonID.i, ImageID(Bouton\ListeBouton()\BoutonImageID_dessine))
ProcedureReturn #Vrai
EndProcedure
; Créer un nouveau style de bouton en mode vertical (icône en haut du texte).
; La taille dépend de l'image de fond utilisée.
; Forme = 0 --> Rectangle, Forme = 1 --> Arrondi, 2 ---> Ronde, 3 ---> Elliptique
ProcedureDLL.i CreerBouton(Gadget.i, IDFenetre.i, Titre.s, PosX.i, PosY.i, IconeImageID.i = 0)
Protected NomPolice.s, TaillePolice.i, CouleurPolice.i, StylePolice.i, CouleurOmbre.i
With Bouton
If \NomPolice = "" : NomPolice.s = "Verdana": Else : NomPolice.s = \NomPolice: EndIf ; utiliser par défaut
If \TaillePolice = 0 : TaillePolice.i = 10 : Else : TaillePolice.i = \TaillePolice: EndIf ; utiliser par défaut
StylePolice.i = \StylePolice
CouleurPolice.i = DiminuerCouleur(\CouleurPolice, -10)
CouleurOmbre.i = DiminuerCouleur(\CouleurPolice, \DiminutionOmbre - 10)
; charger images, si nécessaires
If \BoutonImageID_normal = 0
MessageRequester("INFO","Vous devez appeler InitBouton() d'abord!",#MB_ICONINFORMATION)
ProcedureReturn
EndIf
If \BoutonImageID_survol = 0
MessageRequester("INFO","Vous devez appeler InitBouton() d'abord!",#MB_ICONINFORMATION)
ProcedureReturn
EndIf
; préparer le bouton et charger les images
AddElement(\ListeBouton())
\ListeBouton()\Forme = \Forme
\ListeBouton()\RotationDegrade = \RotationDegrade
\ListeBouton()\BoutonImageID_normal = \BoutonImageID_normal
\ListeBouton()\BoutonImageID_survol = \BoutonImageID_survol
\ListeBouton()\IconeImageID = IconeImageID.i
\ListeBouton()\X = PosX.i
\ListeBouton()\Y = PosY.i
\ListeBouton()\Largeur = ImageWidth(\BoutonImageID_normal)
\ListeBouton()\Hauteur = ImageHeight(\BoutonImageID_normal)
\ListeBouton()\Titre = Titre.s
\ListeBouton()\BoutonImageID_dessine = CreateImage(#PB_Any, \ListeBouton()\Largeur, \ListeBouton()\Hauteur, 32)
\ListeBouton()\NomPolice = \NomPolice
\ListeBouton()\TaillePolice = \TaillePolice
\ListeBouton()\StylePolice = \StylePolice
\ListeBouton()\CouleurPolice = \CouleurPolice
\ListeBouton()\DiminutionOmbre = \DiminutionOmbre
\ListeBouton()\IDFenetre = IDFenetre.i
If IconeImageID.i <> 0
\ListeBouton()\IconeLargeur = ImageWidth(\ListeBouton()\IconeImageID)
\ListeBouton()\IconeHauteur = ImageHeight(\ListeBouton()\IconeImageID)
Else
\ListeBouton()\IconeLargeur = 0
\ListeBouton()\IconeHauteur = 0
EndIf
Protected PX.i
Protected PY.i
If \ListeBouton()\Titre <> ""
; avec titre (icône relevée)
PX.i = \ListeBouton()\Largeur / 2 - \ListeBouton()\IconeLargeur / 2
;PY.i = (\ListeBouton()\Hauteur * 0.8) / 2 - \ListeBouton()\IconeHauteur / 2
PY.i = (\ListeBouton()\Hauteur) / 2 - \ListeBouton()\IconeHauteur / 2
Else
; sans titre (icône centrée)
PX.i = \ListeBouton()\Largeur / 2 - \ListeBouton()\IconeLargeur / 2
PY.i = \ListeBouton()\Hauteur / 2 - \ListeBouton()\IconeHauteur / 2
EndIf
\ListeBouton()\IconeX = PX.i
\ListeBouton()\IconeY = PY.i
; dessiner titre
; commencer à dessiner seulement pour recueillir les valeurs correctes pour Largeur/Hauteur du texte
; générer les valeurs des images
Protected MonIDPolice.i = LoadFont(#PB_Any, NomPolice.s, TaillePolice.i, StylePolice.i) ; charger la police dans la taille désirée
StartDrawing(ImageOutput(\ListeBouton()\BoutonImageID_dessine))
DrawingFont(FontID(MonIDPolice.i))
If IconeImageID.i <> 0
; réduction du texte
PX.i = \ListeBouton()\Largeur / 2 - TextWidth(Titre.s) / 2
PY.i = \ListeBouton()\Hauteur * 0.75 - TextHeight(Titre.s) / 2
Else
; texte centré
PX.i = \ListeBouton()\Largeur / 2 - TextWidth(Titre.s) / 2
PY.i = \ListeBouton()\Hauteur / 2 - TextHeight(Titre.s) / 2
EndIf
\ListeBouton()\TexteX = PX.i
\ListeBouton()\TexteY = PY.i
StopDrawing()
FreeFont(MonIDPolice.i)
; créer le gadget
Protected NouveauIDGadget.i = ImageGadget(Gadget.i, PosX.i, PosY.i, \ListeBouton()\Largeur, \ListeBouton()\Hauteur, ImageID(\ListeBouton()\BoutonImageID_dessine))
If Gadget.i = #PB_Any
\ListeBouton()\IDGadget = NouveauIDGadget.i
Else
\ListeBouton()\IDGadget = Gadget.i
EndIf
RedessinerBouton(\ListeBouton()\IDGadget, 0)
EndWith
ProcedureReturn NouveauIDGadget.i
EndProcedure
; Créer un nouveau style de bouton en mode horizontal (icône surélevé du texte).
; La taille dépend de l'image de fond utilisée.
; Forme = 0 --> Rectangle, Forme = 1 --> Arrondie, 2--> Ronde, 4 --> Elliptique
ProcedureDLL.i CreerBoutonH(Gadget.i, IDFenetre.i, Titre.s, PosX.i, PosY.i, IconeImageID.i = 0)
Protected NomPolice.s, TaillePolice.i, CouleurPolice.i, StylePolice.i, CouleurOmbre.i
With Bouton
If \NomPolice = "" : NomPolice.s = "Verdana": Else : NomPolice.s = \NomPolice: EndIf ; utiliser par défaut
If \TaillePolice = 0 : TaillePolice.i = 16 : Else : TaillePolice.i = \TaillePolice: EndIf ; utiliser par défaut
StylePolice.i = \StylePolice
CouleurPolice.i = DiminuerCouleur(\CouleurPolice, -10)
CouleurOmbre.i = DiminuerCouleur(\CouleurPolice, \DiminutionOmbre - 10)
; charger les images, si nécessaires
If \BoutonImageID_normal = 0
MessageRequester("INFO","Vous devez appeler InitBouton() d'abord!",#MB_ICONINFORMATION)
ProcedureReturn
EndIf
If \BoutonImageID_survol = 0
MessageRequester("INFO","Vous devez appeler InitBouton() d'abord!",#MB_ICONINFORMATION)
ProcedureReturn
EndIf
; préparer le bouton et charger les images
AddElement(\ListeBouton())
\ListeBouton()\Forme = \Forme
\ListeBouton()\RotationDegrade = \RotationDegrade
\ListeBouton()\BoutonImageID_normal = \BoutonImageID_normal
\ListeBouton()\BoutonImageID_survol = \BoutonImageID_survol
\ListeBouton()\IconeImageID = IconeImageID.i
\ListeBouton()\X = PosX.i
\ListeBouton()\Y = PosY.i
\ListeBouton()\Largeur = ImageWidth(\BoutonImageID_normal)
\ListeBouton()\Hauteur = ImageHeight(\BoutonImageID_normal)
\ListeBouton()\Titre = Titre.s
\ListeBouton()\BoutonImageID_dessine = CreateImage(#PB_Any, \ListeBouton()\Largeur, \ListeBouton()\Hauteur, 32)
\ListeBouton()\NomPolice = \NomPolice
\ListeBouton()\TaillePolice = \TaillePolice
\ListeBouton()\StylePolice = \StylePolice
\ListeBouton()\CouleurPolice = \CouleurPolice
\ListeBouton()\DiminutionOmbre = \DiminutionOmbre
\ListeBouton()\IDFenetre = IDFenetre.i
If IconeImageID.i <> 0
\ListeBouton()\IconeLargeur = ImageWidth(\ListeBouton()\IconeImageID)
\ListeBouton()\IconeHauteur = ImageHeight(\ListeBouton()\IconeImageID)
Else
\ListeBouton()\IconeLargeur = 0
\ListeBouton()\IconeHauteur = 0
EndIf
Protected MonIDPolice.i = LoadFont(#PB_Any, NomPolice.s, TaillePolice.i, StylePolice.i) ; charger la police dans la taille désirée
; commencer à dessiner seulement pour recueillir les valeurs correctes pour Largeur/Hauteur du texte
; générer les valeurs des images
StartDrawing(ImageOutput(\ListeBouton()\BoutonImageID_dessine))
DrawingFont(FontID(MonIDPolice.i))
Protected PX.i
Protected PY.i
Protected EspaceIcone.i = \ListeBouton()\IconeLargeur * 0.1
If \ListeBouton()\Titre <> ""
; avec titre (icône surélevée)
PX.i = \ListeBouton()\Largeur / 2 - (\ListeBouton()\IconeLargeur + TextWidth(Titre.s) + EspaceIcone.i) / 2
PY.i = \ListeBouton()\Hauteur / 2 - \ListeBouton()\IconeHauteur / 2
; prendre soin de la position gauche de l'icône ...
If PX.i < #Bouton_LargeurOmbre + \EpaisseurLigne
PX.i = #Bouton_LargeurOmbre + \EpaisseurLigne
EndIf
Else
; sans titre (Centre Icone)
PX.i = \ListeBouton()\Largeur / 2 - \ListeBouton()\IconeLargeur / 2
PY.i = \ListeBouton()\Hauteur / 2 - \ListeBouton()\IconeHauteur / 2
EndIf
\ListeBouton()\IconeX = PX.i
\ListeBouton()\IconeY = PY.i
; dessiner titre
If IconeImageID.i <> 0
; texte à droite
PX.i = \ListeBouton()\IconeX + \ListeBouton()\IconeLargeur + EspaceIcone.i
PY.i = \ListeBouton()\Hauteur / 2 - TextHeight(Titre.s) / 2
Else
; texte centré
PX.i = \ListeBouton()\Largeur / 2 - TextWidth(Titre.s) / 2
PY.i = \ListeBouton()\Hauteur / 2 - TextHeight(Titre.s) / 2
EndIf
\ListeBouton()\TexteX = PX.i
\ListeBouton()\TexteY = py.i
StopDrawing()
FreeFont(MonIDPolice.i)
; créer le gadget
Protected NouveauIDGadget.i = ImageGadget(Gadget.i, PosX.i, PosY.i, \ListeBouton()\Largeur, \ListeBouton()\Hauteur, ImageID(\ListeBouton()\BoutonImageID_dessine))
If Gadget.i = #PB_Any
\ListeBouton()\IDGadget = NouveauIDGadget.i
Else
\ListeBouton()\IDGadget = Gadget.i
EndIf
RedessinerBouton(\ListeBouton()\IDGadget, 0)
EndWith
ProcedureReturn NouveauIDGadget.i
EndProcedure
; Vérifie, dans la fenêtre donnée, si la souris est sur un style de bouton.
; Dans ce cas, le bouton recevra l'effet survol.
; Il suffit d'ajouter ceci à la boucle d'événements de votre fenêtre.
ProcedureDLL VerifierSurvolBouton(IDFenetre.i)
Static DernierIDGadgetSurbrillant.i
Protected x.i
Protected TrouveQuelqueChose.b = #Faux
; supprimer les éléments morts
ForEach Bouton\ListeBouton()
If Not IsGadget(Bouton\ListeBouton()\IDGadget)
DeleteElement(Bouton\ListeBouton())
EndIf
Next
For x.i = 0 To ListSize(Bouton\ListeBouton()) - 1
SelectElement(Bouton\ListeBouton(), x.i)
With Bouton\ListeBouton()
If \IDFenetre = IDFenetre.i
; actualiser les informations de position du gadget
\x = GadgetX(\IDGadget)
\y = GadgetY(\IDGadget)
\Largeur = GadgetWidth(\IDGadget)
\Hauteur = GadgetHeight(\IDGadget)
If SourisSurBouton(IDFenetre.i, \IDGadget) = #Vrai
; correspondant
TrouveQuelqueChose.b = #Vrai
; activer symbole du curseur sur ce gadget
If \Actif = #Faux
CurseurMain(\IDGadget) ; changer actuelle du curseur à une main
EndIf
If DernierIDGadgetSurbrillant.i <> \IDGadget
; supprimer l'ancien survol du gadget
Protected CurrentGadget.i = \IDGadget
; définir état du nouveau gadget
RedessinerBouton(CurrentGadget.i, 1)
; supprimer l'état précédent du gadget
If DernierIDGadgetSurbrillant.i <> 0
RedessinerBouton(DernierIDGadgetSurbrillant.i, 0)
EndIf
DernierIDGadgetSurbrillant.i = CurrentGadget.i
Break
EndIf
EndIf
EndIf
EndWith
Next
If TrouveQuelqueChose.b = #Faux
If DernierIDGadgetSurbrillant.i <> 0
RedessinerBouton(DernierIDGadgetSurbrillant.i, 0)
EndIf
DernierIDGadgetSurbrillant.i = 0
EndIf
EndProcedure
; désactiver/activer un Bouton (Etat = #Faux -> activer, Etat = #Vrai -> désactiver)
ProcedureDLL DesactiverBouton(BoutonID.i, Etat.b)
Protected Trouve.b = #Faux
ForEach Bouton\ListeBouton()
If Bouton\ListeBouton()\IDGadget = BoutonID.i
Trouve.b = #Vrai
Break
ElseIf Trouve.b = #Faux
MessageRequester("INFO","BoutonID " + Str(BoutonID.i) + " non trouvé (Désactivé)!",#MB_ICONINFORMATION)
ProcedureReturn #Faux
EndIf
Next
Bouton\ListeBouton()\Actif = Etat.b
DisableGadget(BoutonID.i, Etat.b)
RedessinerBouton(Bouton\ListeBouton()\IDGadget, 0)
EndProcedure
; Déterminer le maximum d'espace nécessaire pour les boutons. Vous pouvez donner plusieurs titres
; pour la routine, si vous divisez les titres avec le caractère pipe (|).
; Vous obtiendrez le maximum de largeur du bouton nécessaire.
; Cela n'a de sens seulement, si vous utilisez le Init_BoutonPerso() avec cette valeur comme largeur.
ProcedureDLL.i ObtenirLargeurBouton(Titres.s)
Static TexteImage
Protected MaxLargeur.i = 0
Protected Largeur.i = 0
Protected Titre.s = ""
If Bouton\NomPolice = ""
MessageRequester("INFO","Vous ne pouvez pas appeler ObtenirLargeurBouton() avant d'appeler DefinirPoliceBouton()!",#MB_ICONINFORMATION)
ProcedureReturn 0
EndIf
Protected MonIDPolice.i = LoadFont(#PB_Any, Bouton\NomPolice, Bouton\TaillePolice, Bouton\StylePolice) ; charger la police dans la taille désirée
If IsImage(TexteImage) = 0
TexteImage = CreateImage(#PB_Any, 500, 30)
EndIf
StartDrawing(ImageOutput(TexteImage))
DrawingFont(FontID(MonIDPolice.i))
Protected Idx = 0
Repeat
Idx = Idx + 1
Titre.s = StringField(Titres.s, Idx, "|")
Largeur.i = TextWidth(Titre.s) + (#Bouton_LargeurOmbre * #Bouton_FacteurEchelle) + #Bouton_FacteurEchelle
If Largeur.i > MaxLargeur.i
MaxLargeur.i = Largeur.i
EndIf
Until Titre.s = ""
StopDrawing()
ProcedureReturn MaxLargeur.i
EndProcedure
Code : Tout sélectionner
EnableExplicit
XIncludeFile "Bouton maison.pbi"
;{- Enumérations
Enumeration
#Fenetre_principale
#fenetre_Aide
;EndEnumeration
;Enumeration
#Menu
#Menu_Agneau
#Menu_Aromates
#Menu_Boeuf
#Menu_Boissons
#Menu_Champignons
#Menu_Cheval
#Menu_Condiments
#Menu_Feculents
#Menu_Fruits
#Menu_Gibier
#Menu_Legumes
#Menu_Oeufs
#Menu_Poisson
#Menu_Porc
#Menu_Produits_laitiers
#Menu_Sucres
#Menu_Veau
#Menu_Volailles
#Menu_CoulFond
#Menu_CoulTexte
#Menu_CoulDefaut
#Menu_Rectangle
#Menu_Arrondi
#Menu_Rond
#Menu_Ellipse
;EndEnumeration
;Enumeration
#Base_de_donnees
#Liste
#Texte_Choix
#TexteTitre
#Chaine_Selections
#Image_Aide
#Image_Titre
#Image_Brunch
#Bouton_Valider
#Bouton_Quitter
#Bouton_Aide
#Bouton_Recette
#Bouton_Aide_Ok
#Police_Aide
#Police
#Police_Liste
EndEnumeration
#NbLignes_Aide = 18
;}
;{- Déclaration des variables
Global Ingredient$ = "", Liste_d_aliments$ = "", Aliment_de_la_liste.s = "", Resultat, Titre$, Liste$, Quitter = #False
Global Fichier_de_donnees.s = "Ingredients alimentaires.SQLite", TitreApplication.s = "Cuisinons", Table$, Nom_de_fichier$
Global Preference$ = #PB_Compiler_FilePath+"Cuisinons.prefs"
; Images
Global FichierImageLogo$ = "Cuisinons.png"
Global FichierImage5$ = "Brunch.jpg"
Global NewList Liste.s()
; Polices
Global.i Police = LoadFont(#Police, "Segoe UI", 12, #PB_Font_Bold)
Global.i Evenement, EvenementGadget, EvenementType, EvenementFenetre, EvenementMenu, N, X1, Y1
;Aide
Global NewList Message$()
Global Dim Texte$(#NbLignes_Aide)
Global.i Taille_Police_Aide = 14
Global.i Police_Aide = LoadFont(#Police_Aide, "Calibri" , Taille_Police_Aide, #PB_Font_Bold)
Global.i Police_Liste = LoadFont(#Police_Liste, "Segoe UI", 16)
Global.i X, Y, Largeur, Hauteur, Longueur, i, Index, Sortir, CouleurTexte, CouleurFond, FormeBouton
Declare Ouvrir_Fenetre_principale()
;}
;{- Initialisations
UsePNGImageDecoder()
UseJPEGImageDecoder()
UseSQLiteDatabase()
InitSprite()
;}
Procedure Lire_Preference()
Resultat = OpenPreferences(Preference$)
If resultat <> 0
PreferenceGroup("Couleur")
CouleurFond = ReadPreferenceInteger("Couleur fond", $98DFEF)
CouleurTexte = ReadPreferenceInteger("Couleur texte", $0B0B99)
PreferenceGroup("Forme")
FormeBouton = ReadPreferenceInteger("Forme", 0)
EndIf
ClosePreferences()
EndProcedure
Procedure Creer_Preferences()
Resultat = CreatePreferences(Preference$)
If Resultat <> 0
PreferenceGroup("Couleur")
WritePreferenceInteger("Couleur fond", CouleurFond)
WritePreferenceInteger("Couleur texte", CouleurTexte)
PreferenceGroup("Forme")
PreferenceComment("Forme des boutons")
WritePreferenceInteger("Forme", FormeBouton)
ClosePreferences()
Else
MessageRequester("INFO","Impossible de créer le fichier de préférences",#MB_ICONEXCLAMATION)
EndIf
EndProcedure
Procedure Erreur(Valeur.l)
Select Valeur
Case 0 ;Erreur dans la création de la base de données
MessageRequester(TitreApplication,"Erreur durant la création de la base de données")
Case 1 ;Base pas accessible
MessageRequester(TitreApplication,"La base de donnée n'est pas accessible "+DatabaseError())
Case 2 ;Erreur lors de l'execution de la requete
MessageRequester(TitreApplication,"Erreur durant l'exécution de la requête "+DatabaseError())
EndSelect
;Sortie de l'application
End
EndProcedure
Procedure OuvrirBase()
If OpenDatabase(#Base_de_donnees, Fichier_de_donnees, "", "", #PB_Database_SQLite)
Else
Erreur(1)
End
EndIf
EndProcedure
;Liste des enregistrements
Procedure ListeEnregistrements()
If DatabaseQuery(#Base_de_donnees, "select * from '" + Table$ + "'")
While NextDatabaseRow(#Base_de_donnees)
Ingredient$ = GetDatabaseString(#Base_de_donnees, 0)
AddGadgetItem(#Liste, -1, Ingredient$)
Wend
FinishDatabaseQuery(#Base_de_donnees)
Else
Erreur(2)
EndIf
EndProcedure
Procedure Afficher_Images()
X = 325
Y = 35
Resultat = CreateImage(#Image_Brunch, 849, 460)
If Resultat
Resultat = LoadImage(#Image_Brunch, FichierImage5$)
If Resultat
ResizeImage(#Image_Brunch, 1030, 580+25)
ImageGadget(#Image_Brunch, X,Y,849,580+25, ImageID(#Image_Brunch))
EndIf
EndIf
Y = 65
Resultat = CreateImage(#Image_Titre, 1222, 135)
If Resultat
Resultat = LoadImage(#Image_Titre, FichierImageLogo$)
If Resultat
ResizeImage(#Image_Titre, 1030, 125+50)
ImageGadget(#Image_Titre, X,Y+100,1030,125+50, ImageID(#Image_Titre))
EndIf
EndIf
EndProcedure
Procedure Afficher_MenuRubriques()
CreateMenu(#menu, WindowID(#Fenetre_principale))
MenuTitle("Rubriques")
MenuItem(#Menu_Agneau, "Agneau ou mouton ")
MenuItem(#Menu_Aromates, "Arômates ")
MenuItem(#Menu_Boeuf, "Boeuf ")
MenuItem(#Menu_Boissons, "Boissons & alcools ")
MenuItem(#Menu_Champignons, "Champignons ")
MenuItem(#Menu_Cheval, "Cheval ")
MenuItem(#Menu_Condiments, "Condiments ")
MenuItem(#Menu_Feculents, "Féculents ")
MenuItem(#Menu_Fruits, "Fruits ")
MenuItem(#Menu_Gibier, "Gibier ")
MenuItem(#Menu_Legumes, "Légumes ")
MenuItem(#Menu_Oeufs, "Oeufs ")
MenuItem(#Menu_Poisson, "Poissons ")
MenuItem(#Menu_Porc, "Porc ")
MenuItem(#Menu_Produits_laitiers, "Produits laitiers ")
MenuItem(#Menu_Sucres, "Sucres & édulcorants ")
MenuItem(#Menu_Veau, "Veau ")
MenuItem(#Menu_Volailles, "Volailles ")
MenuBar()
MenuTitle("Préférences")
MenuItem(#Menu_CoulFond, "Couleur du fond")
MenuItem(#Menu_CoulTexte, "Couleur du texte")
MenuBar()
MenuItem(#Menu_CoulDefaut,"Couleurs par défaut")
MenuBar()
OpenSubMenu("Forme des boutons")
MenuItem(#Menu_Rectangle, "Rectangulaire")
MenuItem(#Menu_Arrondi, "Arrondie")
MenuItem(#Menu_Rond, "Ronde")
MenuItem(#Menu_Ellipse, "Elliptique")
EndProcedure
Procedure Afficher_Boutons()
X = 335
Y = 665
DefinirPoliceBouton("Arial", 30, 256, CouleurTexte, 0)
Init_BoutonPerso(FormeBouton, 3,186, 60, GetWindowColor(#Fenetre_principale), $FFFFFF, CouleurFond, $000000, $FFFFFF, 15, 0)
CreerBouton(#Bouton_Valider, #image_Brunch, "Valider", X, Y, 0)
X +200
CreerBouton(#Bouton_Recette, #Image_Brunch, "Recette", X, Y, 0)
X + 420
CreerBouton(#Bouton_Aide, #Image_Brunch, "Aide", X, Y, 0)
X + 200
CreerBouton(#Bouton_Quitter, #Image_Brunch, "Quitter", X, Y, 0)
EndProcedure
Procedure Creer_Liste()
ListViewGadget(#Liste, 5, 5, 310, 735, #PB_ListView_MultiSelect)
AddGadgetItem(#liste, 0, " MODE D'EMPLOI")
AddGadgetItem(#liste, 1, " ----------------------")
AddGadgetItem(#Liste, 2, "")
AddGadgetItem(#Liste, 3, " D'abord, sélectionner une")
AddGadgetItem(#Liste, 4, " rubrique.")
AddGadgetItem(#Liste, 5, "")
AddGadgetItem(#Liste, 6, " Dans la rubrique choisie,")
AddGadgetItem(#Liste, 7, " sélectionner les ingrédients")
AddGadgetItem(#Liste, 8, "")
AddGadgetItem(#Liste, 9, " On peut en sélectionner")
AddGadgetItem(#Liste, 10, " plusieurs en pressant la ")
AddGadgetItem(#Liste, 11, " touche ctrl, ensuite il faut ")
AddGadgetItem(#Liste, 12, " valider les ingrédients avec ")
AddGadgetItem(#Liste, 13, " le bouton Valider. Ensuite si ")
AddGadgetItem(#Liste, 14, " on veut choisir d'autres ")
AddGadgetItem(#Liste, 15, " ingrédients dans d'autres ")
AddGadgetItem(#Liste, 16, " rubriques, il suffit de cliquer ")
AddGadgetItem(#Liste, 17, " la rubrique voulue.")
AddGadgetItem(#Liste, 18, "")
AddGadgetItem(#Liste, 19, " Puis, cliquer sur recette pour")
AddGadgetItem(#Liste, 20, " obtenir la recette.")
AddGadgetItem(#Liste, 21, "")
AddGadgetItem(#Liste, 22, " BON APPETIT")
AddGadgetItem(#Liste, 23, " =========")
SetGadgetColor(#Liste, #PB_Gadget_BackColor, CouleurFond)
SetGadgetColor(#Liste, #PB_Gadget_FrontColor, CouleurTexte)
SetGadgetFont(#Liste, Police_Liste)
EndProcedure
Procedure Aide()
If Texte$(1) = ""
Restore Aide
Read.s Texte$(0)
Largeur = Len(Texte$(0))
Restore Aide
For i = 1 To #NbLignes_Aide
Read.s Texte$(i)
If Texte$(i) <> "Fin"
If Len(Texte$(i)) > Largeur
Largeur = Len(Texte$(i)) + 2
Else
Largeur = Len(Texte$(0)) + 2
EndIf
AddElement(Message$()) : Message$() = Texte$(i)
Else
Break
EndIf
Next
EndIf
Hauteur = (ListSize(Message$()) * (Taille_Police_Aide / 0.52)); + 60
Longueur = Largeur * (Taille_Police_Aide*0.64)
OpenWindow(#fenetre_Aide, 0, 0, Longueur, Hauteur, "Aide", #PB_Window_SystemMenu | #PB_Window_TitleBar | #PB_Window_ScreenCentered)
CanvasGadget(#fenetre_Aide,0,0,Longueur,Hauteur, #PB_Canvas_ClipMouse)
StartDrawing(CanvasOutput(#fenetre_Aide))
DrawingFont(FontID(#Police_Aide))
DrawingMode(#PB_2DDrawing_Default)
Box(0, 0, Longueur, Hauteur, CouleurFond) ; colorer le canvas
FirstElement(Message$())
For Index = 0 To ListSize(Message$())-1
DrawText(70,10+Index*TextHeight(Chr(32)),Message$(),CouleurTexte,CouleurFond)
NextElement(Message$())
Next
StopDrawing()
CatchImage(#Image_Aide, ?iconeInformation)
ImageGadget(#Image_Aide, 10,10,60,60, ImageID(#Image_Aide))
Init_BoutonPerso(FormeBouton, 2,70, 40, CouleurFond, CouleurFond, $FFFFFF, $000000, $FFFFFF, 15, 0)
DefinirPoliceBouton("Calibri" , Taille_Police_Aide, #PB_Font_Bold)
CreerBouton(#Bouton_Aide_Ok, #fenetre_Aide, "Ok", (Longueur/2)-30, Hauteur-60, 0)
Sortir = 0
; Boucle d'évenements Aide
Repeat
Select WaitWindowEvent()
Case #PB_Event_Gadget
Select EventType()
Case #PB_EventType_LeftButtonDown
;-Mémorisation des coordonnées de la souris sur le canvas
X1 = GetGadgetAttribute(#fenetre_Aide, #PB_Canvas_MouseX)
Y1 = GetGadgetAttribute(#fenetre_Aide, #PB_Canvas_MouseY)
If (X1 >= 381 And X1 <= 441) And (Y1 >= 428 And Y1 <= 458)
SetGadgetAttribute(#fenetre_Aide, #PB_Canvas_Clip , 0)
CloseWindow(#fenetre_Aide)
Sortir = 1
EndIf
Case #PB_EventType_MouseEnter
SetGadgetAttribute(#fenetre_Aide, #PB_Canvas_Clip , 1)
EndSelect
Case #PB_Event_CloseWindow
Select EventWindow()
Case #fenetre_Aide
CloseWindow(#fenetre_Aide)
Sortir = 1
EndSelect
EndSelect
Until Sortir = 1
DataSection
Aide:
Data.s "Pour sélectionner une rubrique clique sur un des boutons de "+Chr(34)+" <rubrique> "+Chr(34)+" de ton choix, "
Data.s "ensuite tu cliques simplement sur "+Chr(34)+"les ingrédients"+Chr(34)+" dans la liste de gauche que tu valides "
Data.s "avec le bouton <Valider>, tu peux valider plusieurs ingrédients à la fois."
Data.s "Il te suffit pour cela de presser la touche <Ctrl> et de cliquer sur les ingrédients de ton choix."
Data.s ""
Data.s "Puis quand tu as terminé ton choix d'ingrédients, tu cliques le bouton <Chercher la recette> "
Data.s "à ce moment-là, le logiciel te proposera (peut-être) une recette, mais il te faudra choisir "
Data.s "celle qui te convient."
Data.s ""
Data.s "Quand tu as pressé le bouton <Recette>, le programme se referme automatiquement"
Data.s ""
Data.s "Je te souhaite de longues heures de plaisir à la cuisine et surtout un bon appétit, bien sûr !"
Data.s ""
Data.s ""
Data.s ""
Data.s " "+Chr(169)+" Michel Lye - 2011-2012 - Ce logiciel est gratuit!"
Data.s ""
Data.s " Entrer la souris dans cette zone pour quitter cette fenêtre d'aide"
Data.s "Fin"
EndDataSection
EndProcedure
Procedure Relancer()
MessageRequester("Information","La forme et la couleur des boutons"+#LF$+"seront prises en compte au prochain démarrage", #MB_ICONINFORMATION)
EndProcedure
Procedure CouleurFond()
SetWindowColor(#Fenetre_principale, CouleurFond)
Resultat = IsWindow(#fenetre_Aide)
If Resultat <> 0
SetWindowColor(#fenetre_Aide, CouleurFond)
EndIf
SetGadgetColor(#Liste, #PB_Gadget_BackColor, CouleurFond)
SetGadgetColor(#Texte_Choix, #PB_Gadget_BackColor, CouleurFond)
SetGadgetColor(#Chaine_Selections, #PB_Gadget_BackColor, CouleurFond)
Relancer()
EndProcedure
Procedure CouleurTexte()
SetGadgetColor(#Liste, #PB_Gadget_FrontColor, CouleurTexte)
SetGadgetColor(#Texte_Choix, #PB_Gadget_FrontColor, CouleurTexte)
SetGadgetColor(#Chaine_Selections, #PB_Gadget_FrontColor, CouleurTexte)
Relancer()
EndProcedure
Procedure Couleur_par_defaut()
CouleurTexte = $0B0B99
CouleurFond = $98DFEF
CouleurTexte()
CouleurFond()
Relancer()
EndProcedure
Procedure Ouvrir_Fenetre_principale()
Protected X
OpenWindow(#Fenetre_principale, 0, 0, 1360, 740+25, "", #PB_Window_BorderLess)
SetWindowColor(#Fenetre_principale, CouleurFond)
TextGadget(#Texte_Choix, 325, 5, 100, 25, " Votre choix:")
StringGadget(#Chaine_Selections, 430, 5, 920, 25, "")
; coloration des gadgets
SetGadgetColor(#Texte_Choix, #PB_Gadget_BackColor, CouleurFond)
SetGadgetColor(#Texte_Choix, #PB_Gadget_FrontColor, CouleurTexte)
SetGadgetColor(#Chaine_Selections, #PB_Gadget_BackColor, CouleurFond)
SetGadgetColor(#Chaine_Selections, #PB_Gadget_FrontColor, CouleurTexte)
;- Polices des gadgets
SetGadgetFont(#Texte_Choix, Police)
SetGadgetFont(#Chaine_Selections, Police)
Afficher_MenuRubriques()
Afficher_Boutons()
Afficher_Images()
Creer_Liste()
OuvrirBase()
;- Boucle d'événements
Repeat
Evenement = WaitWindowEvent()
EvenementGadget = EventGadget()
EvenementType = EventType()
EvenementMenu = EventMenu()
SetWindowTitle(#Fenetre_principale, Titre$)
Select Evenement
; ///////////////////
Case #PB_Event_Gadget
If EvenementGadget = #Liste
Ingredient$ = GetGadgetText(#Liste)
ElseIf EvenementGadget = #Bouton_Valider
AddElement(Liste())
Liste() = Ingredient$
For N=0 To CountGadgetItems(#Liste) - 1
If GetGadgetItemState(#Liste, N) = #True
Liste$ + "+" + GetGadgetItemText(#Liste, N)
;Debug GetGadgetItemText(#Liste, N)
EndIf
Next
SetGadgetText(#Chaine_Selections, Liste())
ElseIf EvenementGadget = #Bouton_Aide
Aide()
ElseIf EvenementGadget = #Bouton_Recette
RunProgram("http://www.google.fr/#q=recette"+Liste$,"","")
End
ElseIf EvenementGadget = #Bouton_Quitter
Creer_Preferences()
End
EndIf
Case #PB_Event_Menu
Select EventMenu()
Case #Menu_CoulDefaut
Couleur_par_defaut()
Case #Menu_CoulFond
CouleurFond = ColorRequester()
CouleurFond()
Case #Menu_CoulTexte
CouleurTexte = ColorRequester()
CouleurTexte()
Case #Menu_Rectangle
FormeBouton = 0
Relancer()
Case #Menu_Arrondi
FormeBouton = 1
Relancer()
Case #Menu_Rond
FormeBouton = 2
Relancer()
Case #Menu_Ellipse
FormeBouton = 3
Relancer()
Case #Menu_Produits_laitiers
ClearGadgetItems(#liste)
Table$ = "Produits_laitiers"
Titre$ = "Produits laitiers"
ListeEnregistrements()
Case #Menu_Poisson
ClearGadgetItems(#liste)
Table$ = "Poissons"
Titre$ = "Poissons, crustacés et coquillages"
ListeEnregistrements()
Case #Menu_Oeufs
ClearGadgetItems(#liste)
Table$ = "Oeufs"
Titre$ = "Oeufs"
ListeEnregistrements()
Case #Menu_Agneau
ClearGadgetItems(#liste)
Table$ = "Agneau"
Titre$ = "Agneau ou mouton"
ListeEnregistrements()
Case #Menu_Boeuf
ClearGadgetItems(#liste)
Table$ = "Boeuf"
Titre$ = "Boeuf"
ListeEnregistrements()
Case #Menu_Cheval
ClearGadgetItems(#liste)
Table$ = "Cheval"
Titre$ = "Cheval"
ListeEnregistrements()
Case #Menu_Porc
ClearGadgetItems(#liste)
Table$ = "Porc"
Titre$ = "Porc"
ListeEnregistrements()
Case #Menu_Veau
ClearGadgetItems(#liste)
Table$ = "Veau"
Titre$ = "Veau"
ListeEnregistrements()
Case #Menu_Gibier
ClearGadgetItems(#liste)
Table$ = "Gibier"
Titre$ = "Gibier"
ListeEnregistrements()
Case #Menu_Volailles
ClearGadgetItems(#liste)
Table$ = "Volailles"
Titre$ = "Volailles"
ListeEnregistrements()
Case #Menu_Condiments
ClearGadgetItems(#liste)
Table$ = "Condiments"
Titre$ = "Condiments"
ListeEnregistrements()
Case #Menu_Aromates
ClearGadgetItems(#liste)
Table$ = "Aromates"
Titre$ = "Aromates"
ListeEnregistrements()
Case #Menu_Feculents
ClearGadgetItems(#liste)
Table$ = "Feculents"
Titre$ = "Féculents"
ListeEnregistrements()
Case #Menu_Sucres
ClearGadgetItems(#liste)
Table$ = "Sucres"
Titre$ = "Sucres et édulcorants"
ListeEnregistrements()
Case #Menu_Fruits
ClearGadgetItems(#liste)
Table$ = "Fruits"
Titre$ = "Fruits"
ListeEnregistrements()
Case #Menu_Legumes
ClearGadgetItems(#liste)
Table$ = "Légumes"
Titre$ = "Légumes"
ListeEnregistrements()
Case #Menu_Champignons
ClearGadgetItems(#liste)
Table$ = "Champignons"
Titre$ = "Champignons"
ListeEnregistrements()
Case #Menu_Boissons
ClearGadgetItems(#liste)
Table$ = "Boissons_alcools"
Titre$ = "Boissons et alcools"
ListeEnregistrements()
EndSelect
; ////////////////////////
Case #PB_Event_CloseWindow
EvenementFenetre = EventWindow()
If EvenementFenetre = #Fenetre_principale
Quitter = #True
Creer_Preferences()
EndIf
EndSelect
VerifierSurvolBouton(#Fenetre_principale)
Until Quitter = #True
End
EndProcedure
;- Démarrage
;{
Lire_Preference()
Ouvrir_Fenetre_principale()
;}
iconeInformation:
IncludeBinary "iconeInformation.png"
Microsoft Windows 10 Famille 64 bits : Carte mère : ASRock 970 Extreme3 R2.0 : Carte Graphique NVIDIA GeForce RTX 3080 : Processeur AMD FX 6300 6 cœurs 12 threads 3,50 GHz PB 6.20 LTS (x64)
Un homme doit être poli, mais il doit aussi être libre !
Un homme doit être poli, mais il doit aussi être libre !
Re: Comment placer la souris sur un canvas
bonjour Micoute
voir C:\PureBasic\Examples\Sources\CanvasGadget.pb
et dans le manuel, il y a cet exemple
bonne journée
voir C:\PureBasic\Examples\Sources\CanvasGadget.pb
et dans le manuel, il y a cet exemple

bonne journée
Code : Tout sélectionner
If OpenWindow(0, 0, 0, 220, 220, "CanvasGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
CanvasGadget(0, 10, 10, 200, 200)
Repeat
Event = WaitWindowEvent()
If Event = #PB_Event_Gadget And EventGadget() = 0
If EventType() = #PB_EventType_LeftButtonDown Or (EventType() = #PB_EventType_MouseMove And GetGadgetAttribute(0, #PB_Canvas_Buttons) & #PB_Canvas_LeftButton)
If StartDrawing(CanvasOutput(0))
x = GetGadgetAttribute(0, #PB_Canvas_MouseX)
y = GetGadgetAttribute(0, #PB_Canvas_MouseY)
Circle(x, y, 10, RGB(Random(255), Random(255), Random(255)))
StopDrawing()
EndIf
EndIf
EndIf
Until Event = #PB_Event_CloseWindow
EndIf
Re: Comment placer la souris sur un canvas
mes sources sont à l'adresse suivante :
http://dl.free.fr/pH1f5awf5
merci de prendre du temps pour m'aider
http://dl.free.fr/pH1f5awf5
merci de prendre du temps pour m'aider
Microsoft Windows 10 Famille 64 bits : Carte mère : ASRock 970 Extreme3 R2.0 : Carte Graphique NVIDIA GeForce RTX 3080 : Processeur AMD FX 6300 6 cœurs 12 threads 3,50 GHz PB 6.20 LTS (x64)
Un homme doit être poli, mais il doit aussi être libre !
Un homme doit être poli, mais il doit aussi être libre !
Re: Comment placer la souris sur un canvas
Merci pour le source (manque l'icone aide mais c'est pas grave).
J'ai donc cliqué sur Aide, je ne comprends pas ton soucis, la seconde fenêtre s'ouvre bien.
Peux tu me dire une procédure à suivre pour générer ton soucis.
J'ai donc cliqué sur Aide, je ne comprends pas ton soucis, la seconde fenêtre s'ouvre bien.
Peux tu me dire une procédure à suivre pour générer ton soucis.
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Re: Comment placer la souris sur un canvas
OK, la fenêtre d'aide s'ouvre bien, mais, là où se trouve le curseur quand clique sur le bouton aide, si on clique en dehors de la fenêtre d'aide, celle-ci disparaît derrière la fenêtre principale et le programme semble bloqué, en fait, il attend qu'on appuie sur le bouton "Ok" de la fenêtre d'aide qui apparemment n'existe plus pour l'utilisateur, peut-être devrais-je mettre un stickyWindow(#Fenetre_Aide, 1) ? Mais cela n'empêchera pas de cliquer en dehors de la fenêtre, c'est pour cela que je souhaiterais que mon curseur soit dans cette fenêtre, puisqu'il sera piégé à l’intérieur tant qu'on aura pas cliquer l'emplacement du bouton, car ce bouton est apparemment considéré comme une image sur le canvas
Dernière modification par Micoute le ven. 26/oct./2012 13:04, modifié 1 fois.
Microsoft Windows 10 Famille 64 bits : Carte mère : ASRock 970 Extreme3 R2.0 : Carte Graphique NVIDIA GeForce RTX 3080 : Processeur AMD FX 6300 6 cœurs 12 threads 3,50 GHz PB 6.20 LTS (x64)
Un homme doit être poli, mais il doit aussi être libre !
Un homme doit être poli, mais il doit aussi être libre !
Re: Comment placer la souris sur un canvas
Je modifierai quelques petites chose pour ta fenêtre aide.
Dejà ne pas faire apparaitre bordures et boutons pour une fenêtre "interne" comme de l'aide, sans compter que vu le clipmouse sur le canvas, ta souris est bloquée de dans donc les boutons minimisé/agrandir/fermer ne servent à rien.
J'ajoute aussi un Sticky histoire que la fenêtre reste en avant plan.
Comme il ni a plus de bordure ça fait un peu moche, du coup j'en crée une petite en noire.
Ce qui donne dans la procédure Aide()
Dejà ne pas faire apparaitre bordures et boutons pour une fenêtre "interne" comme de l'aide, sans compter que vu le clipmouse sur le canvas, ta souris est bloquée de dans donc les boutons minimisé/agrandir/fermer ne servent à rien.
J'ajoute aussi un Sticky histoire que la fenêtre reste en avant plan.
Code : Tout sélectionner
OpenWindow(#fenetre_Aide, 0, 0, Longueur, Hauteur, "Aide", #PB_Window_BorderLess | #PB_Window_ScreenCentered
StickyWindow(#fenetre_Aide,1)
Code : Tout sélectionner
Box(0, 0, Longueur, Hauteur, $0) ; colorer le canvas
Box(2, 2, Longueur-4, Hauteur-4, CouleurFond) ; colorer le canvas
Code : Tout sélectionner
OpenWindow(#fenetre_Aide, 0, 0, Longueur, Hauteur, "Aide", #PB_Window_BorderLess | #PB_Window_ScreenCentered)
StickyWindow(#fenetre_Aide,1)
CanvasGadget(#fenetre_Aide,0,0,Longueur,Hauteur, #PB_Canvas_ClipMouse)
StartDrawing(CanvasOutput(#fenetre_Aide))
DrawingFont(FontID(#Police_Aide))
DrawingMode(#PB_2DDrawing_Default)
Box(0, 0, Longueur, Hauteur, $0) ; colorer le canvas
Box(2, 2, Longueur-4, Hauteur-4, CouleurFond) ; colorer le canvas
FirstElement(Message$())
For Index = 0 To ListSize(Message$())-1
DrawText(70,10+Index*TextHeight(Chr(32)),Message$(),CouleurTexte,CouleurFond)
NextElement(Message$())
Next
StopDrawing()
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Re: Comment placer la souris sur un canvas
Ton bouton OK est inutile.
Plusieurs solutions
- 1 - un simple clique gauche pour quitter
- 2 - Si la souris sort du canvas on quitte.
Voilà les event pour cette seconde solution.
Plusieurs solutions
- 1 - un simple clique gauche pour quitter
- 2 - Si la souris sort du canvas on quitte.
Voilà les event pour cette seconde solution.
Code : Tout sélectionner
; Boucle d'évenements Aide
Repeat
Select WaitWindowEvent()
Case #PB_Event_Gadget
Select EventGadget()
Case #fenetre_Aide
Select EventType()
Case #PB_EventType_MouseMove
X1 = GetGadgetAttribute(#fenetre_Aide, #PB_Canvas_MouseX)
Y1 = GetGadgetAttribute(#fenetre_Aide, #PB_Canvas_MouseY)
Debug X1
Debug Y1
If X1 = 0 Or X1 = Longueur Or Y1 = 0 Or Y1 = Hauteur
Sortir = 1
EndIf
EndSelect
EndSelect
EndSelect
Until Sortir = 1
CloseWindow(#fenetre_Aide)
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Re: Comment placer la souris sur un canvas
C'est cool, car dans ce cas, comme la fenêtre ne disparaît plus, l'utilisateur finira bien par comprendre la manœuvre à effectuer, il manquait presque rien et j'avais presque la solution.
Merci énormément, j'adore quand un forum marche sur le principe de l'échange de connaissances !
Merci énormément, j'adore quand un forum marche sur le principe de l'échange de connaissances !
Microsoft Windows 10 Famille 64 bits : Carte mère : ASRock 970 Extreme3 R2.0 : Carte Graphique NVIDIA GeForce RTX 3080 : Processeur AMD FX 6300 6 cœurs 12 threads 3,50 GHz PB 6.20 LTS (x64)
Un homme doit être poli, mais il doit aussi être libre !
Un homme doit être poli, mais il doit aussi être libre !
Re: [Résolu] Comment placer la souris sur un canvas
Il y a un truc très simple que tu peux faire aussi il me semble : déactiver la fenêtre qui a ouvert l'aide jusqu'à ce que l'aide soit fermée.
La commande est
En plus cette méthode et très rapide à mettre en place
Un exemple rapide :
Voila, j'espère que j'ai bien compris ce que tu cherchais à faire.
La commande est
Code : Tout sélectionner
DisableWindow()
Un exemple rapide :
Code : Tout sélectionner
Procedure FenetreFille(fenetre_mere.l)
Protected.l fen, button_exit, event
DisableWindow(fenetre_mere, #True)
fen = OpenWindow(#PB_Any, 0, 0, 300, 100, "Fenetre fille", #PB_Window_SystemMenu | #PB_Window_WindowCentered, WindowID(fenetre_mere))
button_exit = ButtonGadget(#PB_Any, 10, 10, 200, 20, "Fermer la fenetre fille")
button_autre = ButtonGadget(#PB_Any, 10, 30, 200, 20, "Ouvre une autre fenetre fille")
Repeat
event = WaitWindowEvent()
If event = #PB_Event_Gadget
Select EventGadget()
Case button_exit
event = #PB_Event_CloseWindow
Case button_autre
FenetreFille(fen)
EndSelect
EndIf
Until event = #PB_Event_CloseWindow
CloseWindow(fen)
DisableWindow(fenetre_mere, #False)
EndProcedure
OpenWindow(0, 0, 0, 500, 300, "Fenetre mère", #PB_Window_ScreenCentered | #PB_Window_SystemMenu)
ButtonGadget(0, 10, 10, 200, 20, "Ouvrir la fenetre fille")
Repeat
event = WaitWindowEvent()
If event = #PB_Event_Gadget
Select EventGadget()
Case 0
FenetreFille(0)
EndSelect
EndIf
Until event = #PB_Event_CloseWindow
End
_________________________________________________
Mon site : CeriseCode (Attention Chantier perpétuel
)
Mon site : CeriseCode (Attention Chantier perpétuel
