Получить ширину и высота строки текста в пикселях

Предыдущая тема Следующая тема Перейти вниз

Получить ширину и высота строки текста в пикселях

Сообщение  TQPO в Чт Апр 24, 2014 4:49 pm

Нужно получать высоту и ширину строки текста в пикселях для указанного шрифта и параметров шрифта
Строка естественно для какого-нибудь текстового гаджета

Вроде как нужно использовать WinApi функцию GetTextExtentPoint32

Нашел такие примеры :

Freebasic
Но тут находит для шрифта по умолчанию
Код:
#include "windows.bi"

 dim DC as HDC
 dim cDC as HDC
 dim hfTmp as HFONT
 dim Text as String
 dim sz as SIZE

 Text = "Привет, мир!"

 DC = GetDC(0)
 cDC = CreateCompatibleDC(DC)
 ReleaseDC(0, DC)
 hfTmp = SelectObject(cDC, GetStockObject(DEFAULT_GUI_FONT))
GetTextExtentPoint32(cDC, StrPtr(Text), len(Text), @sz)
 SelectObject(cDC, hfTmp)
 DeleteDC(cDC)

 Text = str(sz.cx)+!"\n"+str(sz.cy)
 MessageBox(0, Text, "Textabma?e", MB_OK)

И еще
PureBasic
вроде уже ближе, обращается к конкретному элементу
Код:
hDC = GetDC_(GadgetID(#String_1))  
hFont = SendMessage_(GadgetID(#String_1),#WM_GETFONT,0,0)
If hFont And hDC  
   SelectObject_(hDC,hFont)  
EndIf  
GetTextExtentPoint32_(hDC, GetGadgetText(#String_1), 1, lpSize.SIZE)

Сам в WinApi не силен, прошу помощи


Последний раз редактировалось: TQPO (Пт Апр 25, 2014 1:55 pm), всего редактировалось 1 раз(а)

TQPO

Сообщения : 4
Дата регистрации : 2014-04-24

Посмотреть профиль

Вернуться к началу Перейти вниз

Re: Получить ширину и высота строки текста в пикселях

Сообщение  TQPO в Пт Апр 25, 2014 1:51 pm

В итоге допер сам, правда, самый примитивный вариант, возможно, кому-то пригодиться

Код:
#include "windows.bi"

Dim Text As String = "Привет, мир!"
Dim aStr As SIZE


Function _StringSizeEx (ByVal sText As String, ByVal iSize As Integer, ByVal iWeight As Integer, _
   ByVal iAttrib As Integer, ByVal sName As String, ByVal iQuality As Integer) As SIZE

   Dim hDC as HDC
   Dim hOldFont as HDC
   Dim hFont as HFONT
   Dim tSIZE as SIZE
   

   hDC = GetDC(0)
   hFont = CreateFont(-GetDeviceCaps(hDC, 90) * iSize / 72, 0, 0, 0, iWeight, _
   0,0,0,DEFAULT_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, iQuality, 0, sName)

   hOldFont = SelectObject(hDC, hFont)

   GetTextExtentPoint32(hDC, StrPtr(sText), Len(sText), @tSIZE)
   SelectObject(hDC, hOldFont)
   DeleteObject(hFont)
   
   Function =  tSIZE
End Function


aStr = _StringSizeEx(Text, 8,400,0,"Arial", 2)
MessageBox(0, Str(aStr.cx)+!"\n"+Str(aStr.cy), "Text", MB_OK)

TQPO

Сообщения : 4
Дата регистрации : 2014-04-24

Посмотреть профиль

Вернуться к началу Перейти вниз

Предыдущая тема Следующая тема Вернуться к началу


 
Права доступа к этому форуму:
Вы не можете отвечать на сообщения