Главная страница
    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.47 MB
Время: 0.037 c
4-1091086264
DeepProg
2004-07-29 11:31
2004.09.19
Чтение с мультиметра через RS-232C


3-1092988776
Tormoz
2004-08-20 11:59
2004.09.19
Oracle SQL*Plus. Где результат запроса?


1-1094110543
DesWind
2004-09-02 11:35
2004.09.19
XP Manifest


4-1091614965
Deedlit
2004-08-04 14:22
2004.09.19
Дерегистрация типа файла в системе


3-1092968740
Dub
2004-08-20 06:25
2004.09.19
Копирование таблиц





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский