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

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

сколько пикселов займет срока в 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;


Наверх

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