Что нового

Как получить текущий шрифт в GUI/окне?

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,673
Репутация
2,486
Меня уже давно мучает один вопрос - каким образом можно получить данные об используемом шрифте в GUI?

Нужно нечто вроде GUIGetFont().

Пример:
Код:
#include <GUIConstantsEx.au3>

$hGUI = GUICreate("Test Script", 300, 200)

GUISetFont(14, 800, 0, "Tahoma")
GUICtrlCreateLabel("Label", 20, 40)

GUISetState(@SW_SHOW, $hGUI)

$aFont = _GUIGetFont($hGUI)
;Возвращает:
;$aFont[1] -> size
;$aFont[2] -> weight
;$aFont[3] -> attribute
;$aFont[4] -> name
;$aFont[5] -> quality

While 1
	Switch GUIGetMsg()
		Case $GUI_EVENT_CLOSE
			Exit
	EndSwitch
WEnd

Func _GUIGetFont($hWnd)
	Local $aFont[6] = [0]
	;Тут нужно получить шрифт GUI
	Return $aFont
EndFunc


есть идеи?
 

sforce5

Олл фо ЛулзЪ
Сообщения
160
Репутация
41
Re: Как получить текущий фонт в GUI/окне?

В правилах вроде жэ написано, что низя апчаться писать в заголовках "сленгом", фонт поймёт наверное только омериканетс
 
Автор
CreatoR

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,673
Репутация
2,486
Re: Как получить текущий фонт в GUI/окне?

sforce5 [?]
В правилах вроде жэ написано
Я эти правила писал вообще то :blum: - и там написано про содержание тем, и также написано что намеренно не нужно искажать...
А когда я писал заголовок, то не мог вспомнить как оно по русский звучит, и не придал этому значения.

P.S
Лучше бы по теме что то написал, чем давать замечания администратору ;)
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
Код:
#Include <Array.au3>
#Include <FontConstants.au3>
#Include <WinAPI.au3>
#Include <WindowsConstants.au3>

$hForm = GUICreate('MyGUI', 300, 200)

GUISetFont(12, 700, 2 + 4, 'Tahoma')
GUICtrlCreateLabel('Simple Text', 20, 40)

$aFont = _GUIGetFont($hForm)

GUISetFont($aFont[1], $aFont[2], $aFont[3], $aFont[4], $hForm, $aFont[5])
GUICtrlCreateLabel('Simple Text', 20, 80)

GUISetState(@SW_SHOW)

_ArrayDisplay($aFont)

Do
Until GUIGetMsg() = -3

Func _GUIGetFont($hWnd)

; [0] - 0
; [1] - Size
; [2] - Weight
; [3] - Attribute
; [4] - Name
; [5] - Quality

	Local $Ret, $Label, $hLabel, $hPrev, $hDC, $hFont, $tFont
	Local $aFont = 0

	$hPrev = GUISwitch($hWnd)
	If Not $hPrev Then
		Return 0
	EndIf
	$Label = GUICtrlCreateLabel('', 0, 0, 0, 0)
	If Not $Label Then
		Return 0
	EndIf
	$hLabel = GUICtrlGetHandle($Label)
	$hDC = _WinAPI_GetDC($hLabel)
	$hFont = _SendMessage($hLabel, $WM_GETFONT)
	$tFont = DllStructCreate($tagLOGFONT)
	$Ret = DllCall('gdi32.dll', 'int', 'GetObjectW', 'ptr', $hFont, 'int', DllStructGetSize($tFont), 'ptr', DllStructGetPtr($tFont))
	If (Not @error) And ($Ret[0]) Then
		Dim $aFont[6] = [0]
		$aFont[1] = -Round(DllStructGetData($tFont, 'Height') / _WinAPI_GetDeviceCaps($hDC, $LOGPIXELSY) * 72, 1)
		$aFont[2] = DllStructGetData($tFont, 'Weight')
		$aFont[3] = BitOR(2 * (DllStructGetData($tFont, 'Italic') <> 0), 4 * (DllStructGetData($tFont, 'Underline') <> 0), 8 * (DllStructGetData($tFont, 'Strikeout') <> 0))
		$aFont[4] = DllStructGetData($tFont, 'FaceName')
		$aFont[5] = DllStructGetData($tFont, 'Quality')
	EndIf
	_WinAPI_ReleaseDC($hLabel, $hDC)
	GUICtrlDelete($Label)
	GUISwitch($hPrev)
	Return $aFont
EndFunc   ;==>_GUIGetFont
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
OffTopic:
Yashied,
CreatoR,
Интересно, а есть что-нибудь такое, что Вы вдвоем не сможете реализовать? :IL_AutoIt_1: :beer:
 
Автор
CreatoR

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,673
Репутация
2,486
Yashied
Я просил идеи, а ты мне тут целую функцию написал, так ведь не интересно :'(... шутка!!! супер, спасибо :beer:, то что надо! :IL_AutoIt_1:
 

XM

Знающий
Сообщения
70
Репутация
8
madmasles сказал(а):
OffTopic:
Yashied,
CreatoR,
Интересно, а есть что-нибудь такое, что Вы вдвоем не сможете реализовать? :IL_AutoIt_1: :beer:

Однако есть... :smile: :laugh:
 
Автор
CreatoR

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,673
Репутация
2,486
Yashied
Для остальных окон (не для AutoIt GUI) можно адаптировать функцию? :scratch:
 
Верх