Ecrire dans une OPENWINDOW

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
sospel
Messages : 56
Inscription : ven. 05/déc./2008 21:47

Ecrire dans une OPENWINDOW

Message par sospel »

Bonjour :)

j'ai écrit un mini-programme d'essai en ouvrant une console- avec OPENCONSOLE(...) - et en utilisant PRINTN() pour y écrire divers textes. Le tout en ayant "coloré" la console en jaune et les textes en bleu .

Bon, maintenant, j'ai ouvert une fenêtre jaune - avec OPENWINDOW(...) et SETWINDOWCOLOR(...) - et je voudrais y écrire les mêmes textes en bleu. Mais je n'arrive pas à trouver par quel mot-clé remplacer "PRINTN()" :(

Si quelqu'un(e) sait comment faire, je suis preneur !
Merci par avance
Cordialement
SosPel
Avatar de l’utilisateur
case
Messages : 1527
Inscription : lun. 10/sept./2007 11:13

Re: Ecrire dans une OPENWINDOW

Message par case »

bonjour, tu ne peux pas écrire avec une openwindow directement(ah si on peux mais c'est pas le mieux), tu dois soit utiliser des gadgets tels que textgadget ou un canvas gadget/openwindowedscreen dans le quel tu pourra dessiner avec drawtext par exemple .
Dernière modification par case le jeu. 16/sept./2021 19:17, modifié 1 fois.
ImageImage
Mesa
Messages : 1097
Inscription : mer. 14/sept./2011 16:59

Re: Ecrire dans une OPENWINDOW

Message par Mesa »

Apparemment, il y a un bug avec SetWindowColor()

Code : Tout sélectionner

#Fenetre = 0

If OpenWindow(#Fenetre, 0, 0, 220, 100, "Exemple...", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
	
	; 	SetWindowColor(#Fenetre,#Yellow) ; BUG si on décommente
	
	If StartDrawing(WindowOutput(#Fenetre))
		DrawingMode(#PB_2DDrawing_Transparent)
		DrawText(10,10,"ok",#Blue)
		StopDrawing()
	EndIf
	
	Repeat
		Event = WaitWindowEvent()
		
	Until Event = #PB_Event_CloseWindow
EndIf

que l'on peut résoudre comme ça:

Code : Tout sélectionner

#Fenetre = 0

If OpenWindow(#Fenetre, 0, 0, 220, 100, "Exemple...", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
	
	SetWindowColor(#Fenetre,#Yellow)

	
	Repeat
		
		If StartDrawing(WindowOutput(#Fenetre))
			DrawingMode(#PB_2DDrawing_Transparent)
			DrawText(10,10,"ok",#Blue)
			StopDrawing()
		EndIf
		
		Event = WaitWindowEvent()
		
	Until Event = #PB_Event_CloseWindow
EndIf
Il faut eviter d'ecrire dans la fenêtre à cause du "repaint", il vaut mieux utiliser un gadget fait pour cela, le imagegadget:

Code : Tout sélectionner

If OpenWindow(0, 0, 0, 200, 200, "DrawText Exemple", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
    If CreateImage(0, 200, 200) And StartDrawing(ImageOutput(0))
      DrawingMode(#PB_2DDrawing_Transparent)
      Box(0, 0, 200, 200, RGB(255, 255, 205))
      For i = 1 To 30
        DrawText(Random(200), Random(200), "Hello World!", RGB(Random(255), Random(255), Random(255)))
      Next i
      StopDrawing() 
      ImageGadget(0, 0, 0, 200, 200, ImageID(0))
    EndIf
    
    Repeat
      Event = WaitWindowEvent()
    Until Event = #PB_Event_CloseWindow
  EndIf


M.
sospel
Messages : 56
Inscription : ven. 05/déc./2008 21:47

Re: Ecrire dans une OPENWINDOW

Message par sospel »

@case et @Mesa

merci à vous deux pour vos réponses :)

Bon, j'ai bien compris qu'il n'y a pas d'équivalent à "PRINTN()" dans une "OPENWINDOW()" qui , elle, m'a l'air d'être utile pour de courtes phrases ou pour des objets graphiques.
Or je manipule surtout beaucoup de résultats de calculs et la "CONSOLE()" les accepte sans sourciller. Par contre je la percevais comme esthétiquement moins "souple" qu'une "OPENWINDOW()", mais ça n'a pas l'air d'être le cas . Je vais donc en rester à mes listes de calculs "consolées" ;)
En tous cas, merci de m'avoir appris quelques rudiments d'utilisation des "OPENWINDOW()" !
Cordialement,
SosPel
Mesa
Messages : 1097
Inscription : mer. 14/sept./2011 16:59

Re: Ecrire dans une OPENWINDOW

Message par Mesa »

C'est dommage, parce qu'avec une petite procedure maison, on y arrive assez facilement:

Code : Tout sélectionner

#Fenetre = 0
#Image = 0
#ImageGadget = 0

w=800
h=600
CoulFond=RGB(255, 255, 205);jaune

Global CoulText = #Blue
Global x=5, y=5

Procedure PrintN2(Text$)
	marge = 3
	StartDrawing(ImageOutput(#Image))
	DrawingMode(#PB_2DDrawing_Transparent)
	DrawText(x, y, Text$, CoulText)
	y=y+TextHeight("Wg")+marge
	StopDrawing()
	SetGadgetState(#ImageGadget,ImageID(#Image))
	
EndProcedure

If OpenWindow(#Fenetre, 0, 0, w, h, "DrawText Exemple", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
	
	If CreateImage(#Image, w, h) And StartDrawing(ImageOutput(#Image))
		DrawingMode(#PB_2DDrawing_Transparent)
		Box(0, 0, w, h, CoulFond); Fond jaune
		StopDrawing() 
		ImageGadget(#ImageGadget, 0, 0, w, h, ImageID(#Image))
	EndIf
	
	
	PrintN2("Text1")
	PrintN2("Text2")
	PrintN2("Text3")
	
	Repeat
		Event = WaitWindowEvent()
	Until Event = #PB_Event_CloseWindow
EndIf


M.
sospel
Messages : 56
Inscription : ven. 05/déc./2008 21:47

Re: Ecrire dans une OPENWINDOW

Message par sospel »

@Mesa

Ahhh ??? là, ton utilitaire ressemble bien à ce que je souhaitais ;)

Je vais bien regarder sa faisabilité "pratique" pour mes sorties de calculs car, a priori, ça doit pouvoir se faire.
Si ça colle, j'en ferai un usage immodéré et je t'en informerai !
En tous cas, merci pour ta contribution :)
Cordialement,
Sospel
Mesa
Messages : 1097
Inscription : mer. 14/sept./2011 16:59

Re: Ecrire dans une OPENWINDOW

Message par Mesa »

Et s'il y a beaucoup de ligne à afficher alors il faut prendre un autre gadget, qui est fait pour cela et c'est encore plus simple.

Code : Tout sélectionner

#Fenetre = 0
#EditorGadget = 0

w=800
h=600
CoulFond=RGB(255, 255, 205);jaune
CoulText = #Blue
x=5
y=5

Procedure PrintN2(Text$)
	AddGadgetItem(#EditorGadget,-1,Text$)
EndProcedure

If OpenWindow(#Fenetre, 0, 0, w, h, "EditorGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
	
	EditorGadget(#EditorGadget, x, y, w-x-x, h-y-y , #PB_Editor_WordWrap)
	SetGadgetColor(#EditorGadget, #PB_Gadget_FrontColor, CoulText)
	SetGadgetColor(#EditorGadget, #PB_Gadget_BackColor, CoulFond) 
	
	
	
	
	PrintN2("Text1")
	PrintN2("Text2")
	PrintN2("Text3")
	
	For i=4 To 200
		PrintN2("Text"+Str(i))
	Next i
	
	
	
	Repeat
		Event = WaitWindowEvent()
	Until Event = #PB_Event_CloseWindow
EndIf


sospel
Messages : 56
Inscription : ven. 05/déc./2008 21:47

Re: Ecrire dans une OPENWINDOW

Message par sospel »

@ Mesa

Bon, là, c'est encore mieux !
Encore un post, et je m'attends à une "OPENWINDOW" en couleurs, multi-textes et multi-graphes en 3D :D
Plaisanterie mise à part, j'ai maintenant la solution pour remplacer par ta procédure mes fenêtres "consolées" . Et en prime, j'apprends plein de choses sur les "Gadjets".
Encore merci
Cordialement
SosPel
Répondre