Je calcul mes Strings... et mes TexteGadgets

Programmation d'applications complexes
Avatar de l’utilisateur
MLD
Messages : 1103
Inscription : jeu. 05/févr./2009 17:58
Localisation : Bretagne

Je calcul mes Strings... et mes TexteGadgets

Message par MLD »

Bonjour a tous
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
Dernière modification par MLD le mer. 06/mars/2019 16:45, modifié 1 fois.
Avatar de l’utilisateur
MLD
Messages : 1103
Inscription : jeu. 05/févr./2009 17:58
Localisation : Bretagne

Re: Je calcul mes Strings... et mes TexteGadgets

Message par MLD »

Toutes mes excuses. Petit Bug. Code rectifié ci dessus
Avatar de l’utilisateur
Micoute
Messages : 2522
Inscription : dim. 02/oct./2011 16:17
Localisation : 35520 La Mézière

Re: Je calcul mes Strings... et mes TexteGadgets

Message par Micoute »

Merci MLD pour le partage, c'est une idée formidable que tu as eue là, j'adore et j'adopte.
Microsoft Windows 10 Famille 64 bits : Carte mère : ASRock 970 Extreme3 R2.0 : Carte Graphique NVIDIA GeForce RTX 3080 : Processeur AMD FX 6300 6 cœurs 12 threads 3,50 GHz PB 5.73 PB 6.00 LTS (x64)
Un homme doit être poli, mais il doit aussi être libre !
Avatar de l’utilisateur
MLD
Messages : 1103
Inscription : jeu. 05/févr./2009 17:58
Localisation : Bretagne

Re: Je calcul mes Strings... et mes TexteGadgets

Message par MLD »

Merci Micoute
Petite précision Si vous mettez un cadre au gadget il faut 5 pixels de plus en hauteur.
Avatar de l’utilisateur
Kwai chang caine
Messages : 6962
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Re: Je calcul mes Strings... et mes TexteGadgets

Message par Kwai chang caine »

Sympa comme outil :wink:
Merci du partage 8)
ImageLe bonheur est une route...
Pas une destination

PureBasic Forum Officiel - Site PureBasic
Avatar de l’utilisateur
MLD
Messages : 1103
Inscription : jeu. 05/févr./2009 17:58
Localisation : Bretagne

Re: Je calcul mes Strings... et mes TexteGadgets

Message par MLD »

Merci KCC
Mouillard
Messages : 77
Inscription : mer. 13/sept./2017 14:35
Localisation : Picardie (Somme)

Re: Je calcul mes Strings... et mes TexteGadgets

Message par Mouillard »

Bonsoir à tous. Merci MLD d'avoir partagé ce code, c'est une très bonne idée... très fonctionnel ... 8O :idea:
Avatar de l’utilisateur
MLD
Messages : 1103
Inscription : jeu. 05/févr./2009 17:58
Localisation : Bretagne

Re: Je calcul mes Strings... et mes TexteGadgets

Message par MLD »

@Mouillard
Merci J'espère que cela te faciliteras la programmation.
Répondre