![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
сколько пикселов займет срока в 10 символов?
bkv © (2002-12-10 16:42:00)Подскажте,
как узнать сколько пикселов займет срока в 10 символов?
Заранее благодарен
Игорь Шевченко (2002-12-10 18:41:00) [1]Subfire © (10.12.02 17:49)
К вашему сведению - ширина строки в пикселах зависит как раз от шрифта, которым она отображается.
Skier (2002-12-10 17:52:00) [2]>Subfire
So...What"s your point ? :))
Subfire (2002-12-10 17:49:00) [3]Так....разбираем...
GetTextExtentPoint32();
дествительно позволяет узнать длину шрифта...если ей передать контекст устройства...
К тому же она использует текущий шрифт...
Т.е. решение реально одно - сменить текущий шрифт, вычислить, вернуть шрифт...Криво.
Игорь Шевченко (2002-12-10 17:43:00) [4]by the way - это не мой вариант. Это просто кусок из проекта.
Это из http://www.lmc-mediaagentur.de/dpool.htm- там много всего интересного. И бесплатного.
VaS (2002-12-10 17:19:00) [5]
type
THackControl = class(TControl)
end;
function GetTextWidthInPixels(AText: string; AControl: TControl): integer;
begin
if AControl <> nil then
with TControlCanvas.Create do
try
Control := AControl;
Font.Assign(THackControl(AControl).Font);
Result:=TextWidth(AText);
finally
Free;
end
else
Result:=0;
end;
Не скажу, что сильно горжусь данной аналогией дружественного класса, но он должен быть побыстрее варианта Игоря Шевченко.
Subfire (2002-12-10 17:11:00) [6]Вообще странно...должен ведь существовуать способ, чтобы по двум параметрам - строчке и шрифту - однозначно определить длинну строчки в пикселах, вообще абстрагируясь от объектов и контролов...
Т.е. пользовательская процедура получающая на входе строку и TFont и возвращающая длинну строчки в пикселях.
Динамически создавать в ней объект и в нем смотреть длину не предлагать - это то же что и GetTextWidthInPixels by Игорь Шевченко, только в профил...
Кстати, его вариант пока самый лучший! -)
Skier (2002-12-10 17:04:00) [7]Повторение - мать учения :))
http://delphi.mastak.ru/cgi-bin/forum.pl?look=1&id=1039161363&n=0
han_malign (2002-12-10 16:48:00) [8]Игорь Шевченко © (10.12.02 16:44)
- тонко... :))))))
han_malign (2002-12-10 16:46:00) [9]TCanvas:
TextExtent
TextHeight
TextRect
TextWidth
- не в контексте Canvas/DC - смысла не имеет
MBo (2002-12-10 16:44:00) [10]canvas.textwitdth
Игорь Шевченко (2002-12-10 16:44:00) [11]uses
TypInfo;
function GetTextWidthInPixels(AText: string; AControl: TControl): integer;
var
propInfo: PPropInfo;
thisFont: TFont;
begin
Result := 0;
propInfo := GetPropInfo(AControl.ClassInfo, "Font");
if propInfo <> nil then begin
thisFont := TFont(GetObjectProp(AControl, "Font"));
if Assigned(thisFont) then
with TControlCanvas.Create do
try
Control := AControl;
Font.Assign(thisFont);
Result := TextWidth(AText);
finally
Free;
end;
end;
end;