Page 1 sur 1

Ecrire texte dans ImageGadget

Publié : mar. 27/avr./2021 19:36
par jak64
Bonjour,
Je souhaite mettre une image de fond sur un écran OpenWindow et écrire du texte sur cette image. JE NE VEUX PAS utiliser un écran Screen ou WindowedScreen() car j'utilise une vidéo dans mon programme qui ne peut être lue que dans un écran OpenWindow.
Le programme ne plante pas mais aucun texte ne s'affiche. (Si vous le lancez, il va planter car vous n'avez pas l'image mais chez moi, il ne plante pas mais le texte ne s'affiche pas sur l'image).

Ma question est simple : Sur un écran OpenWindow, peut-on afficher une image et écrire du texte sur cette image ? Que ce soit avec ImageGadegt ou un autre gadget.

Merci de votre aide.

Code : Tout sélectionner

If InitSprite()=0 : MessageRequester("Erreur", "InitSprite() non initialisé !"):End:EndIf
OpenWindow(0, 0, 0, 800,600, "Test", #PB_Window_ScreenCentered  | #PB_Window_SystemMenu)
LoadImage(0,"fond_ecran.bmp")
ImageGadget(0,0,0,800,600,ImageID(0))
police=LoadFont(0, "Calibri", 24,#PB_Font_Bold)
StartDrawing(ImageOutput(0))
DrawingMode(#PB_2DDrawing_Transparent)
DrawingFont(police)
DrawText(10,10,"Test",#Red)
StopDrawing()

  Repeat
    event = WindowEvent()
    Select event 
      Case #PB_Event_CloseWindow
        End
    EndSelect
  Until event=#PB_Event_CloseWindow

Re: Ecrire texte dans ImageGadget

Publié : mar. 27/avr./2021 20:14
par venom
Salut,

Ton ImageGadget(0,0,0,800,600,ImageID(0)) n'est pas placer au bon endroit :wink:

Code : Tout sélectionner

If InitSprite()=0 : MessageRequester("Erreur", "InitSprite() non initialisé !"):End:EndIf
OpenWindow(0, 0, 0, 800,600, "Test", #PB_Window_ScreenCentered  | #PB_Window_SystemMenu)
LoadImage(0,"fond_ecran.bmp")
police=LoadFont(0, "Calibri", 24,#PB_Font_Bold)
StartDrawing(ImageOutput(0))
DrawingMode(#PB_2DDrawing_Transparent)
DrawingFont(police)
DrawText(0,0,"Test",#Red)
StopDrawing()
ImageGadget(0,0,0,800,600,ImageID(0)) ; <----- tu dois afficher le resultat final (avec le texte) apres l'avoir creer ;)

  Repeat
    event = WindowEvent()
    Select event 
      Case #PB_Event_CloseWindow
        End
    EndSelect
  Until event=#PB_Event_CloseWindow





@++

Re: Ecrire texte dans ImageGadget

Publié : mar. 27/avr./2021 20:31
par jak64
Bonjour venom,
Merci, c'est parfait, exactement ce que je voulais.
Bonne soirée (moi je regarde la match de ligue des Champions, mais j'ai quand même pris le temps de te remercier).

Re: Ecrire texte dans ImageGadget

Publié : mer. 28/avr./2021 8:52
par Mesa
Pour les débutants, juste pour info, on ne peut pas ajouter de gadget par dessus, il ne fonctionnera pas.
Il faut remplacer l'imagegadget par un canvas avec l'option container.

Code : Tout sélectionner

UseJPEGImageDecoder()
If InitSprite()=0 : MessageRequester("Erreur", "InitSprite() non initialisé !"):End:EndIf
OpenWindow(0, 0, 0, 800,600, "Test", #PB_Window_ScreenCentered  | #PB_Window_SystemMenu)
LoadImage(0,"f:\ok.jpg")
police=LoadFont(0, "Calibri", 24,#PB_Font_Bold)
StartDrawing(ImageOutput(0))
DrawingMode(#PB_2DDrawing_Transparent)
DrawingFont(police)
DrawText(0,0,"Test",#Red)
StopDrawing()
CanvasGadget(0,0,0,800,600,#PB_Canvas_Container) ; <----- tu dois afficher le resultat final (avec le texte) apres l'avoir creer ;)
SetGadgetAttribute(0,#PB_Canvas_Image,ImageID(0))

ButtonGadget(1,50,50,50,50,"ij")

  Repeat
    event = WindowEvent()
    Select event 
      Case #PB_Event_CloseWindow
        End
    EndSelect
  Until event=#PB_Event_CloseWindow
M.

Re: Ecrire texte dans ImageGadget

Publié : mer. 28/avr./2021 9:31
par jak64
Bonjour Mesa,
Merci de ton retour.
Si j'ai bien compris, en employant pas un ImageGadget, je peux écrire dessus mais je ne pourrai pas ajouter des gadgets par dessus (boutons ou autres) alors qu'avec un CanvasGadget, je pourrai y mettre une image , y écrire dessus mais en plus ajouter des gadgets par dessus cette image, comme dans ton exemple.
Merci de me l'avoir indiqué.
Cordialement,

Re: Ecrire texte dans ImageGadget

Publié : mer. 28/avr./2021 9:36
par jak64
Je voulais écrire en employant un ImageGadget et non en employant pas un ImageGadget :?

Re: Ecrire texte dans ImageGadget

Publié : mer. 28/avr./2021 13:54
par Mesa
Sous windows seulement, et sans gadget du tout...

Code : Tout sélectionner

Enumeration FormWindow
	#win
EndEnumeration

Enumeration FormGadget
	#imgBackground
	#edtNotes
EndEnumeration



UseJPEGImageDecoder()
LoadImage(#imgBackground,"ok.jpg");#PB_Compiler_Home+"Examples\Sources\Data\Background.bmp")
police=LoadFont(0, "Calibri", 24,#PB_Font_Bold)
StartDrawing(ImageOutput(#imgBackground))
DrawingMode(#PB_2DDrawing_Transparent)
DrawingFont(police)
DrawText(0,0,"Test",#Red)
StopDrawing()
hBrush = CreatePatternBrush_(ImageID(#imgBackground))

OpenWindow(#win, 1, 1, 800, 600, "ok", #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_TitleBar | #PB_Window_ScreenCentered)


SetClassLongPtr_(WindowID(0), #GCL_HBRBACKGROUND, hBrush)
RedrawWindow_(WindowID(#win), #Null, #Null, #RDW_INVALIDATE)

EditorGadget(#edtNotes, 100, 100, 300, 100, 0|#PB_Editor_WordWrap)
InvalidateRect_(WindowID(#win),0,1)

Repeat
Until WaitWindowEvent(100)=#PB_Event_CloseWindow
M.

Re: Ecrire texte dans ImageGadget

Publié : mer. 28/avr./2021 15:25
par jak64
Bonjour Mesa,
Merci pour le code (j'avoue, j'ai pas tout compris) mais c'est intéressant.
Cordialement,

Re: Ecrire texte dans ImageGadget

Publié : mer. 28/avr./2021 15:54
par Marc56
jak64 a écrit : mer. 28/avr./2021 15:25 Merci pour le code (j'avoue, j'ai pas tout compris) mais c'est intéressant.
Toutes les commandes suffixées par undersocre (_) sont des API. Leur documentation est donc à chercher directement chez MS (via moteur de recherche). Leur usage est possible dans PB (version enregistrée). C'est rapide, puissant mais a plusieurs inconvénients:
  • Une même fonctionnalité peut être effectuée avec plusieurs API, toutes presque pareilles mais parfois incompatibles d'une version à l'autre de Windows.
  • Il est assez courant qu'une API mette la pagaille dans un code (erreurs difficiles à trouver)
  • Il faut leur passer tous les paramètres même si tous ne servent pas et d'une façon stricte.
En ce qui concerne les gadgets, il est possible de les superposer, en considérant plusieurs choses:
  • Certains peuvent être transparents donc on peut superposer du texte sur une image à condition de faire une image à fond transparent
  • Seul le gadget du dessus est interactif (clic de souris / clavier / drag-and-drop)
Tout ceci peut sembler confus au début, mais ça donne plein de possibilité.
N'hésite pas à poser des questions si tu as des doutes sur le choix d'une méthode.
:wink:

Re: Ecrire texte dans ImageGadget

Publié : mer. 28/avr./2021 15:59
par jak64
Merci Marc de ces informations, je pense avoir compris et je regarderai la doc Microsoft.