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

Вниз

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

 
12 ©   (2010-11-22 15:12) [0]

Для компонента, имеющего 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-22 15:37) [1]

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


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

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

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=


 
12 ©   (2010-11-22 16:03) [3]

Спасибо!


 
12 ©   (2010-11-22 16:21) [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;

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


 
clickmaker ©   (2010-11-22 16:39) [5]

> GetTextExtentPoint32(B.Handle

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


 
12 ©   (2010-11-22 16:46) [6]

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

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


 
clickmaker ©   (2010-11-23 11:11) [7]

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

Win32Check(GetTextExtentPoint32())



Страницы: 1 вся ветка

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

Наверх




Память: 0.48 MB
Время: 0.009 c
15-1289148440
faustpatron13
2010-11-07 19:47
2011.02.13
Текстовые файлы


15-1289165395
Юрий
2010-11-08 00:29
2011.02.13
С днем рождения ! 8 ноября 2010 понедельник


15-1289078996
Юрий
2010-11-07 00:29
2011.02.13
С днем рождения ! 7 ноября 2010 воскресенье


2-1290679150
Radgar
2010-11-25 12:59
2011.02.13
Ошибка при использовании Create


2-1290447322
vitge
2010-11-22 20:35
2011.02.13
Простановка string из массива в caption