Форум — Ответы     (  К темам )
 ?  Владимир: TReachEdit Как узнать длину введённой мной строки в пикселах? (16-05-2003 11:44:49)
Нужно вывести текст в форматированном по колонкам виде, далее
распечатать. Текст имеет так-же разный шрифт от параграфа к
параграфу. Напрашивается применение TStringGrid. Но этот класс
имеет один шрифт на всю таблицу и не распечатывается.
Для класса TReachEdit всё хорошо, только у него нет
свойства типа TCanvas. Иначе можно было-бы так
if(ReachEdit->Canvas->TextWidth("Hello, World!")>
ReachEdit->Canvas->TextWidth("\t\t"))
{//...
}
Подскажите, может като уже решил такую проблему.
Заранее благодарен!
 Andrew (17-05-2003 17:34:48)
Может попробовать проверять длины на каком нибудь другом объекте, имеющим Canvas?
Тебе ведь судя по примеру больше интересует отношение двух длин...
 _Владимир_ (17-05-2003 19:08:34)
Я так и сделал
int ???::GetTextWidth(const AnsiString s)
{
POINT point;
HDC hDC;
TCanvas *Canvas=new TCanvas;

//hDC=CreateCompatibleDC(GetDeviceContext(ReportRichEdit->Handle));
hDC=CreateCompatibleDC(GetDC(ReportRichEdit->Handle));
Canvas->Handle=hDC;
Canvas->Font->Assign(font);
point.x=Canvas->TextWidth(s); //API::GetTextExtentPoint32
LPtoDP(hDC, &point, 1);
delete Canvas;
DeleteDC(hDC);
return point.x;
}
font-глобальная переменная типа TFont * и синхронна
с свойством SelAttributes
Что-то похожее я уже делал и в VisualC++.

Сравнение строк при этом работает, только если в
строке нет символов табуляции.
Судя повсему табуляции устанавливаются в других
единицах нежели пиксел.
А ведь интересно знать позицию относительно
"вешек" табуляции, т.к. они имеют одну и ту-же
позицию от строки к строке.