Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.09.19;
Скачать: CL | DM;

Вниз

Как определить ширину текста   Найти похожие ветки 

 
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 вся ветка

Текущий архив: 2004.09.19;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.052 c
3-1092904824
Slash
2004-08-19 12:40
2004.09.19
Удаление таблицы


14-1093714875
able
2004-08-28 21:41
2004.09.19
Охото узнать Ваше мнение.


14-1094036140
Real
2004-09-01 14:55
2004.09.19
Восстановление нормальной загрузки Win9x - Win2000 - Linux


6-1089282957
Гость778
2004-07-08 14:35
2004.09.19
Подскажите как вытащить нужную информацию с сайта курса валют


4-1091698799
Difar
2004-08-05 13:39
2004.09.19
Как прочитать значение с порта 360h