PureBasic

Forums PureBasic
Nous sommes le Lun 17/Juin/2019 21:52

Heures au format UTC + 1 heure




Poster un nouveau sujet Répondre au sujet  [ 8 messages ] 
Auteur Message
 Sujet du message: Je calcul mes Strings... et mes TexteGadgets
MessagePosté: Mer 06/Mar/2019 14:38 
Hors ligne

Inscription: Jeu 05/Fév/2009 17:58
Messages: 878
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:
;*** 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 édition par MLD le Mer 06/Mar/2019 16:45, édité 1 fois.

Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Je calcul mes Strings... et mes TexteGadgets
MessagePosté: Mer 06/Mar/2019 15:09 
Hors ligne

Inscription: Jeu 05/Fév/2009 17:58
Messages: 878
Toutes mes excuses. Petit Bug. Code rectifié ci dessus


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Je calcul mes Strings... et mes TexteGadgets
MessagePosté: Mer 06/Mar/2019 15:28 
Hors ligne
Avatar de l’utilisateur

Inscription: Dim 02/Oct/2011 16:17
Messages: 2134
Localisation: 50200 Coutances
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 GT 640 : Processeur AMD FX 6300 6 cœurs 12 threads 3,50 GHz PB 5.62, 5.70 LTS
Un homme doit être poli, mais il doit aussi être libre !


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Je calcul mes Strings... et mes TexteGadgets
MessagePosté: Mer 06/Mar/2019 16:37 
Hors ligne

Inscription: Jeu 05/Fév/2009 17:58
Messages: 878
Merci Micoute
Petite précision Si vous mettez un cadre au gadget il faut 5 pixels de plus en hauteur.


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Je calcul mes Strings... et mes TexteGadgets
MessagePosté: Jeu 07/Mar/2019 9:58 
Hors ligne
Avatar de l’utilisateur

Inscription: Sam 23/Sep/2006 18:32
Messages: 6626
Localisation: Isere
Sympa comme outil :wink:
Merci du partage 8)

_________________
ImageLe bonheur est une route...
Pas une destination

PureBasic Forum Officiel - Site PureBasic


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Je calcul mes Strings... et mes TexteGadgets
MessagePosté: Jeu 07/Mar/2019 10:21 
Hors ligne

Inscription: Jeu 05/Fév/2009 17:58
Messages: 878
Merci KCC


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Je calcul mes Strings... et mes TexteGadgets
MessagePosté: Jeu 07/Mar/2019 19:42 
Hors ligne

Inscription: Mer 13/Sep/2017 14:35
Messages: 60
Localisation: Picardie (Somme)
Bonsoir à tous. Merci MLD d'avoir partagé ce code, c'est une très bonne idée... très fonctionnel ... 8O :idea:


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Je calcul mes Strings... et mes TexteGadgets
MessagePosté: Ven 08/Mar/2019 10:03 
Hors ligne

Inscription: Jeu 05/Fév/2009 17:58
Messages: 878
@Mouillard
Merci J'espère que cela te faciliteras la programmation.


Haut
 Profil  
Répondre en citant le message  
Afficher les messages postés depuis:  Trier par  
Poster un nouveau sujet Répondre au sujet  [ 8 messages ] 

Heures au format UTC + 1 heure


Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 2 invités


Vous ne pouvez pas poster de nouveaux sujets
Vous ne pouvez pas répondre aux sujets
Vous ne pouvez pas éditer vos messages
Vous ne pouvez pas supprimer vos messages

Rechercher:
Aller à:  

 


Powered by phpBB © 2008 phpBB Group | Traduction par: phpBB-fr.com
subSilver+ theme by Canver Software, sponsor Sanal Modifiye