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