Je pige pas les fontes / tailles de fontes

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Ollivier
Messages : 4197
Inscription : ven. 29/juin/2007 17:50
Localisation : Encore ?
Contact :

Re: Je pige pas les fontes / tailles de fontes

Message par Ollivier »

J'en profite pour crachouiller sur Falsam, en étayant Micoute, qui utilise "W".

Effectivement, Micoute, "W" est la lettre la plus large. Et TextWidth("W") offre la largeur maximum d'une lettre, voire, de la table ASCII 8 bits. Très pertinent donc.

Mais, effectivement, Djes souligne l'idée de se faire sa propre fonte. Et c'est vraiment bien de faire sa propre sauce.

Sympa, l'alignement de brochettes de cons que nous sommes à se retrouver un peu, le temps d'orbiter autour d'un petit amas d'idées...
Avatar de l’utilisateur
Naheulf
Messages : 193
Inscription : dim. 10/mars/2013 22:22
Localisation : France

Re: Je pige pas les fontes / tailles de fontes

Message par Naheulf »

Pour la largeur, TextWidth() prends une chaine en paramètre. On peut donc lui passer "Une chaine de caractères complète." pour avoir encore un peu plus de précision ;)
Enfin, à en croire ce que je vois dans notepad++, certains changements de taille de caractères n'influent que sur la largeur ou la hauteur...
Avatar de l’utilisateur
Zorro
Messages : 2186
Inscription : mar. 31/mai/2016 9:06

Re: Je pige pas les fontes / tailles de fontes

Message par Zorro »

j'ai indiqué a Dr Floyd sur son site

un moyen de ne pas trop s'embeter avec les fontes ..
je rappel que son probleme n'est pas lié aux fontes sur Gadgets...

mais aux fonte sur support DirectX (Screen,windowedScreen ) , car dans ce cas precis
l'option de la compilation "DPI Aware" ne marche pas !

certain ordinateur (monitor ou carte grah,ou version de DirectX , je sais pas) ne semble pas fonctionner comme tout le monde

et qu'un text Lambda , peut tres bien s'afficher sur 90% des ordi , puis sur le reste, afficher trop Gros !!

la solution que je preconise, c'est d'utiliser une Image ou un Sprite , et ecrire dessus !
au lieu d'ecrire directement sur la surface d'un Screen ....

cela semble stabiliser le probleme , car l'affichage sur une image ou un Sprite est un context qui ne semble pas changer
quelques soit le mode d'affichage ....
une image qui fait 320x200 pixels, continue a faire cette taille sur tout les ordis PC de la terre ...

en quelque sorte en faisant ainsi , on "Pixelise" le texte , une fonte meme Vectoriel , deviendra une fonte "Pixelisé"
avec ces cotes liées a l'image ou le sprite ....

voici une version du code que je lui ai donné ... (ici la version utilisant une image )

Code : Tout sélectionner

Enumeration
		#font
		#win
		#bouton
		#sprite1
		#numero_ligne
EndEnumeration
Declare CreateLineText(win,num,txt.s,coul)
Declare  WriteLineText(num,x,y)

If InitSprite() = 0
		MessageRequester("Erreur", "Impossible d'ouvrir l'écran & l'environnement nécessaire aux sprites !", 0)
		End
EndIf
If LoadFont(#font,"Comic sans Ms",30,#BOLD_FONTTYPE)
Else
		MessageRequester("erreur" ,"fonte pas chargée")
EndIf

If OpenWindow(#win, 0, 0, 320, 200, "Un écran dans une fenêtre...", #PB_Window_SystemMenu | #PB_Window_ScreenCentered| #PB_Window_SizeGadget )
		rez_x=WindowWidth(#win)-5 ; on recup la resolution de la fenetre
		rez_y=WindowHeight(#win)-5 
		redimenssionnement_auto=#True
		If OpenWindowedScreen(WindowID(#win), 0, 0, rez_x, rez_y,redimenssionnement_auto,1,1,1)
				; ******************* creation d'un ligne de text ********************
				CreateLineText(#win,#numero_ligne,"Purebasic Power",rgb(255,255,0))	
				; ***************************************************************
				; ************* Le sprite carré qui bouge ****************************
				CreateSprite(#sprite1, 20, 20)
				If StartDrawing(SpriteOutput(#sprite1))
						Box(0, 0, 20, 20, RGB(255, 0, 155))
						Box(5, 5, 10, 10, RGB(155, 0, 255))
						StopDrawing() ;>
				EndIf;|
				Else
						MessageRequester("Erreur", "Impossible d'ouvrir un écran dans la fenêtre!", 0)
				End ;|
				EndIf
		Endif
		; ***********************************************************************
		directionx = 2 :directiony=2
		Repeat ; boucle Event
				Event = WaitWindowEvent(2)
				Select Event
						Case #PB_Event_SizeWindow ; en cas de redimenssionnement de la fenetre		
						
						Case #PB_Event_CloseWindow
								End
				EndSelect
				; ******************* Affiche la ligne de text ************************
				StartDrawing(ScreenOutput())
						WriteLineText(#numero_ligne,5,50) ; affiche la ligne de text
				StopDrawing()
				; *****************************************************************
			
				x + directionx
				y + directiony
				
				If x >= (screenWidth()-20) : directionx = -2 : EndIf
				IF y>= (screenHeight() -20) :Directiony = -2 :Endif
				If x <= 0   : directionx = -directionx : EndIf
				If y <= 0:directiony = -directiony :Endif
					DisplaySprite(#Sprite1, x, y) ;affiche le sprite carré
				FlipBuffers()
				ClearScreen(rgb(255,255,255))
		ForEver
		
		; ********************* Zone des Procedures *************************
		Procedure CreateLineText(win,num,txt.s,coul)			
				;By Dobro				
				if Isimage(num)
						FreeImage(num)
				Endif
				; on dessine dans l'ecran la phrase a ecrire
				; le but est de recuperer sa taille en pixel 
				StartDrawing(ScreenOutput())
						DrawingFont(Fontid(#font))
						larg_text=TextWidth(txt.s)
						haut_text=TextHeight(txt.s)
				StopDrawing()
				; on a la taille en pixel , on creer l'image pour correspondre a la phrase
				CreateImage(num,larg_text,haut_text)
				
				; maintenant on peut ecrire le text dans l'image qui viens d'etre adapté en taille 
				StartDrawing(imageOutput(num))				
				DrawingFont(Fontid(#font))
						DrawText( 1,1,txt.s,coul)
				StopDrawing()			
		EndProcedure
		Procedure WriteLineText(num,x,y)		
				;By Dobro
				DrawImage(imageID(num),x,y)				; on dessine simplement notre image, qui contient notre text
		EndProcedure
		
		
; Epb

note que j'ai laissé la possibilité de redimensionner la fenetre ....

vu que Dr Floyd ecrit surtout des programmes de jeux 2D (faible resolution )
la methode, devrai bien fonctionner
Répondre