Page 1 sur 1
[Résolu] Images et texte sur un écran graphique ensemble
Publié : mar. 27/mai/2014 11:46
par Micoute
Bonjour à tous,
je viens vers vous parce je rame pour trouver une solution que je n'ai pas trouvée sur les forum PB.
Mon programme est sensé afficher des images et du texte sur un écran graphique, mais le problème, c'est que j'ai soit les images ou alors le texte, mais jamais les deux ensembles !
Et comme je sais qu'il y en a qui ont déjà la réponse, c'est pour cela que je m'adresse à vous les mémoires vivantes du PureBasic !
Je vous en remercie tous par anticipation.
Michel
Re: Images et texte sur un écran graphique ensemble
Publié : mar. 27/mai/2014 12:17
par falsam
Bibliothéque Canvas ? 2D ? ... ?
Re: Images et texte sur un écran graphique ensemble
Publié : mar. 27/mai/2014 12:52
par Fig
Un bout de code surtout, parce que je ne vois pas où est le problème de mixer graphique et texte, tout est une question d'ordre d'affichage...
Re: Images et texte sur un écran graphique ensemble
Publié : mar. 27/mai/2014 14:46
par Micoute
Un petit bout de code bien sûr
Code : Tout sélectionner
Enumeration
#Fenetre_principale
#f_sortie
#f_aucune
#Image
EndEnumeration
ExamineDesktops()
Global Largeur_Ecran = GetSystemMetrics_(#SM_CXSCREEN)
Global Hauteur_Ecran = GetSystemMetrics_(#SM_CYSCREEN) -20
;programme principal
If InitSprite() = 0
MessageRequester("ERREUR","L'initialisation à échoué",#MB_ICONERROR)
EndIf
If InitKeyboard() = 0
MessageRequester("ERREUR","L'initialisation du clavier a échoué",#MB_ICONERROR)
EndIf
Global Police =FontID(LoadFont(#PB_Any, "Arial Rounded MT", 20, #PB_Font_Bold | #PB_Font_Italic))
Global Police2 =FontID(LoadFont(#PB_Any, "Brush Script MT", 40, #PB_Font_Italic))
ExamineDesktops()
Global x,y,z,Texte.s
Global FichierImageLogo$ = #PB_Compiler_FilePath + "Acronyme.png"
Largeur_Ecran-5 : Hauteur_Ecran-10
Global H_Fenetre_principale = OpenWindow(#Fenetre_principale, 0, 0, Largeur_Ecran, Hauteur_Ecran, "", #PB_Window_SystemMenu )
OpenWindowedScreen(H_Fenetre_principale,0,0,Largeur_Ecran,Hauteur_Ecran,0,0,0,#PB_Screen_SmartSynchronization)
ClearScreen($303030)
;StartDrawing(ScreenOutput())
;DrawingFont(Police2)
;DrawingMode(#PB_2DDrawing_Transparent)
; appel des procédures
y + 18 : x =(Largeur_Ecran/2)-150
;Texte = "ACRONYME"
;For i = x To x + 5
; Y + 1
; DrawText(i, y, Texte, $8A8A8A, $303030)
;Next
;DrawText(i, y, Texte, $FFFFFF, $303030)
;création et affichage de l'image
UsePNGImageDecoder()
Resultat = CreateImage(#Image,375,93)
;
If Resultat
Resultat2 = LoadImage(#Image, FichierImageLogo$)
If Resultat2
ImageGadget(#Image, X,Y,375,93, ImageID(#Image))
EndIf
EndIf
;fin de traitement de l'image
StartDrawing(ScreenOutput())
DrawingFont(Police2)
DrawingMode(#PB_2DDrawing_Transparent)
DrawingFont(Police)
...
DrawText(x,y, ...
StopDrawing()
Global action.i = #f_aucune
Repeat
Global Evenement = WindowEvent()
Select Evenement
Case #PB_Event_CloseWindow
action = #f_sortie
Case 0
ExamineKeyboard()
If KeyboardPushed(#PB_Key_All)
action = #f_sortie
EndIf
FlipBuffers()
EndSelect
Until action = #f_sortie
CloseScreen()
CloseWindow(#Fenetre_principale)
de toute façon, c'est un code généraliste, c'est juste pour apprendre une nouvelle approche de Purebasic et je suis sûr que c'est faisable, je vous remercie tous encore une fois !
Re: Images et texte sur un écran graphique ensemble
Publié : mar. 27/mai/2014 15:11
par falsam
Tu ne peux pas avoir un imagegadget qui est comme identification d'image son gadget.
tu ne peux pas positionner un ImageGadget dans un OpenWindowedScreen
Re: Images et texte sur un écran graphique ensemble
Publié : mar. 27/mai/2014 15:20
par falsam
un exemple d'insertion de texte et d'image avec l'utilisation des sprites
Code : Tout sélectionner
Enumeration Font
#Font
EndEnumeration
Enumeration Window
#MainForm
EndEnumeration
Enumeration Sprite
#Logo
#Text
EndEnumeration
Global Width = 500, Height = 500
If InitSprite() = 0 Or InitKeyboard() = 0 Or InitMouse() = 0 And InitSound() = 0
MessageRequester("Error", "Sprite system can't be initialized", 0)
End
EndIf
If OpenWindow(#mainform, 0, 0, Width, Height, "Texte & Image", #PB_Window_SystemMenu|#PB_Window_ScreenCentered)
LoadFont(#font, "Arial", 25)
If OpenWindowedScreen(WindowID(#mainform), 0, 0, Width, Height)
;Texte
CreateSprite(#Text, 200, 40)
StartDrawing(SpriteOutput(#Text))
Box(0, 0, 200, 40, RGB(255, 255, 255))
DrawingFont(FontID(#Font))
DrawText(0, 0, "Hello Micoute", RGB(222, 184, 135), RGB(255, 255, 255))
StopDrawing()
;Image
LoadSprite(#Logo, #PB_Compiler_Home+"examples\sources\data\PureBasic.bmp")
EndIf
EndIf
Repeat
Repeat
Event = WindowEvent()
Select event
Case #PB_Event_CloseWindow
End
EndSelect
Until event=0
FlipBuffers()
ClearScreen(RGB(255, 255, 255))
DisplaySprite(#Logo, 200, 200)
DisplaySprite(#Text, 150, 300)
ExamineKeyboard()
Until KeyboardPushed(#PB_Key_Escape)
Re: Images et texte sur un écran graphique ensemble
Publié : mar. 27/mai/2014 15:23
par MLD
@falsam
Tu ma devancé

Re: Images et texte sur un écran graphique ensemble
Publié : mar. 27/mai/2014 16:50
par Micoute
Un grand merci à falsam qui m'a sorti de ma galère, c'est tout simplement prodigieux, il y avait longtemps que je cherchais à faire ce genre d'exercice.
Bonjour en passant à mon voisin de région, je veux dire, ce cher MLD !
Ce qui ne signifie pas que je dédaigne les autres !
Re: Images et texte sur un écran graphique ensemble
Publié : mar. 27/mai/2014 17:51
par Fig
Falsam affiche sur un sprite puis l'affiche mais tu peux évidemment afficher directement sur l'écran ton texte avec startdrawing(screenoutput()): drawtext():stopdrawing() dans ta boucle principale.
Re: Images et texte sur un écran graphique ensemble
Publié : mar. 27/mai/2014 18:08
par Micoute
Merci Fig, c'est toujours bon à savoir !
Re: Images et texte sur un écran graphique ensemble
Publié : mar. 27/mai/2014 20:07
par falsam
Fig a écrit :Falsam affiche sur un sprite puis l'affiche mais tu peux évidemment afficher directement sur l'écran ton texte
J'aurais pu effectivement.
L'avantage du sprite même si c'est du texte, est que tu en fais ce que tu veux (
ou presque)
Code : Tout sélectionner
Enumeration Font
#Font
EndEnumeration
Enumeration Window
#MainForm
EndEnumeration
Enumeration Sprite
#Logo
#Text1
#Text2
#Text3
EndEnumeration
Global Width = 500, Height = 500
If InitSprite() = 0 Or InitKeyboard() = 0 Or InitMouse() = 0 And InitSound() = 0
MessageRequester("Error", "Sprite system can't be initialized", 0)
End
EndIf
If OpenWindow(#mainform, 0, 0, Width, Height, "Texte & Image", #PB_Window_SystemMenu|#PB_Window_ScreenCentered)
LoadFont(#font, "Arial", 25)
If OpenWindowedScreen(WindowID(#mainform), 0, 0, Width, Height)
;Text 1
CreateSprite(#Text1, 200, 40)
StartDrawing(SpriteOutput(#Text1))
Box(0, 0, 200, 40, RGB(255, 255, 255))
DrawingFont(FontID(#Font))
DrawText(0, 0, "Hello Micoute", RGB(222, 184, 135), RGB(255, 255, 255))
StopDrawing()
;Image
LoadSprite(#Logo, #PB_Compiler_Home+"examples\sources\data\PureBasic.bmp")
;Text 2
CopySprite(#Text1, #Text2) ;copie du sprite
ZoomSprite(#Text2, 400, 80) ;Zoom
RotateSprite(#Text2, 90, #PB_Absolute)
;Text 3
CopySprite(#Text1, #Text3) ;copie du sprite
ZoomSprite(#Text3, 100, 40) ;Zoom
y=99
EndIf
EndIf
Repeat
Repeat
Event = WindowEvent()
Select event
Case #PB_Event_CloseWindow
End
EndSelect
Until event=0
FlipBuffers()
ClearScreen(RGB(255, 255, 255))
DisplaySprite(#Logo, 200, 200)
DisplaySprite(#Text1, 150, 300)
DisplaySprite(#Text2, -150, 50) ;Affichage
If y=99 : Sens=1: EndIf
If y=401 : Sens=-1 : EndIf
y=y+(1*Sens)
RotateSprite(#Text3, 1, #PB_Relative)
DisplaySprite(#Text3, 390, y)
ExamineKeyboard()
Until KeyboardPushed(#PB_Key_Escape)
Re: [Résolu] Images et texte sur un écran graphique ensemble
Publié : mer. 28/mai/2014 9:07
par Fig
Un autre avantage du "sprite-texte" c'est la rapidité d'affichage qui est plus grande si tu as beaucoup de texte. (ton texte est bitmap donc plus rapide à afficher alors que la fonction drawtext est relativement lente: font, couleur, espace entre les caractères, traitement de chaque caractère l'un après l'autre etc...)
Un inconvénient: si ton texte change souvent, il faut effacer et modifier le sprite à chaque fois... Autant afficher le texte directement sur l'écran.
Re: [Résolu] Images et texte sur un écran graphique ensemble
Publié : mer. 28/mai/2014 12:35
par Micoute
Un grand merci à vous deux, c'est vraiment magnifique tout ce qu'on peut faire avec PB, J'ignorais ou alors j'avais oublié qu'on pouvait faire tant de chose avec les sprites.
J'adore !!!