-
Rouse_ © (19.01.16 22:00) [0]Ребят, пардон, чтой-то я пробуксовываю малехо или уже подзабыл.
Вот в системе есть шрифт назначенный меню (имя/размер) окну, заголовку.
В ХР это все было настраиваемое даже, в отличие от семерки и выше (где все захардкоренно на Темах).
Но вот забыл - а как получить параметры шрифта для каждого элемента?
Вот так, к примеру под восьмеркой, вытаскивается что-то не то:procedure TFontManager.LoadSystemFont;
var
ncm: TNonClientMetrics;
begin
ncm.cbSize := TNonClientMetrics.SizeOf;
SystemParametersInfo(SPI_GETNONCLIENTMETRICS, 0, @ncm, 0);
FFontNames[fmsSystem] := PChar(@ncm.lfMessageFont.lfFaceName[0]);
FFontSizes[fmsSystem] := ncm.lfMessageFont.lfHeight;
end;
В частности я назначаю шрифт связанный с иконками 15 размер и жирный, и в проводнике все становится таким шрифтом, а как мне вытащить этот параметр в свое приложение?
Пните плз в правильную сторону. -
Eraser © (20.01.16 02:17) [1]
> Rouse_ © (19.01.16 22:00)
> В ХР это все было настраиваемое даже, в отличие от семерки
> и выше (где все захардкоренно на Темах).
настраиваемо даже в десятке ) просто запрятали со знанием дела
https://dl.dropboxusercontent.com/u/26403307/2016-01-20_2-13-56.png
> Но вот забыл - а как получить параметры шрифта для каждого
> элемента?
первое что попалось - через wmi
https://msdn.microsoft.com/en-us/library/windows/desktop/aa394121(v=vs.85).aspx
может как-то еще можно. -
Rouse_ © (20.01.16 09:25) [2]"Minimum supported client - Windows Vista", мне бы начиная с ХР - блин ну точно должна же быть Апишка :)
-
Игорь Шевченко © (20.01.16 10:54) [3]"Minimum supported client - Windows Vista"
Это они сейчас пишут, потому что XP не поддерживают. А функциональность может и в win2k быть -
Rouse_ © (20.01.16 12:36) [4]Да Игорь, я в курсе, но я чуть уточню цитированием: "
В частности я назначаю шрифт связанный с иконками 15 размер и жирный, и в проводнике все становится таким шрифтом, а как мне вытащить этот параметр в свое приложение? " -
NoUser © (20.01.16 13:18) [5]HKCU\Control Panel\Desktop\WindowMetrics\ nnnFont's
правда, в каком оно там формате не знаю. -
Игорь Шевченко © (20.01.16 13:31) [6]Rouse_ © (20.01.16 12:36) [4]
https://technet.microsoft.com/en-us/library/cc951790.aspx
Мне конечно не нравится идея с реестром, но функции не увидел. -
NoUser © (20.01.16 13:58) [7]хм, походуtagLOGFONTW
-
По крайней мере такой код работает:lpNCM: TNonClientMetrics;
lpWriteToWinIni: dword;
lpS: string;
begin
lpWriteToWinIni := 0; //в WinIni не пишем
FillChar(lpNCM, SizeOf(lpNCM), 0);
lpNCM.cbSize := SizeOf(lpNCM);
if not SystemParametersInfo(SPI_GETNONCLIENTMETRICS, lpNCM.cbSize, @lpNCM, lpWriteToWinIni) then RaiseLastOSError;
lpS := Array2String(lpNCM.lfMenuFont.lfFaceName);
MessageBox(Handle, PChar(lpS), 'Menu font', MB_OK or MB_ICONINFORMATION); -
Rouse_ © (23.01.16 17:21) [10]
> Dmk © (22.01.16 20:26) [9]
Ну это то что я в самом начале показал, а вот предыдущая ссылка интересная, поразбираюсь - спасибо. -
Dimka Maslov © (25.01.16 12:48) [11]
function GetFontFunc(Shift: Integer): HFONT;
var
NCM: TNonClientMetrics;
LF: PLogFont;
begin
NCM.cbSize := SizeOf(NCM);
if SystemParametersInfo(SPI_GETNONCLIENTMETRICS, 0, @NCM, 0) then begin
LF := IncPtr(@NCM, Shift);
LF.lfCharSet := DefaultCharset;
Result := CreateFontIndirect(LF^);
end else begin
Result := GetStockObject(SYSTEM_FONT);
end;
end;
function SmallCaptionFont: HFONT;
var
NCM: TNonClientMetrics;
begin
Result := GetFontFunc(Integer(LONG_PTR(@NCM.lfSmCaptionFont)-LONG_PTR(@NCM)));
end;
function CaptionFont: HFONT;
var
NCM: TNonClientMetrics;
begin
Result := GetFontFunc(Integer(LONG_PTR(@NCM.lfCaptionFont)-LONG_PTR(@NCM)));
end;
function MenuFont: HFONT;
var
NCM: TNonClientMetrics;
begin
Result := GetFontFunc(Integer(LONG_PTR(@NCM.lfMenuFont)-LONG_PTR(@NCM)));
end;
function MessageFont: HFONT;
var
NCM: TNonClientMetrics;
begin
Result := GetFontFunc(Integer(LONG_PTR(@NCM.lfMessageFont)-LONG_PTR(@NCM)));
end;
function StatusFont: HFONT;
var
NCM: TNonClientMetrics;
begin
Result := GetFontFunc(Integer(LONG_PTR(@NCM.lfStatusFont)-LONG_PTR(@NCM)));
end;
Давным давно написал такое и до сих пор всё работает. Даже на восьмёрке и десятке (проверил лично только что). Надо только потом назначить Handle объекту TFont и получить данные из него. -
Дмитрий К © (25.01.16 14:04) [12]
> шрифт связанный с иконками
SPI_GETICONTITLELOGFONT -
Rouse_ © (25.01.16 17:11) [13]
> Дмитрий К © (25.01.16 14:04) [12]
>
> > шрифт связанный с иконками
>
> SPI_GETICONTITLELOGFONT
О как, проверю, вроде оно, видать пропустил...