Hogyan tudom autóittal megállapítani, hogy hány pixel egy karakter hossza?
Nem autoitezem ezért nemtudom.
És ne akard hogy keressek erre valamit a doksiban mert ez nem kérdés volna hanem kérés.
Ez programozási nyelvtől független kérdés.
Függ a használt karakterkészlettől, nem fix szélességű (szóval nem monospace) betűtípusnál az aktuális betűtől (egy i betű keskenyebb mint egy m), a betű magasságától, stílusától (egy félkövér betű vastagabb), stb.., És akkor szavak esetén ott a betűk közötti térköz, több soros szövegnél a sorköz...
A _API_GetTextExtentPoint32 parancs kiszámolja, hogy milyen széles és milyen magas lesz a megjelent szöveg.
Itt van rá egy példa:
Egyébként nem elég az egyes betűk szélességeit lekérdezni és összeadni ahhoz, hogy megtudd egy szöveg hosszát, mert van egy un. kerning fogalom is, ami (pongyolán fogalmazva) azt mondja meg, hogy az egyes betűpárok között mennyi a távolság.
Pl az "VA" szélessége lehet hogy kisebb, mint a "V" és az "A" szélességének összege, mert az "A" becsúszhat (egyes betűtipusoknál) a "V" alá. Szóval az a biztos, ha egyben kéred le egy szöveg szélességét.
Köszi! Nem is gondoltam volna hogy már ennyire profi a helyzet, hogy két betű között a távolság nulla vagy aká negatív is lehet.
Azonban van egy gond:
nem találja a
A3LWinAPI.au3
file-t.
Mi lehet ennek az oka? A winyót átfésültem, nincs rajta más alköyvtárban se. Honnan lehet ezt letölteni?
érdekes, a _API_GetTextExtentPoint32 autoit -ra rákeresve kiadja a _WinAPI_GetTextExtentPoint32 parancsiot a azzal már műküdik:
#include <GUIConstantsEx.au3>
#include <MsgBoxConstants.au3>
#include <WinAPI.au3>
#include <WindowsConstants.au3>
Example()
Func Example()
Local $hGUI = GUICreate("String height & width.")
GUISetState(@SW_SHOW, $hGUI)
Local $sText = "This is some text" ; The text we want to find the height & width of.
Local $aStringDimension = GetStringDimensions($hGUI, $sText) ; Retrieve a 1 dimensional array with $aArray[0] = width & $aArray[1] = height.
MsgBox($MB_SYSTEMMODAL, "String Height and Width", 'The height and width of the string "' & $sText & '" is:' & @CRLF & _
"Width: " & $aStringDimension[0] & @CRLF & _
"Height: " & $aStringDimension[1] & @CRLF)
Do
Until GUIGetMsg() = $GUI_EVENT_CLOSE
EndFunc ;==>Example
Func GetStringDimensions($hWnd, $sText)
Local $hDC = _WinAPI_GetDC($hWnd) ; Get the device context handle of the current window.
Local $hFont = _SendMessage($hWnd, $WM_GETFONT) ; Retrieve the font with which the control is currently drawing its text.
Local $hSelectObject = _WinAPI_SelectObject($hDC, $hFont) ; Select the object of the context device.
Local $tSIZE = _WinAPI_GetTextExtentPoint32($hDC, $sText) ; Retrieve the height & width of a string.
_WinAPI_SelectObject($hDC, $hSelectObject)
_WinAPI_ReleaseDC($hWnd, $hDC) ; Release the device context.
Local $aReturn[2] = [DllStructGetData($tSIZE, 1), DllStructGetData($tSIZE, 2)] ; Set an array with the width & height of the string.
Return $aReturn
EndFunc ;==>GetStringDimensions
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!