Форум: "WinAPI";
Текущий архив: 2004.09.19;
Скачать: [xml.tar.bz2];
ВнизКак определить ширину текста Найти похожие ветки
← →
AD_infiniTUM (2004-08-04 20:44) [0]Есть Handle кнопки (к примеру). Как определить ширину нужного мне текста, написанно шрифтом, которым отображается текст на кнопке.
Пробовал такfunction GetTextWidth(Wnd: HWnd; const Text: string): Integer;
var
Size: TSize;
DC: HDC;
begin
DC := GetDC(Wnd);
GetTextExtentpoint32(DC, PChar(@Text[1]), Length(Text), Size);
ReleaseDC(Wnd, DC);
Result := Size.cx;
end;
Только как-то сложно и шрифт при определении размеров используется не тот, что у кнопки, а System. Приходится для контекста DC еще и шрифт устанавливать. А по другому никак нельзя?
← →
panov © (2004-08-04 21:23) [1]Попробуй DrawText
← →
AD_infiniTUM (2004-08-04 21:39) [2]panov
Как я понял из справки, она возвращает высоту, а мне ширина нужно...
← →
Timedrops © (2004-08-04 22:53) [3]API GetTextMetrics - она возвращает инфо о шрифте
и ширина там есть
← →
AD_infiniTUM (2004-08-04 23:14) [4]Timedrops
Там максимальная и минимальная ширина символа, а нужно текста.
← →
AD_infiniTUM (2004-08-04 23:19) [5]Работает, если преобразовать функцию в
function GetTextWidth(Wnd: HWnd; const Text: string): Integer;
var
Size: TSize;
DC: HDC;
begin
DC := GetDC(Wnd);
DeleteObject(SelectObject(DC, SendMessage(Wnd, WM_GETFONT, 0, 0)));
GetTextExtentpoint32(DC, PChar(Text), Length(Text), Size);
ReleaseDC(Wnd, DC);
Result := Size.cx;
end;
Но мне кажется это извращением...
← →
Думкин © (2004-08-05 07:22) [6]> Только как-то сложно и шрифт при определении размеров используется
> не тот, что у кнопки, а System. Приходится для контекста
> DC еще и шрифт устанавливать.
А когда ты текст выводишь ты шрифт не устанавливаешь?
← →
AD_infiniTUM (2004-08-05 07:29) [7]Думкин
Я ничего не вывожу. Мне рисовать не нужно, только определить ширину текста, написанного шрифтом кнопки. На кнопке надписи отображаются не системным шрифтом.
← →
BillyJeans (2004-08-05 08:11) [8]Canvas.TextWidth() ?
← →
AD_infiniTUM (2004-08-05 08:38) [9]BillyJeans
> Canvas.TextWidth() ?
Это работает нормально. Только в WinAPI нет TCanvas.
← →
Игорь Шевченко © (2004-08-05 10:59) [10]
> Только как-то сложно и шрифт при определении размеров используется
> не тот, что у кнопки, а System. Приходится для контекста
> DC еще и шрифт устанавливать. А по другому никак нельзя?
Нет.function GetTextWidth (const AStr: String; AFont: HFONT): Integer;
var
DC : HDC;
OldFont : HFONT;
TextSize : SIZE;
begin
DC := GetDC (HWND_DESKTOP);
try
OldFont := SelectObject(DC, AFont);
try
if (not GetTextExtentPoint32(DC, PChar(AStr), Length(AStr), TextSize)) then
RaiseLastWin32Error;
Result := TextSize.cx;
finally
SelectObject(DC, OldFont);
end;
finally
ReleaseDC (HWND_DESKTOP, DC);
end;
end;
Страницы: 1 вся ветка
Форум: "WinAPI";
Текущий архив: 2004.09.19;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.034 c