Un petit outil sans prétention, pour ceux qui comme moi tatonnent pour calculer la largeur et la hauteur des StringGadgets et TexteGadgets en fonction d'une police de caractères.
Cet outil permet:
1° De choisir et tester une police
2° De définir la largeur et la hauteur du gadget
3° De copier dans le presse papier le code, pour l'inclure dans vos programmes
Les améliorations seront bien venues
Code : Tout sélectionner
;*** Calcul la largueur, hauteur d'un StringGadget ou TexteGadget ****
;*** en fonction des paramètres d'une police choisie. Window seulement****
;*** MLD le 06/03/2019. PB 5.70 LTS(X86) Cochez la case Enable DPI aware***
;*** Utilisation libre ***
#FP = 1:#List1 = 2:#Eticlist1 = 3:#List2 = 4:#Eticlist2 = 5:#frame1 = 6:#CheckBox1 =7:#CheckBox2 =8:#CheckBox3 =9:#CheckBox4 =10:#CheckBox5 =11
#EticChec = 12:#frame2 = 20:#texttest = 21:#textnbp = 22:#frame3 = 23:#CheckBoxTG =24:#CheckBoxSG =25:#Eticpara = 26:#Stringpara = 27
#CheckBoxmagnin =28:#CheckBoxmagseul =29:#CheckBoxchif =30:#frame4 = 31:#texres1 = 32:#texres2 = 33:#texres3 = 34:#texres4 = 35
#texres5 = 36:#texcodgad = 37:#texres6 = 38:#editgad = 39:#texpp = 40:#CheckBoxpp1 =41:#CheckBoxpp2 =42:#BTpp = 43:#BTraz = 44:#BTstop = 45
#canvas = 50
Global NewList NomFont.s()
Global Lggad
Global Htgad
Global FontID1 = LoadFont(60,"Tahoma",12,#PB_Font_Bold)
Global FontID5 = LoadFont(61,"Tahoma",10)
Declare EnumFontFamExProc(*lpelfe.ENUMLOGFONTEX,*lpntme.NEWTEXTMETRICEX,FontType,lParam)
Declare testPolice(Ft$,St1,St2,st3,st4,st5)
Procedure EnumFontFamExProc(*lpelfe.ENUMLOGFONTEX,*lpntme.NEWTEXTMETRICEX,FontType,lParam)
NomFont$ = PeekS(@*lpelfe\elfFullName)
Select FontType
Case #TRUETYPE_FONTTYPE
Type$ = "[TT] "
EndSelect
dp =0
ForEach NomFont()
If NomFont() = Type$ + NomFont$:dp=1:EndIf
Next
If dp =0
AddElement(NomFont())
NomFont() = Type$ + NomFont$ :Type$ = ""
EndIf
ProcedureReturn #True
EndProcedure
Procedure VisuEmumFont()
lf.LOGFONT
lf\lfCharset = #DEFAULT_CHARSET
hdc = GetDC_(WindowID(1))
EnumFontFamiliesEx_(hdc,lf,@EnumFontFamExProc(),0,0)
ReleaseDC_(WindowID(1),hdc)
SortList( NomFont.s(),#PB_Sort_Ascending)
ForEach NomFont()
AddGadgetItem(2,-1,NomFont())
Next
EndProcedure
Procedure testPolice(Ft$,st1,St2,st3,st4,st5)
FontID2 = LoadFont(101,Ft$,14,st1|St2|st3|st4|st5)
SetGadgetFont(21,FontID2)
EndProcedure
Procedure LH(Ft$,tp,st1,st2,st3,st4,st5)
tw = 0:th = 0
FontID3 = LoadFont(102,Ft$,tp,st1|st2|st3|st4|st5)
For t= 28 To 30
If GetGadgetState(t) = #PB_Checkbox_Checked:Break:EndIf
Next
Select t
Case 28
a$ ="ABwbikMplR"
Case 29
a$ ="ABWJLIPYFS"
Case 30
a$ ="0123456789"
EndSelect
StartDrawing(CanvasOutput(50))
DrawingFont(FontID3)
DrawText(50, 80,a$,$0, 0)
If GetGadgetState(24) = #PB_Checkbox_Checked ;texteGad
tw = ((TextWidth(a$)/10)* Val(GetGadgetText(27))) + 3
th = TextHeight(a$) - 4
texteGad$ = "TextGadget(#Gadget, X, Y,"+ Str(tw)+"," + Str(th)+", Texte$)"
SetGadgetText(37,texteGad$)
EndIf
If GetGadgetState(25) = #PB_Checkbox_Checked ;StringGad
tw = ((TextWidth(a$)/10)* Val(GetGadgetText(27))) + 3
th = TextHeight(a$)
stringGad$ = "StringGadget(#Gadget, X, Y,"+ Str(tw)+"," + Str(th)+", Texte$)"
SetGadgetText(37,stringGad$)
EndIf
SetGadgetText(33,Str(tw)):SetGadgetText(35,Str(th))
copfont$ = "FontID = LoadFont((#Police," + Chr(34) + Ft$+ Chr(34) + "," + Str(tp)+ "," + Str(st1) + "|" + Str(st2)+ "|" + Str(st3)+ "|" + Str(st4)+ "|" + Str(st5)+ ")"
copfont2$ ="SetGadgetFont(#Gadget,FontID)"
ClearGadgetItems(39)
AddGadgetItem(39,-1,copfont$)
AddGadgetItem(39,-1,copfont2$)
StopDrawing()
EndProcedure
Procedure raz ()
SetGadgetText(2,"[TT] Tahoma"):SetGadgetText(4,"14"):SetGadgetText(27,"1")
SetGadgetText(4,"14"):SetGadgetText(27,"1")
SetGadgetState(7,#PB_Checkbox_Unchecked):SetGadgetState(8,#PB_Checkbox_Unchecked)
SetGadgetState(9,#PB_Checkbox_Unchecked):SetGadgetState(10,#PB_Checkbox_Unchecked):SetGadgetState(11,#PB_Checkbox_Unchecked)
SetGadgetState(24,#PB_Checkbox_Checked):SetGadgetState(25,#PB_Checkbox_Unchecked)
SetGadgetState(28,#PB_Checkbox_Checked):SetGadgetState(29,#PB_Checkbox_Unchecked):SetGadgetState(30,#PB_Checkbox_Unchecked)
SetGadgetState(41,#PB_Checkbox_Checked):SetGadgetState(42,#PB_Checkbox_Unchecked)
EndProcedure
OpenWindow(1,0,0,1200,550,"Calcul Strings et Textes",#WS_OVERLAPPEDWINDOW | 1)
StickyWindow(1,1)
CanvasGadget(50,0,0,1000,500):HideGadget(50,1)
ListViewGadget(2,10,40,400,460)
TextGadget(3,20,10,130,20,"Choix polices")
ListViewGadget(4, 420,40,80,460)
For z = 6 To 70
AddGadgetItem(4,-1,Str(z))
Next
TextGadget(5,425,10,80,20,"Taille:")
VisuEmumFont()
SetGadgetText(2,"[TT] Tahoma");sélectionne
SendMessage_(GadgetID(2), #LB_SETTOPINDEX,GetGadgetState(2), 0);montre la sélection
SetGadgetText(4,"14");sélectionne
FrameGadget(6,510,40,180,460,"",#PB_Frame_Flat)
CheckBoxGadget(7,520,80,100,25,"Gras",#PB_CheckBox_Center)
CheckBoxGadget(8,520,160,100,25,"Italique",#PB_CheckBox_Center)
CheckBoxGadget(9,520,240,100,25,"Souligné",#PB_CheckBox_Center)
CheckBoxGadget(10,520,320,100,25,"Barré",#PB_CheckBox_Center)
CheckBoxGadget(11,520,400,150,25,"Haute qualité",#PB_CheckBox_Center)
TextGadget(12,530,10,130,20,"Style:")
FrameGadget(20,700,10,490,80,"Test police: taille 14")
TextGadget(21,710,35,470,50,"AZuytmwxc1230TRF45 ЯЍ ΩΣ WX")
testPolice("Tahoma",st1,st2,st3,st4,st5)
TextGadget(22,250,515,180,20,"Nb polices: "+ Str(CountGadgetItems(2)))
FrameGadget(23,700,110,490,130,"Paramètres")
CheckBoxGadget(24,760,135,150,25,"TextGadget")
SetGadgetState(24,#PB_Checkbox_Checked)
CheckBoxGadget(25,1000,135,150,25,"StringGadget")
TextGadget(26,740,175,250,20,"Nombre de lettres ou signes")
StringGadget(27,1000,172,130,25,"1",#PB_String_Numeric|#ES_CENTER)
SendMessage_(GadgetID(27),#EM_LIMITTEXT,3,0)
CheckBoxGadget(28,710,205,135,25,"Maj/minus")
SetGadgetState(28,#PB_Checkbox_Checked)
CheckBoxGadget(29,845,205,165,25,"Maj seulement")
CheckBoxGadget(30,1020,205,165,25,"Chiffre seulement")
FrameGadget(31,700,255,490,245,"Résultats (pixels)")
TextGadget(32,720,280,80,20,"Largeur:")
TextGadget(33,800,280,130,25,"",#PB_Text_Border|#PB_Text_Center)
SetGadgetColor(33,#PB_Gadget_BackColor,$90EE90)
TextGadget(34,960,280,80,20,"Hauteur:")
TextGadget(35,1050,280,130,25,"",#PB_Text_Border|#PB_Text_Center)
SetGadgetColor(35,#PB_Gadget_BackColor,$90EE90)
TextGadget(36,720,320,120,20,"Code Gadget")
TextGadget(37,720,345,460,25,"",#PB_Text_Border)
SetGadgetColor(37,#PB_Gadget_BackColor,$90EE90)
TextGadget(38,720,380,120,20,"Code Police")
EditorGadget(39,720,410,460,50)
SetGadgetColor(39,#PB_Gadget_BackColor,$90EE90)
SetGadgetFont(39,FontID5)
TextGadget(40,720,470,120,20,"Presse papier:")
CheckBoxGadget(41,850,470,120,25,"Gadget seul")
SetGadgetState(41,#PB_Checkbox_Checked)
CheckBoxGadget(42,990,470,160,25,"Gadget + police")
ButtonGadget(43,840,505,150,43,"Presse papier")
SetGadgetFont(43,FontID1)
ButtonGadget(44,990,505,100,43,"R A Z")
ButtonGadget(45,1090,505,100,43,"Stop")
If Left(GetGadgetText(2),3) = "[TT"
Ft$ = Mid(GetGadgetText(2),7,Len(GetGadgetText(2)));Si TT enlève le type
Else
Ft$ = GetGadgetText(2)
EndIf
tp =Val(GetGadgetText(4))
LH(Ft$,tp,st1,St2,st3,st4,st5)
For x = 2 To 45
If x <> 39 :SetGadgetFont(x,FontID1):EndIf
Next
Repeat
Event = WaitWindowEvent()
If Event = #PB_Event_Gadget
Select EventGadget()
Case 2;liste Police
If Left(GetGadgetText(2),3) = "[TT"
Ft$ = Mid(GetGadgetText(2),7,Len(GetGadgetText(2)));Si TT enlève le type
Else
Ft$ = GetGadgetText(2)
EndIf
testPolice(Ft$,st1,St2,st3,st4,st5)
LH(Ft$,tp,st1,St2,st3,st4,st5)
Case 4;liste taille
tp = Val(GetGadgetText(4))
LH(Ft$,tp,st1,St2,st3,st4,st5)
Case 7;gras
If GetGadgetState(7) = #PB_Checkbox_Checked
st1 = #PB_Font_Bold
Else
st1 = 0
EndIf
LH(Ft$,tp,st1,St2,st3,st4,st5)
testPolice(Ft$,st1,St2,st3,st4,st5)
Case 8;Italique
If GetGadgetState(8) = #PB_Checkbox_Checked
st2 = #PB_Font_Italic
Else
st2 = 0
EndIf
testPolice(Ft$,st1,St2,st3,st4,st5)
LH(Ft$,tp,st1,St2,st3,st4,st5)
Case 9;Souligné
If GetGadgetState(9) = #PB_Checkbox_Checked
st3 = #PB_Font_Underline
Else
st3 = 0
EndIf
testPolice(Ft$,st1,St2,st3,st4,st5)
LH(Ft$,tp,st1,St2,st3,st4,st5)
Case 10;Barré
If GetGadgetState(10) = #PB_Checkbox_Checked
st4 = #PB_Font_StrikeOut
Else
st4 = 0
EndIf
testPolice(Ft$,st1,St2,st3,st4,st5)
LH(Ft$,tp,st1,St2,st3,st4,st5)
Case 11;Haute qualité
If GetGadgetState(11) = #PB_Checkbox_Checked
st5 = #PB_Font_HighQuality
Else
st5 = 0
EndIf
testPolice(Ft$,st1,St2,st3,st4,st5)
LH(Ft$,tp,st1,St2,st3,st4,st5)
Case 24;check textGad
SetGadgetState(24,#PB_Checkbox_Checked)
If GetGadgetState(24) = #PB_Checkbox_Checked:SetGadgetState(25,#PB_Checkbox_Unchecked):EndIf
LH(Ft$,tp,st1,St2,st3,st4,st5)
Case 25;check stringGad
SetGadgetState(25,#PB_Checkbox_Checked)
If GetGadgetState(25) = #PB_Checkbox_Checked:SetGadgetState(24,#PB_Checkbox_Unchecked):EndIf
LH(Ft$,tp,st1,St2,st3,st4,st5)
Case 27;string
Select EventType()
Case #PB_EventType_Change
LH(Ft$,tp,st1,St2,st3,st4,st5)
EndSelect
Case 28;check Maj/minus
SetGadgetState(28,#PB_Checkbox_Checked)
If GetGadgetState(28) = #PB_Checkbox_Checked
SetGadgetState(29,#PB_Checkbox_Unchecked)
SetGadgetState(30,#PB_Checkbox_Unchecked)
EndIf
LH(Ft$,tp,st1,St2,st3,st4,st5)
Case 29;check Maj/minus
SetGadgetState(29,#PB_Checkbox_Checked)
If GetGadgetState(29) = #PB_Checkbox_Checked
SetGadgetState(28,#PB_Checkbox_Unchecked)
SetGadgetState(30,#PB_Checkbox_Unchecked)
EndIf
LH(Ft$,tp,st1,St2,st3,st4,st5)
Case 30;check chiffre
SetGadgetState(30,#PB_Checkbox_Checked)
If GetGadgetState(30) = #PB_Checkbox_Checked
SetGadgetState(28,#PB_Checkbox_Unchecked)
SetGadgetState(29,#PB_Checkbox_Unchecked)
EndIf
LH(Ft$,tp,st1,St2,st3,st4,st5)
Case 41;check pp gad seul
SetGadgetState(41,#PB_Checkbox_Checked)
If GetGadgetState(41) = #PB_Checkbox_Checked:SetGadgetState(42,#PB_Checkbox_Unchecked):EndIf
Case 42;check pp gad + police
SetGadgetState(42,#PB_Checkbox_Checked)
If GetGadgetState(42) = #PB_Checkbox_Checked:SetGadgetState(41,#PB_Checkbox_Unchecked):EndIf
Case 43;PP
ClearClipboard()
If GetGadgetState(41) = #PB_Checkbox_Checked:pp$ = GetGadgetText(37):EndIf
If GetGadgetState(42) = #PB_Checkbox_Checked: pp$ = GetGadgetText(37)+ Chr (13) + Chr (10) + GetGadgetText(39):EndIf
SetClipboardText(pp$)
Case 44;raz
raz()
st1= 0:st2 = 0:st3= 0:st4 = 0:st5 = 0
If Left(GetGadgetText(2),3) = "[TT"
Ft$ = Mid(GetGadgetText(2),7,Len(GetGadgetText(2)));Si TT enlève le type
Else
Ft$ = GetGadgetText(2)
EndIf
tp =Val(GetGadgetText(4))
LH(Ft$,tp,st1,St2,st3,st4,st5)
testPolice(Ft$,st1,St2,st3,st4,st5)
Case 45;bt stop
CloseWindow(1)
End
EndSelect
EndIf
Until Event = #PB_Event_CloseWindow
End