Ecrire texte dans ImageGadget

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Avatar de l’utilisateur
jak64
Messages : 85
Inscription : dim. 03/mai/2020 23:16

Ecrire texte dans ImageGadget

Message 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
Avatar de l’utilisateur
venom
Messages : 3072
Inscription : jeu. 29/juil./2004 16:33
Localisation : Klyntar
Contact :

Re: Ecrire texte dans ImageGadget

Message 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





@++
Windows 10 x64, PureBasic 5.73 x86 & x64
GPU : radeon HD6370M, CPU : p6200 2.13Ghz
Avatar de l’utilisateur
jak64
Messages : 85
Inscription : dim. 03/mai/2020 23:16

Re: Ecrire texte dans ImageGadget

Message 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).
Mesa
Messages : 1098
Inscription : mer. 14/sept./2011 16:59

Re: Ecrire texte dans ImageGadget

Message 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.
Avatar de l’utilisateur
jak64
Messages : 85
Inscription : dim. 03/mai/2020 23:16

Re: Ecrire texte dans ImageGadget

Message 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,
Avatar de l’utilisateur
jak64
Messages : 85
Inscription : dim. 03/mai/2020 23:16

Re: Ecrire texte dans ImageGadget

Message par jak64 »

Je voulais écrire en employant un ImageGadget et non en employant pas un ImageGadget :?
Mesa
Messages : 1098
Inscription : mer. 14/sept./2011 16:59

Re: Ecrire texte dans ImageGadget

Message 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.
Avatar de l’utilisateur
jak64
Messages : 85
Inscription : dim. 03/mai/2020 23:16

Re: Ecrire texte dans ImageGadget

Message par jak64 »

Bonjour Mesa,
Merci pour le code (j'avoue, j'ai pas tout compris) mais c'est intéressant.
Cordialement,
Marc56
Messages : 2148
Inscription : sam. 08/févr./2014 15:19

Re: Ecrire texte dans ImageGadget

Message 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:
Dernière modification par Marc56 le mer. 28/avr./2021 16:00, modifié 1 fois.
Avatar de l’utilisateur
jak64
Messages : 85
Inscription : dim. 03/mai/2020 23:16

Re: Ecrire texte dans ImageGadget

Message par jak64 »

Merci Marc de ces informations, je pense avoir compris et je regarderai la doc Microsoft.
Répondre