Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как узнать длину надписи на кнопки в пикселах? [D7, XP]


12 ©   (2010-11-22 15:12:00) 

Для компонента, имеющего canvas - Canvas.TextWidth('');
TButton  же не от TGraphicControl, имеющего канву

Навскидку придумал рядом завести метку и по ней померить
 L := TLabel.Create(pnlPlaceButtonWindow);
 L.Parent := pnlPlaceButtonWindow;
 L.Caption := btn1.Caption;
 L.Font := btn1.Font;
 ShowMessage( IntToStr(  L.Canvas.TextWidth(L.Caption)  ) );

но что-то это как-то криво кажется

или торможу или одно из трех..

КАК?


clickmaker   (2010-11-23 11:11:00) [1]

> Windows.GetTextExtentPoint32(GetDC(B.Handle), PChar(B.Caption)
> , Length(B.Caption), R);
> но не работает что-то

Win32Check(GetTextExtentPoint32())


12   (2010-11-22 16:46:00) [2]

ну да, т.е.
Windows.GetTextExtentPoint32(GetDC(B.Handle), PChar(B.Caption), Length(B.Caption), R);
но не работает что-то

придется как ЮЗ сказал делать


clickmaker   (2010-11-22 16:39:00) [3]

> GetTextExtentPoint32(B.Handle

да почему B.Handle? там HDC нужен


12   (2010-11-22 16:21:00) [4]

вопросы задаю, прежде чем подумаю..
вот еще, если с контрлом + клик попрыгать

function TCanvas.TextExtent(const Text: string): TSize;
begin
 RequiredState([csHandleValid, csFontValid]);
 Result.cX := 0;
 Result.cY := 0;
 Windows.GetTextExtentPoint32(FHandle, PChar(Text), Length(Text), Result);
end;

function TCanvas.TextWidth(const Text: string): Integer;
begin
 Result := TextExtent(Text).cX;
end;


итого, ежели перепишу так:
function TMainForm.WidthCaptionBtn(B: TBitBtn): Integer;
var
 R: TSize;
begin
 Windows.GetTextExtentPoint32(B.Handle, PChar(B.Caption), Length(B.Caption), R);
 Result := R.cx;
end;

наверное ничего страшного не будет?


12   (2010-11-22 16:03:00) [5]

Спасибо!


Юрий Зотов   (2010-11-22 15:38:00) [6]

Разные контролы могут иметь разный шрифт, поэтому надо делать по самой кнопке.

GetDC(Button1.Handle)
try
 определяем ширину текста вызовом DrawText с параметром DT_CALCRECT
finally
 ReleaseDC(...)
end;

http://www.google.ru/search?hl=ru&source=hp&q=drawtext+dt_calcrect&lr=&aq=1&aqi=g3&aql=&oq=DrawText+DT_&gs_rfai=


clickmaker   (2010-11-22 15:37:00) [7]

если шрифт тот-же, что и у формы, то достаточно Form.Canvas


Наверх

Титульная страница Поиск, карта сайта Написать письмо