![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как узнать длину надписи на кнопки в пикселах? [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