Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Корректное преобразование символа #9


Автор: Dynamic 22.6.2006, 13:54
Мне надо средствами TCanvas вывести текст, содержащий символы #9. При выводе с пом. TextOut вместо символа #9 отображается пустой квадратик. Пытался просто заменять этот символ на 7 пробелов, но получается, конечно, не совсем то, что нужно. Кто-нибудь делал такое?

ЗЫ. Можно конечно вручную отформатировать позиции по модулю 7, но мне кажется, что или борманы или билли об этом уже подумали ;) 

Автор: Alexeis 22.6.2006, 14:05
Dynamic, может Label повесить, у него таких проблем нет. 

Автор: Sponger 22.6.2006, 14:17
А у меня в label не отображается символ &, вместо него следующий символ подчеркивается. Тоже не есть хорошо. 

Автор: Alexeis 22.6.2006, 14:21
Sponger, знак & обычно дублируется для вывода, иначе он является специальным знаком. 

Автор: Dynamic 22.6.2006, 14:34
Цитата(alexeis1 @  22.6.2006,  14:05 Найти цитируемый пост)
Dynamic, может Label повесить, у него таких проблем нет

Куда повесить? У меня полностью рисованный на битмапе вывод. У мемо тоже таких проблем нет, их решил Билли. Вот и я думаю, что может есть какая функция вывода/преобразования текста, чтоб лисапед не выдумывать.

Цитата(Sponger @  22.6.2006,  14:17 Найти цитируемый пост)
А у меня в label не отображается символ &, вместо него следующий символ подчеркивается. Тоже не есть хорошо.  

амперсанд, кажись, для этого 2 раза подряд надо написать
 

Автор: Yanis 22.6.2006, 14:46
Dynamic
Для этого используется функция TabbedTextOut. Под рукой Дельфи нету, поэтому пример позже нарисую если надо. 

Автор: Dynamic 22.6.2006, 15:42
Yanis, спасибо, поищу сам. Но если тебе попадется раньше, то выкладывай сюда тоже, может еще кому сгодится. 

Автор: Yanis 22.6.2006, 15:46
Цитата(Dynamic @  22.6.2006,  16:42 Найти цитируемый пост)
Yanis, спасибо, поищу сам. Но если тебе попадется раньше, то выкладывай сюда тоже, может еще кому сгодится.  

не понял, что выкладывать? smile
Если ты про пример, то вот:
Код
{ для бонального вывода текста с поддержкой табуляции }
  i := 0; // любое число. Переменная нужна лишь для var параметра
  TabbedTextOut(Canvas.Handle, X, Y, 'Hello'#9'World!!!',
                14, 0, i, 0);

Могу и посложнее примерчик нарисовать smile Но думаю и так всё предельно ясно.

Добавлено @ 15:50 
Хотя я знаю один способ как обойтись и без var параметра smile 

Автор: Dynamic 22.6.2006, 16:11
Yanis, спасибо еще раз (+), работает как часы!

ЗЫ. Говорил же, что все велосипеды уже изобретены !!!

Код

Функция TabbedTextOut

Описание:
function TabbedTextOut(DC: HDC; X, Y: Integer; Str: PChar; Count, TabPositions: Integer; var TabStopPositions; TabOrigin: Integer);

Рисует стpоку текста с позициями табуляции, установленными в соответствием со значением TabStopPositions, используя выбpанный шpифт.

Паpаметpы:
DC: Идентификатоp контекста устpойства.
X, Y: Начальная точка стpоки.
Str: Рисуемая стpока.
Count: Размеp Str (в символах).
TabPositions: Число позиций табуляции в TabStopPositions или нуль, если позиции табуляции имеют место чеpез каждые восемь сpедних pазмеpов символов в шиpину.
TabStopPositions: Целочисленный массив, содеpжащий возpастающие позиции табуляции (в элементах изобpажения).
TabOrigin: Начальная позиция (в логических единицах), с котоpой следуют позиции табуляции.

Возвpащаемое значение:
Не используется.

функция находится в файле user32.dll

 

Автор: Yanis 22.6.2006, 16:32
Для тех, кому мало моего примера и справки которую привёл Dynamic, то вот здесь есть хороший пример: http://alphomega.developpez.com/imprimer/?page=page_3#L2.5 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)