la hauteur d'une chaine de caractère
la hauteur d'une chaine de caractère
TextLength c'est sympa mais comme fonction, mais j'aimerais savoir si elle a une homologue pour la hauteur de la chaine de caractère, dans le cas contraire une solution cosntructive pour la trouver sa me depannerais bien ^^ . merci
-
- Messages : 1500
- Inscription : jeu. 25/mars/2004 11:23
- Localisation : Sophia Antipolis (Nice)
- Contact :
Bah en fait, il doit falloir récupérer la taille de la police utilisée, non ?
Webmestre de Basic-univers
Participez à son extension: ajouter vos programmes et partagez vos codes !
Participez à son extension: ajouter vos programmes et partagez vos codes !
Si ça peux t'aider, c'est pas pour les dessins, c'est pour les gadgets mais bon ça peux aider
Mais c'est vrai qu'avec la taille de caractères et en connaissant la police ça devrait le faire
Mais c'est vrai qu'avec la taille de caractères et en connaissant la police ça devrait le faire

ProcedureDLL GetGadgetTextSize(Gadget.l,Type.l,String.s) ; Retourne la dimension du texte (Type = #TEXTLENGTH ou Type=#TEXTHEIGHT)
#TEXTLENGTH = 0
#TEXTHEIGHT = 1
hGadget = GadgetID (GadgetNr)
If hGadget
hFont = SendMessage_ (hGadget, #WM_GETFONT ,0,0)
hDC = GetDC_ (hGadget)
If hFont
SelectObject_ (hDC,hFont)
EndIf
If GetTextExtentPoint32_ (hDC,String, Len (String),@TextSize.SIZE)
If Type = #TEXTLENGTH ; Text-Length
RetVal = TextSize\cx
ElseIf Type = #TEXTHEIGHT ; Text-Height
RetVal = TextSize\cy
EndIf
EndIf
ReleaseDC_ (hGadget,hDC)
EndIf
ProcedureReturn RetVal
EndProcedure
J'ai retrouvé un autre code sur le forum anglais

CreateImage (0, 200, 200)
If OpenWindow (0, 0, 0, 200, 200, #PB_Window_SystemMenu | #PB_Window_ScreenCentered , "Test" ) And CreateGadgetList ( WindowID ())
ImageGadget (0, 0, 0, 200, 200, 0)
hDc = StartDrawing ( ImageOutput ())
If hDc
myText$ = "Bonjour, utilisateur de Purebasic!" + #CRLF$ + "Text Multiligne" + #CRLF$ + "utilisant API DrawText_()"
tRect.RECt
SetTextAlign_ (hDc, #TA_NOUPDATECP )
SetBkMode_ (hDc, #TRANSPARENT )
SetTextColor_ (hDc, #Yellow )
; Calculate the required rect size for out text
DrawText_ (hDc, myText$, Len (myText$), @tRect, #DT_CALCRECT )
; Center the text
textWidth = tRect\right - tRect\left
textHeight = tRect\bottom - tRect\top
tRect\left = GadgetX (0) + ( GadgetWidth (0) - textWidth) /2
tRect\right = tRect\left + textWidth
tRect\top = GadgetY (0) + ( GadgetHeight (0) - textHeight) /2
tRect\bottom = tRect\top + textHeight
; Draw the text
DrawText_ (hDc, myText$, Len (myText$), @tRect, #DT_NOCLIP | #DT_CENTER | #DT_WORDBREAK )
StopDrawing () ; This is absolutely needed when the drawing operations are finished !!! Never forget it !
; Put image into ImageGadget
SetGadgetState (0, UseImage (0))
EndIf
Repeat : EventID = WaitWindowEvent () : Until EventID = #PB_Event_CloseWindow
EndIf
Autre possibilité (à partir du device context, d'après El Choni je crois) :
Par example :
Code : Tout sélectionner
Procedure GetTextHeight(hdc.l)
Protected tm.TEXTMETRIC, PrevMapMode.l
PrevMapMode = SetMapMode_(hdc, #MM_TEXT)
GetTextMetrics_(hdc, @tm)
If PrevMapMode
SetMapMode_(hdc, PrevMapMode)
EndIf
ProcedureReturn tm\tmHeight
EndProcedure
Code : Tout sélectionner
hDC = StartDrawing(ImageOutput())
DrawingMode(1)
Box(0, 0, ButtonW, ButtonH, ButtonBackColor)
FrontColor(Red(ButtonTextColor), Green(ButtonTextColor), Blue(ButtonTextColor))
MyTextHeight.l = GetTextHeight(hDC) ; <-------------------
; etc...
-
- Messages : 1500
- Inscription : jeu. 25/mars/2004 11:23
- Localisation : Sophia Antipolis (Nice)
- Contact :
C plus chaud ca par contre, car faudrait regarder sur toute la longueur de la chaine pour être sûr de ne pas louper un "L" ou un "P"...
Webmestre de Basic-univers
Participez à son extension: ajouter vos programmes et partagez vos codes !
Participez à son extension: ajouter vos programmes et partagez vos codes !
-
- Messages : 1500
- Inscription : jeu. 25/mars/2004 11:23
- Localisation : Sophia Antipolis (Nice)
- Contact :
En effet
Mais avec un L et un P

Mais avec un L et un P

Webmestre de Basic-univers
Participez à son extension: ajouter vos programmes et partagez vos codes !
Participez à son extension: ajouter vos programmes et partagez vos codes !
-
- Messages : 4312
- Inscription : mer. 28/janv./2004 20:58
- Localisation : Clermont ferrand OU Olsztyn
- Contact :
J'ai fait comme ça moi en m'inpirant de ce qui a été dit ci dessus :
C'est prévu pour etre utilisé hors d'un dessin
C'est prévu pour etre utilisé hors d'un dessin
Code : Tout sélectionner
; Auteur : le Soldat Inconnu
; Version de PB : 3.90
;
; Explication du programme :
; Police de Windows
;- Hauteur de la police
Procedure GetTextHeight(GetTextHeightFontID.l)
Protected Image, Dimension.SIZE, HDC
Image = CreateImage(#PB_Any, 1, 1)
HDC = StartDrawing(ImageOutput())
DrawingFont(GetTextHeightFontID)
GetTextExtentPoint32_(HDC, "o", 1, @Dimension.SIZE)
StopDrawing()
FreeImage(Image)
ProcedureReturn Dimension\cy
EndProcedure
;- Police par défaut de windows
FontID = GetStockObject_(#DEFAULT_GUI_FONT)
; Création de la fenêtre et de la GadgetList
If OpenWindow(0, 0, 0, 300, 300, #PB_Window_SystemMenu | #PB_Window_ScreenCentered | #PB_Window_MinimizeGadget, "Test") = 0 Or CreateGadgetList(WindowID()) = 0
End
EndIf
TextGadget(0, 0, 0, 300, 30, "Hauteur du texte = " + Str(GetTextHeight(FontID)))
FontID2 = LoadFont(1, "Tahoma", 20, #PB_Font_HighQuality)
TextGadget(1, 0, 30, 300, 50, "Hauteur du texte = " + Str(GetTextHeight(FontID2)))
SetGadgetFont(1, FontID2)
Repeat
Event = WaitWindowEvent()
Until Event = #PB_EventCloseWindow
Je ne suis pas à moitié Polonais mais ma moitié est polonaise ... Vous avez suivi ?
[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]
[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]
-
- Messages : 1500
- Inscription : jeu. 25/mars/2004 11:23
- Localisation : Sophia Antipolis (Nice)
- Contact :
@Soldat Inconnu
J'ai testé ton code et je trouve des résultats bizarres :
Font1 : 9 (pixels avec Paint), 13 (avec le TextGadget)
Font2 : 19 (pixels avec Paint), 33 (avec le TextGadget)
Normal ?
J'ai testé ton code et je trouve des résultats bizarres :
Font1 : 9 (pixels avec Paint), 13 (avec le TextGadget)
Font2 : 19 (pixels avec Paint), 33 (avec le TextGadget)
Normal ?
Webmestre de Basic-univers
Participez à son extension: ajouter vos programmes et partagez vos codes !
Participez à son extension: ajouter vos programmes et partagez vos codes !