Форум — Ответы ( К темам )
? | Владимир: 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++. Сравнение строк при этом работает, только если в строке нет символов табуляции. Судя повсему табуляции устанавливаются в других единицах нежели пиксел. А ведь интересно знать позицию относительно "вешек" табуляции, т.к. они имеют одну и ту-же позицию от строки к строке. |