Page 1 sur 1
L'examen des polices améliore aussi le crossplatform
Publié : dim. 02/nov./2014 21:00
par Ollivier
Bonjour,
Si ma mémoire est bonne, verdana doit s'écrire au chargement (avec LoadFont):
"VERDANA" sur Linux
"Verdana" sur Mac
"vErdANa" sur Windows (y s'en moque de la casse)
Après, je peux me planter (comme d'hab): ça a pu changer, au point que cette subtilité, selon les OS, n'a plus d'importance.
Si elle en a encore, une requête de liste des polices ne serait pas mal.
Code : Tout sélectionner
ExamineFonts()
While NextFont()
A$ = GetFontName()
Etc...
Wend
Re: L'examen des polices améliore aussi le crossplatform
Publié : lun. 03/nov./2014 9:57
par PAPIPP
Bonjour Ollivier.
Comme cela avec FontRequester(...)
Code : Tout sélectionner
Police$="Arial" ; Police initiale (peut aussi être nulle)
TaillePolice=14 ; Taille initiale (peut aussi être nulle)
Resultat=FontRequester(Police$,TaillePolice,#PB_FontRequester_Effects)
If Resultat
Message$="Vous avez sélectionné la police suivante :"+#LF$
Message$+"Nom : "+SelectedFontName()+#LF$
Message$+"Taille : "+Str(SelectedFontSize())+#LF$
Message$+"Couleur : "+Str(SelectedFontColor())+#LF$
If SelectedFontStyle() & #PB_Font_Bold
Message$+"Gras"+#LF$
EndIf
If SelectedFontStyle() & #PB_Font_StrikeOut
Message$+"Barré"+#LF$
EndIf
If SelectedFontStyle() & #PB_Font_Underline
Message$+"Souligné"+#LF$
EndIf
Else
Message$="La sélection a été annulée."
EndIf
MessageRequester("FontRequester",Message$,#PB_MessageRequester_Ok)
A+
Re: L'examen des polices améliore aussi le crossplatform
Publié : ven. 07/nov./2014 18:41
par Ollivier
Bonjour PAPIPP,
je comprends ton code. Je te remercie pour ça, mais parfois, on a besoin de l'essentiel (la recherche cross platform de police de caractère uniquement).
Dans ton exemple, qui est une solution concrète à l'évidence, le choix de la police est conditionné dans une requête. Or, ça ne répond pas toujours à ce que l'on peut avoir besoin.
Faire l'inventaire des polices sans nécessiter un affichage immédiat, c'est ça la demande du sujet.
Cette précision ne remet en cause ni l'utilité de FontRequester() ni la pertinence de ta réponse.
Re: L'examen des polices améliore aussi le crossplatform
Publié : dim. 09/nov./2014 23:44
par PAPIPP
Bonjour à tous
Voici pour Window la possibilité d’obtenir les caractéristiques des polices installées.
Ce prg utilise une API et un callback je ne sais s’il peut être adapté à Linux et à MacOS X.
Aux spécialistes de ces deux OS de me répondre merci d’avance.
Code : Tout sélectionner
Enumeration
#Window_Main
EndEnumeration
;
Procedure EnumFontFamProc(lpelf.l, lpntm.l, FontType.l, lParam.l)
Static FontCounter.l
*lpelf.ENUMLOGFONT = lpelf
sFontType.s = ""
TrueType = #False
If FontType & #DEVICE_FONTTYPE
sFontType.s + "Device "
EndIf
If FontType & #RASTER_FONTTYPE
sFontType.s + "Raster "
EndIf
If FontType & #TRUETYPE_FONTTYPE
sFontType.s + "TrueType "
TrueType = #True
EndIf
FontHeight = *lpelf\elfLogFont\lfHeight
FontWidth = *lpelf\elfLogFont\lfWidth
FontEscapement = *lpelf\elfLogFont\lfEscapement
FontOrientation = *lpelf\elfLogFont\lfOrientation
FontWeight = *lpelf\elfLogFont\lfWeight
FontItalic = *lpelf\elfLogFont\lfItalic
FontUnderline = *lpelf\elfLogFont\lfUnderline
FontStrikeOut = *lpelf\elfLogFont\lfStrikeOut
FontCharSet = *lpelf\elfLogFont\lfCharSet
FontOutPrecision = *lpelf\elfLogFont\lfOutPrecision
FontClipPrecision = *lpelf\elfLogFont\lfClipPrecision
FontQuality = *lpelf\elfLogFont\lfQuality
FontPitchAndFamily = *lpelf\elfLogFont\lfPitchAndFamily
FontName.s=PeekS(@*lpelf\elfFullName[0])
FontStyle.s=PeekS(@*lpelf\elfStyle[0])
If TrueType
*lpntm1.NEWTEXTMETRIC = lpntm
MetricHeight = *lpntm1\tmHeight
MetricAscent = *lpntm1\tmAscent
MetricDescent = *lpntm1\tmDescent
MetricInternalLeading = *lpntm1\tmInternalLeading
MetricExternalLeading = *lpntm1\tmExternalLeading
MetricAveCharWidth = *lpntm1\tmAveCharWidth
MetricMaxCharWidth = *lpntm1\tmMaxCharWidth
MetricWeight = *lpntm1\tmWeight
MetricOverhang = *lpntm1\tmOverhang
MetricDigitizedAspectX = *lpntm1\tmDigitizedAspectX
MetricDigitizedAspectY = *lpntm1\tmDigitizedAspectY
MetricFirstChar = *lpntm1\tmFirstChar
MetricLastChar = *lpntm1\tmLastChar
MetricDefaultChar = *lpntm1\tmDefaultChar
MetricBreakChar = *lpntm1\tmBreakChar
MetricItalic = *lpntm1\tmItalic
MetricUnderlined = *lpntm1\tmUnderlined
MetricStruckOut = *lpntm1\tmStruckOut
MetricPitchAndFamily = *lpntm1\tmPitchAndFamily
MetricCharSet = *lpntm1\tmCharSet
MetricFlags = *lpntm1\ntmFlags
MetricSizeEM = *lpntm1\ntmSizeEM
MetricCellHeight = *lpntm1\ntmCellHeight
MetricAveWidth = *lpntm1\ntmAvgWidth
Else
*lpntm2.TEXTMETRIC = lpntm
MetricHeight = *lpntm2\tmHeight
MetricAscent = *lpntm2\tmAscent
MetricDescent = *lpntm2\tmDescent
MetricInternalLeading = *lpntm2\tmInternalLeading
MetricExternalLeading = *lpntm2\tmExternalLeading
MetricAveCharWidth = *lpntm2\tmAveCharWidth
MetricMaxCharWidth = *lpntm2\tmMaxCharWidth
MetricWeight = *lpntm2\tmWeight
MetricOverhang = *lpntm2\tmOverhang
MetricDigitizedAspectX = *lpntm2\tmDigitizedAspectX
MetricDigitizedAspectY = *lpntm2\tmDigitizedAspectY
MetricFirstChar = *lpntm2\tmFirstChar
MetricLastChar = *lpntm2\tmLastChar
MetricDefaultChar = *lpntm2\tmDefaultChar
MetricBreakChar = *lpntm2\tmBreakChar
MetricItalic = *lpntm2\tmItalic
MetricUnderlined = *lpntm2\tmUnderlined
MetricStruckOut = *lpntm2\tmStruckOut
MetricPitchAndFamily = *lpntm2\tmPitchAndFamily
MetricCharSet = *lpntm2\tmCharSet
EndIf
sFontAttributes.s = ""
If FontItalic
sFontAttributes + "I"
EndIf
If FontUnderline
sFontAttributes + "U"
EndIf
If FontStrikeOut
sFontAttributes + "S"
EndIf
If sFontAttributes <> ""
sFontAttributes = "(" + sFontAttributes + ")"
EndIf
If lParam
If FindString(LCase(FontName), LCase(PeekS(lParam)), 1)
Debug Str(FontCounter)+" "+FontName + Chr(10) + Str(FontWidth) + Chr(9) + Str(FontHeight) + Chr(9) + Str(FontWeight) + Chr(9) + FontStyle + " " + sFontAttributes + Chr(9) + sFontType
EndIf
Else
Debug Str(FontCounter)+" "+FontName + Chr(9) + Str(FontWidth) + Chr(9) + Str(FontHeight) + Chr(9) + Str(FontWeight) + Chr(9) + FontStyle + " " + sFontAttributes + Chr(9) + sFontType
EndIf
While WindowEvent()
Wend
FontCounter + 1
ProcedureReturn 1
EndProcedure
If OpenWindow(#Window_Main, 0, 0, 0, 0,"", #PB_Window_Invisible)
; Debug _nl+_n(SizeOf(ENUMLOGFONT))+_n(SizeOf(NEWTEXTMETRIC))+_n(SizeOf(TEXTMETRIC))
EnumFontFamilies_(GetDC_(WindowID(#Window_Main)), #Null, @EnumFontFamProc(), 0)
EndIf
End
Re: L'examen des polices améliore aussi le crossplatform
Publié : lun. 10/nov./2014 0:28
par Ollivier
Bonjour PAPIPP,
tu as dû en consacrer du temps pour ça. Je pense qu'un sujet doit être dédié à cette fonction. Ou bien il me faudra changer le titre de ce sujet dans les jours à venir, parce que là, c'est un "hors sujet" dans le sens honorable du terme.
Je doute que les linuxiens puissent consacrer autant de temps dans l'immédiat.
En tout cas, je tâcherai de regarder avec soin les perspectives que cela permet.
Sacrément bien!
Re: L'examen des polices améliore aussi le crossplatform
Publié : lun. 10/nov./2014 10:14
par PAPIPP
Je ne sais si ce programme doit être posté ici, sinon déplacer le à votre gré.
Voici le même prg avec une meilleure présentation.
1) une animation de window ( on peut s’amuser).
2) l’aperçu d’une police sélectionnée.
Code : Tout sélectionner
Enumeration
#Window_Main
#Gadget_Button
#Gadget_String
#Gadget_ListIcon
#Gadget_Image
#Image
EndEnumeration
#AW_HOR_POSITIVE = $1 ; Anime window de la gauche vers la droite. ces indicateurs peuvent être utilisés en rouleau ou en animation de diapositives
#AW_HOR_NEGATIVE = $2 ; Anime window de la droite vers la gauche.
#AW_VER_POSITIVE = $4 ; Anime window du haut vers le bas.
#AW_VER_NEGATIVE = $8 ; Anime window du bas vers le haut.
#AW_CENTER = $10 ; anime window en partant du centre
#AW_HIDE = $10000 ; Cache window.//par défaut window est activé
#AW_ACTIVATE = $20000 ; Active window.
#AW_SLIDE = $40000 ; Utilise l'animation de la diapositive. Par défaut, l'animation en rouleau est utilisé.
#AW_BLEND = $80000 ; Utilise un effet de fondu. Cet indicateur peut être utilisé que si hwnd est une fenêtre de niveau supérieur.
Procedure EnumFontFamProc(lpelf.l, lpntm.l, FontType.l, lParam.l)
Static FontCounter.l
*lpelf.ENUMLOGFONT = lpelf
sFontType.s = ""
TrueType = #False
If FontType & #DEVICE_FONTTYPE
sFontType.s + "Device "
EndIf
If FontType & #RASTER_FONTTYPE
sFontType.s + "Raster "
EndIf
If FontType & #TRUETYPE_FONTTYPE
sFontType.s + "TrueType "
TrueType = #True
EndIf
FontHeight = *lpelf\elfLogFont\lfHeight
FontWidth = *lpelf\elfLogFont\lfWidth
FontEscapement = *lpelf\elfLogFont\lfEscapement
FontOrientation = *lpelf\elfLogFont\lfOrientation
FontWeight = *lpelf\elfLogFont\lfWeight
FontItalic = *lpelf\elfLogFont\lfItalic
FontUnderline = *lpelf\elfLogFont\lfUnderline
FontStrikeOut = *lpelf\elfLogFont\lfStrikeOut
FontCharSet = *lpelf\elfLogFont\lfCharSet
FontOutPrecision = *lpelf\elfLogFont\lfOutPrecision
FontClipPrecision = *lpelf\elfLogFont\lfClipPrecision
FontQuality = *lpelf\elfLogFont\lfQuality
FontPitchAndFamily = *lpelf\elfLogFont\lfPitchAndFamily
FontName.s=PeekS(@*lpelf\elfFullName[0])
FontStyle.s=PeekS(@*lpelf\elfStyle[0])
If TrueType
*lpntm1.NEWTEXTMETRIC = lpntm
MetricHeight = *lpntm1\tmHeight
MetricAscent = *lpntm1\tmAscent
MetricDescent = *lpntm1\tmDescent
MetricInternalLeading = *lpntm1\tmInternalLeading
MetricExternalLeading = *lpntm1\tmExternalLeading
MetricAveCharWidth = *lpntm1\tmAveCharWidth
MetricMaxCharWidth = *lpntm1\tmMaxCharWidth
MetricWeight = *lpntm1\tmWeight
MetricOverhang = *lpntm1\tmOverhang
MetricDigitizedAspectX = *lpntm1\tmDigitizedAspectX
MetricDigitizedAspectY = *lpntm1\tmDigitizedAspectY
MetricFirstChar = *lpntm1\tmFirstChar
MetricLastChar = *lpntm1\tmLastChar
MetricDefaultChar = *lpntm1\tmDefaultChar
MetricBreakChar = *lpntm1\tmBreakChar
MetricItalic = *lpntm1\tmItalic
MetricUnderlined = *lpntm1\tmUnderlined
MetricStruckOut = *lpntm1\tmStruckOut
MetricPitchAndFamily = *lpntm1\tmPitchAndFamily
MetricCharSet = *lpntm1\tmCharSet
MetricFlags = *lpntm1\ntmFlags
MetricSizeEM = *lpntm1\ntmSizeEM
MetricCellHeight = *lpntm1\ntmCellHeight
MetricAveWidth = *lpntm1\ntmAvgWidth
Else
*lpntm2.TEXTMETRIC = lpntm
MetricHeight = *lpntm2\tmHeight
MetricAscent = *lpntm2\tmAscent
MetricDescent = *lpntm2\tmDescent
MetricInternalLeading = *lpntm2\tmInternalLeading
MetricExternalLeading = *lpntm2\tmExternalLeading
MetricAveCharWidth = *lpntm2\tmAveCharWidth
MetricMaxCharWidth = *lpntm2\tmMaxCharWidth
MetricWeight = *lpntm2\tmWeight
MetricOverhang = *lpntm2\tmOverhang
MetricDigitizedAspectX = *lpntm2\tmDigitizedAspectX
MetricDigitizedAspectY = *lpntm2\tmDigitizedAspectY
MetricFirstChar = *lpntm2\tmFirstChar
MetricLastChar = *lpntm2\tmLastChar
MetricDefaultChar = *lpntm2\tmDefaultChar
MetricBreakChar = *lpntm2\tmBreakChar
MetricItalic = *lpntm2\tmItalic
MetricUnderlined = *lpntm2\tmUnderlined
MetricStruckOut = *lpntm2\tmStruckOut
MetricPitchAndFamily = *lpntm2\tmPitchAndFamily
MetricCharSet = *lpntm2\tmCharSet
EndIf
sFontAttributes.s = ""
If FontItalic
sFontAttributes + "I"
EndIf
If FontUnderline
sFontAttributes + "U"
EndIf
If FontStrikeOut
sFontAttributes + "S"
EndIf
If sFontAttributes <> ""
sFontAttributes = "(" + sFontAttributes + ")"
EndIf
If lParam
If FindString(LCase(FontName), LCase(PeekS(lParam)), 1)
AddGadgetItem(#Gadget_ListIcon, -1, FontName + Chr(10) + Str(FontWidth) + Chr(10) + Str(FontHeight) + Chr(10) + Str(FontWeight) + Chr(10) + FontStyle + " " + sFontAttributes + Chr(10) + sFontType)
EndIf
Else
AddGadgetItem(#Gadget_ListIcon, -1, FontName + Chr(10) + Str(FontWidth) + Chr(10) + Str(FontHeight) + Chr(10) + Str(FontWeight) + Chr(10) + FontStyle + " " + sFontAttributes + Chr(10) + sFontType)
EndIf
While WindowEvent()
Wend
FontCounter + 1
ProcedureReturn 1
EndProcedure
WindowWidth = 640
WindowHeight = 480
WindowTitle.s = "Polices installées sur Window. Cliquez sur une police pour la voir"
ImageWidth = WindowWidth - 20
ImageHeight = 120
If OpenWindow(#Window_Main, 0, 0, WindowWidth, WindowHeight, WindowTitle, #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget | #PB_Window_TitleBar | #PB_Window_ScreenCentered | #PB_Window_Invisible)
; AnimateWindow_(WindowID(#Window_Main), 1500, #AW_BLEND | #AW_ACTIVATE)
; AnimateWindow_(WindowID(#Window_Main), 1500, #AW_CENTER | #AW_ACTIVATE)
AnimateWindow_(WindowID(#Window_Main), 1500, #AW_VER_POSITIVE|#AW_HOR_POSITIVE | #AW_ACTIVATE)
AddKeyboardShortcut(#Window_Main, #PB_Shortcut_Escape, #PB_Shortcut_Escape)
AddKeyboardShortcut(#Window_Main, #PB_Shortcut_Return, #Gadget_Button)
ListIconGadget(#Gadget_ListIcon, 10, 40, WindowWidth - 20, WindowHeight - 180, "Name", 240)
AddGadgetColumn(#Gadget_ListIcon, 1, "Largeur", 50)
AddGadgetColumn(#Gadget_ListIcon, 2, "Hauteur", 50)
AddGadgetColumn(#Gadget_ListIcon, 3, "Poids", 50)
AddGadgetColumn(#Gadget_ListIcon, 4, "Style & Attr.", 80)
AddGadgetColumn(#Gadget_ListIcon, 5, "Type", 70)
EnumFontFamilies_(GetDC_(WindowID(#Window_Main)), #Null, @EnumFontFamProc(), 0)
Quit = #False
Repeat
WindowEvent = WindowEvent()
EventType = EventType()
Select WindowEvent
Case #PB_Event_CloseWindow
Quit = #True
Case #PB_Event_Menu
Select EventMenu()
Case #PB_Shortcut_Escape
Quit = #True
EndSelect
Case #PB_Event_Gadget
Select EventGadget()
Case #Gadget_ListIcon
FontName.s = GetGadgetItemText(#Gadget_ListIcon, GetGadgetState(#Gadget_ListIcon), 0)
FontSize.l = Val(GetGadgetItemText(#Gadget_ListIcon, GetGadgetState(#Gadget_ListIcon), 1))
; FontHeight.l = Val(GetGadgetItemText(#Gadget_ListIcon, GetGadgetState(#Gadget_ListIcon), 2))
FontID1 =LoadFont(#PB_Any, FontName, 20, #PB_Font_HighQuality)
SetGadgetFont(#PB_Default, FontID( FontID1))
TextGadget(#Window_Main, 20, WindowHeight - 130, WindowWidth-20, 45, FONTName)
TextGadget(#Window_Main+1, 20, WindowHeight - 130+50, WindowWidth-20, 45,"1233 abcd ABCD àçéèêù")
EndSelect
Case #PB_Event_SizeWindow
; Debug _nl+_n(#PB_Event_SizeWindow)
EndSelect
Until Quit
AnimateWindow_(WindowID(#Window_Main), 1000, #AW_BLEND | #AW_HIDE)
EndIf
End
Re: L'examen des polices améliore aussi le crossplatform
Publié : lun. 10/nov./2014 15:35
par Micoute
Bonjour PAPIPP, merci pour ce partage, c'est vraiment de la belle ouvrage !
Re: L'examen des polices améliore aussi le crossplatform
Publié : lun. 16/mars/2015 17:31
par Kwai chang caine
C'est beau

, merci pour le partage PAPPIP

Re: L'examen des polices améliore aussi le crossplatform
Publié : lun. 16/mars/2015 17:47
par SPH
Te fait pas avoir, c'est un bot qui a repondu !
Re: L'examen des polices améliore aussi le crossplatform
Publié : lun. 16/mars/2015 18:34
par Kwai chang caine
J'ai vu mon canard..tu me prends pour un lapin de trois semaines
Moi je parlais du code de PAPIPP.... qui me "Botte"
D'un autre coté les BOT ont au moins cet avantage de faire ressortir certains vieux codes qu'on avait zapper, et du coups pouvoir remercier les copains

à titre "posthume"
Comme quoi on peut même trouver du bonheur dans la merde....tout est une question de phylosophie ...suffit de chercher

Re: L'examen des polices améliore aussi le crossplatform
Publié : ven. 26/oct./2018 21:36
par Ollivier
@PAPIPP
Je me suis permis d'établir un lien depuis une question du forum US.
https://www.purebasic.fr/english/viewto ... 13&t=71630 vers cette page pour que tes codes source puissent être partagés.
Olliv
Re: L'examen des polices améliore aussi le crossplatform
Publié : ven. 26/oct./2018 22:12
par Shadow
Super code merci
