Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "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.031 c
6-1089412760
НовиЧок
2004-07-10 02:39
2004.09.19
Отображение HTML в экземпляре WebBrowser a...


1-1093979026
nd
2004-08-31 23:03
2004.09.19
Поддержка нескольких языков в программе.


4-1090818969
alex_bf
2004-07-26 09:16
2004.09.19
Замерить время между нажатиями клавиш с наибольшей точностью?


3-1093268841
KIR
2004-08-23 17:47
2004.09.19
Не кастуется поле, если текст запроса формируется в динамически


1-1093871295
Sword
2004-08-30 17:08
2004.09.19
Распечатать Chart в масштабе 1;1





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский