Тема: AHK: Дефолтный шрифт в Gui?
Хочу узнать будет ли использован тот же шрифт у пользователя, если он менял настройки в системе.
Вы не вошли. Пожалуйста, войдите или зарегистрируйтесь.
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться
Хочу узнать будет ли использован тот же шрифт у пользователя, если он менял настройки в системе.
Если шрифт указан явно, будет тот же, если он имеется в системе пользователя. Если не указан — зависит от настроек системы.
Я тупанул и забыл прописать сразу, а теперь когда штук 80 элементов подстроено под дефолтный шрифт, хочется как-то спасти работу. Как узнать что за шрифт сейчас используется в GUI, чтобы прописать именно его?
GuiDefaultFont() { ; By SKAN www.autohotkey.com/forum/viewtopic.php?p=465438#465438
hFont := DllCall( "GetStockObject", UInt,17 ) ; DEFAULT_GUI_FONT
VarSetCapacity( LF, szLF := 60*( A_IsUnicode ? 2:1 ) )
DllCall("GetObject", UInt,hFont, Int,szLF, UInt,&LF )
hDC := DllCall( "GetDC", UInt,hwnd ), DPI := DllCall( "GetDeviceCaps", UInt,hDC, Int,90 )
DllCall( "ReleaseDC", Int,0, UInt,hDC ), S := Round( ( -NumGet( LF,0,"Int" )*72 ) / DPI )
Return DllCall( "MulDiv",Int,&LF+28, Int,1,Int,1, Str ), DllCall( "SetLastError", UInt,S )
}
A_GuiFont := GuiDefaultFont()
A_GuiFontSize := A_LastError
MsgBox, %A_GuiFont%`t%A_GuiFontSize%Или ещё так (нужно передать hwnd контрола):
Gui, Add, Text, hwndhText, test
MsgBox, % Control_GetFont(hText)
ExitApp
Control_GetFont( hwnd ) { ; www.autohotkey.com/forum/viewtopic.php?p=465438#465438 By SKAN
SendMessage 0x31, 0, 0, , ahk_id %hwnd% ; WM_GETFONT Created: 27-Apr-2011
IfEqual,ErrorLevel,FAIL, Return
hFont := Errorlevel, VarSetCapacity( LF, szLF := 60*( A_IsUnicode ? 2:1 ) )
DllCall("GetObject", UInt,hFont, Int,szLF, UInt,&LF )
hDC := DllCall( "GetDC", UInt,hwnd ), DPI := DllCall( "GetDeviceCaps", UInt,hDC, Int,90 )
DllCall( "ReleaseDC", Int,0, UInt,hDC ), S := Round( ( -NumGet( LF,0,"Int" )*72 ) / DPI )
Return DllCall( "MulDiv",Int,&LF+28, Int,1,Int,1, Str ), DllCall( "SetLastError", UInt,S )
}Получил "MS Shell Dlg 8". По идее это системный шрифт и если его прописать в начале Gui, то у всех окна должны отображаться одинаково?
А я не знаю, у всех ли он есть, может, в XP нету. В случае, если шрифт не найден, используется дефолтный, во всяком случае, у меня так получается:
Gui, Font, s12, белиберда
Gui, Add, Text, hwndhText, test
Gui, Show, w300
MsgBox, % Control_GetFont(hText)
ExitApp
Control_GetFont( hwnd ) { ; www.autohotkey.com/forum/viewtopic.php?p=465438#465438 By SKAN
SendMessage 0x31, 0, 0, , ahk_id %hwnd% ; WM_GETFONT Created: 27-Apr-2011
IfEqual,ErrorLevel,FAIL, Return
hFont := Errorlevel, VarSetCapacity( LF, szLF := 60*( A_IsUnicode ? 2:1 ) )
DllCall("GetObject", UInt,hFont, Int,szLF, UInt,&LF )
hDC := DllCall( "GetDC", UInt,hwnd ), DPI := DllCall( "GetDeviceCaps", UInt,hDC, Int,90 )
DllCall( "ReleaseDC", Int,0, UInt,hDC ), S := Round( ( -NumGet( LF,0,"Int" )*72 ) / DPI )
Return DllCall( "MulDiv",Int,&LF+28, Int,1,Int,1, Str ), DllCall( "SetLastError", UInt,S )
}А я не знаю, у всех ли он есть, может, в XP нету.
Я даже у себя в папке Fonts его не нашёл.
используется дефолтный
Да и у меня совпало, но как узнать что это за дефолтный шрифт, чтобы его прописать жёстко?
Лучше использовать какой-то из шрифтов, которые здесь помечены жёлтым.
Странно как-то. Дефолтный шрифт в системе, который подставляется в Gui, если нет дефолтного для самого Gui, не имеется в этих "жёлтых". Разве может такое быть?
Дефолтный в системе и дефолтный в GUI — одно и то же. Почему не может быть? Среди этих жёлтых только те, которые есть во всех перечисленных системах, поэтому и использовать их безопасно. MS Shell Dlg к их числу не относится.
А нет такой сравнительной таблички, которая сравниваются системы от XP и выше?
Попробовал всё из этой компании :
http://sawarogu.3neko.ru/articles/spisok-bezorasnykh-shriftov-web-safe-fonts/
И ни один не оказался тем дефолтным, под который я всё настроил. Мистика какая-то. Ладно буду ставить везде Arial.
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться