Главная страница
    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.034 c
14-1093671943
VID
2004-08-28 09:45
2004.09.19
Приезжаю в Москву.


1-1094154461
Корифей
2004-09-02 23:47
2004.09.19
Изменение даты создания


1-1094029818
Denmin
2004-09-01 13:10
2004.09.19
Как отсечь пробелы спереди и сзади слова?


1-1094022757
BRemB
2004-09-01 11:12
2004.09.19
Вопрос про Record


1-1094459125
denis24
2004-09-06 12:25
2004.09.19
сортировака в listbox





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