purebasic.info
http://purebasic.info/phpBB3ex/

Как вычислить ширину и высоту текста в пикселях
http://purebasic.info/phpBB3ex/viewtopic.php?f=8&t=1532
Страница 3 из 3

Автор:  destiny [ Пн авг 24, 2015 10:21 pm ]
Заголовок сообщения:  Re: Как вычислить ширину и высоту текста в пикселях

Пётр писал(а):
Изменил код выше. Теперь без WinAPI.


Спасибо большое! Благ тебе!
Пытаюсь разобраться, кручу-верчу.

Пётр писал(а):
Шрифт по умолчанию формирует более крупные, "жирные" символы.

По крайнему короткому коду, я понял так, что это относится к винапи? Потому как первая строка с простым TextGadget у меня привычным тонким шрифтом, вторая более крупным и толстым.
Тогда не понимаю, почему ПБ использует правильный тонкий-мелкий шрифт, но при запросе размеров шрифта считает от другого, более крупного и толстого? Это Фред накосячил, получается? Ведь перед TextGadget никаких указаний на изменение шрифта нет, следовательно шрифт дефолтный, тогда и TextWidth/Height должны отталкиваться от дефолтного... Какая-то ерунда выходит.

Автор:  Никита Однороб [ Пн авг 24, 2015 10:23 pm ]
Заголовок сообщения:  Re: Как вычислить ширину и высоту текста в пикселях

TextGadget использует стандартный шрифт системы. А вот стандартный шрифт для рисования пурик берет какой-то левый (как сказал Петр, полужирный какой-то)
Изображение

Автор:  Пётр [ Пн авг 24, 2015 10:29 pm ]
Заголовок сообщения:  Re: Как вычислить ширину и высоту текста в пикселях

Никита Однороб писал(а):
А вот стандартный шрифт для рисования пурик берет какой-то левый
Он не левый. Этот шрифт используется системой если явно не задан какой-либо шрифт. Пример выше с CreateWindowEx это показывает.
Если в контроле созданном с помощью CreateWindowEx изменить шрифт на по умолчанию для окон, то он станет привычным.
Код:
1
2
3
4
5
6
7
8
9
10
11
12
Enumeration
  #Str_1
EndEnumeration
 
If OpenWindow(0, 0, 0, 400, 400, "Text pixel size detection",  #PB_Window_SystemMenu | #PB_Window_ScreenCentered | #PB_Window_TitleBar )
  TextGadget(#Str_1, 8, 8, 192, 13, "0123456789")
 
  h=CreateWindowEx_(0, "Static", "0123456789 ", #WS_CHILD|#WS_VISIBLE, 8, 30, 192, 16, WindowID(0), 0, 0, 0)
  SendMessage_(h, #WM_SETFONT, GetStockObject_(#DEFAULT_GUI_FONT), 0)
 
  Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
EndIf



destiny писал(а):
Ведь перед TextGadget никаких указаний на изменение шрифта нет, следовательно шрифт дефолтный.
Не совсем так. Шрифт задается внутри функции TextGadget. Там есть что-то типа.
Код:
1
SendMessage_(hWnd, #WM_SETFONT, GetStockObject_(#DEFAULT_GUI_FONT), 0)


Автор:  destiny [ Пн авг 24, 2015 11:24 pm ]
Заголовок сообщения:  Re: Как вычислить ширину и высоту текста в пикселях

Вот теперь наконец-то внесена полная ясность. Для одного используется один шрифт, для другого - другой, и нигде это не указано, и выяснить кроме как опытным путем - нельзя. И Пётр этот опыт давно получил и в курсе, а теперь со всеми нами этим поделился!
БлагоДарю!

Страница 3 из 3 Часовой пояс: UTC + 3 часа
Powered by phpBB® Forum Software © phpBB Group
http://www.phpbb.com/