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

Вниз

сколько пикселов займет срока в 10 символов?   Найти похожие ветки 

 
bkv   (2002-12-10 16:42) [0]

Подскажте,
как узнать сколько пикселов займет срока в 10 символов?
Заранее благодарен


 
MBo ©   (2002-12-10 16:44) [1]

canvas.textwitdth


 
Игорь Шевченко ©   (2002-12-10 16:44) [2]

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;



 
han_malign ©   (2002-12-10 16:46) [3]

TCanvas:
TextExtent
TextHeight
TextRect
TextWidth
- не в контексте Canvas/DC - смысла не имеет


 
han_malign ©   (2002-12-10 16:48) [4]

Игорь Шевченко © (10.12.02 16:44)
- тонко... :))))))


 
Skier ©   (2002-12-10 17:04) [5]

Повторение - мать учения :))
http://delphi.mastak.ru/cgi-bin/forum.pl?look=1&id=1039161363&n=0


 
Subfire ©   (2002-12-10 17:11) [6]

Вообще странно...должен ведь существовуать способ, чтобы по двум параметрам - строчке и шрифту - однозначно определить длинну строчки в пикселах, вообще абстрагируясь от объектов и контролов...
Т.е. пользовательская процедура получающая на входе строку и TFont и возвращающая длинну строчки в пикселях.
Динамически создавать в ней объект и в нем смотреть длину не предлагать - это то же что и GetTextWidthInPixels by Игорь Шевченко, только в профил...
Кстати, его вариант пока самый лучший! -)


 
VaS ©   (2002-12-10 17:19) [7]


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;


Не скажу, что сильно горжусь данной аналогией дружественного класса, но он должен быть побыстрее варианта Игоря Шевченко.


 
Игорь Шевченко ©   (2002-12-10 17:43) [8]

by the way - это не мой вариант. Это просто кусок из проекта.

Это из http://www.lmc-mediaagentur.de/dpool.htm - там много всего интересного. И бесплатного.


 
Subfire ©   (2002-12-10 17:49) [9]

Так....разбираем...
GetTextExtentPoint32();
дествительно позволяет узнать длину шрифта...если ей передать контекст устройства...
К тому же она использует текущий шрифт...
Т.е. решение реально одно - сменить текущий шрифт, вычислить, вернуть шрифт...Криво.


 
Skier ©   (2002-12-10 17:52) [10]

>Subfire
So...What"s your point ? :))


 
Игорь Шевченко ©   (2002-12-10 18:41) [11]

Subfire © (10.12.02 17:49)

К вашему сведению - ширина строки в пикселах зависит как раз от шрифта, которым она отображается.




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

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

Наверх




Память: 0.49 MB
Время: 0.13 c
4-75033
apay
2002-11-09 02:07
2002.12.23
Как получить MenuSpeed (delay-before-show time)


14-74900
vopros
2002-12-03 17:15
2002.12.23
Как вы расслабляетесь вечером, после работы?


4-75038
eruc
2002-11-10 07:06
2002.12.23
блокируем все КЛАВИШИ


1-74791
Michael II
2002-12-11 11:40
2002.12.23
Общие вопросы


14-74975
spb
2002-12-03 15:05
2002.12.23
Просто так