Главная страница
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
2-1290449177
mem
2010-11-22 21:06
2011.02.13
считать байты в структуру


15-1288646999
Юрий
2010-11-02 00:29
2011.02.13
С днем рождения ! 2 ноября 2010 вторник


2-1290523037
альбинка
2010-11-23 17:37
2011.02.13
cрочно надо сдать((((помогите)))


15-1288998079
Дмитрий Тимохов
2010-11-06 02:01
2011.02.13
Когда-то надо остановиться - тема Дней Рождений


4-1245251049
SpellCaster
2009-06-17 19:04
2011.02.13
Перехват вывода консольного приложения