Delphirus - прграммирование на delphi
   Все о delphi Delphirus - прграммирование на delphi
blocks.gif
Навигация
 

Главная
Статьи
Базы данных
Графика
Защита
Интернет
Система
Тексты
Мультимедиа
Файлы
Формы и окна
Другое
Советы
Базы данных
Графика
Интернет
Мультимедиа
Система
Тексты
Файлы
Файлы
Исходники
Компоненты
Инфо
Поиск по сайту
Обратная связь
Самое популярное
Аккаунт
Карта сайта

 
story.gif
По наклонной
 
Работа с текстами Многие текстовые редакторы и даже некоторые электронные таблицы — не буду говорить какие, сами догадайтесь — позволяют вводить текст не только горизонтально, но и под некоторым углом. Привыкнув к подобной свободе действий, пользователь Дельфи с недоумением убеждается, что привычная вольница невозможна: текст везде, где можно его разместить — например, метка или канва формы — располагается параллельно земной поверхности. Однако такое впечатление обманчиво. Я попытаюсь рассказать, каким образом можно получать наклонный текст в Делфях. Правда, я не знаю, зачем это может быть нужно, кроме как для хохмы ради.

Подобный трюк может быть совершен с любым объектом, у которого есть Canvas. В двух словах — мы делаем новый объект типа Tfont, потом изменяем некоторые его свойства, получаем хэндл оного, присваиваем его текущему фонту истязаемого элемента, а потом можем уже и заняться разрисовыванием.

Теперь подробнее. Изменение фонта с обычного на наклонный можно привязывать к разным событиям. То ли вы рассматриваемую процедуру навесите на кнопочку, и все случится по нажатию, то ли вы прикрепите в событие OnShow формы, и изменение фонта произойдет сразу же, как только форма появится на экране, — дело хозяйское, не важно. Тот кусок кода, который с последующими комментариями я приведу ниже, я прицепила на кнопочку (Button4), принадлежащую форме Form1.

Вначале мы объявляем переменные типа Tfont и TlogFont. Если первая понятна и знакома (тип шрифта), то тип номер два нам в диковинку. На странице http://www.vbapi.com/ref/l/logfont.html нам подробно и дотошно поясняют, что это структура, хранящая информацию о логическом шрифте. Кстати, сам сайт http://www.vbapi.com весьма рекомендую как подробный и толковый.

В теле самой процедуры вначале устанавливается текущий шрифт формы — наименование и размер. Обращаю внимание на наименование шрифта — оный должен быть не иначе как True Type.Затем создаем объект типа шрифта и присваиваем ему значение — при помощи команды Assign требуем, чтобы новый шрифт был таким же, как и текущий шрифт формы.

Теперь начинаем заполнять структуру типа TlogFont. Величины lfEscapement и lfOrientation должны быть равны между собой и равны углу отклонения от базовой линии фонта. Измеряется угол в десятых долях градуса. После установки угла перерисовываем параметры из основного фонта формы в тот, который мы заполняем. В принципе, эти операторы можно и пропустить, просто привожу их на тот случай, если кому вдруг пригодится. В операторе IF определяем, жирный у нас будет шрифт или нет. Вариантов, на самом деле, куда больше — тонкий, очень жирный и т. д. Параметры lfItalic и lfUnderline, по-моему, понятны — они описывают наклонность и подчеркнутость. LfStrikeOut — это перечеркнутость. LfCharSet'ов имеется великое множество — от нашего русского до арабского и еврейского. Правда, последние доступны только в Винде 2000 и NT.

После указания параметров мы создаем шрифт с помощью функции CreateFontIndirect (http://www.vbapi.com/ref/l/../c/createfontindirect.html), специально предназначенной для создания шрифта согласно заранее установленным свойствам — структуре, которую мы только что заполнили. Эта функция возвращает хэндл фонта, который мы немедленно присваиваем хэндлу нашей переменной типа Tfont. Потом при помощи команды Assign мы утверждаем, что шрифт канвы формы будет таким же, как фонт, только что созданный нами, и окрашиваем его в выбранный цвет — команда color. Переменную Fnt освобождаем — она вспомогательная и, наконец, при помощи функции TextOut выводим надпись «Super!» в точке канвы формы с координатами (30,60). Эта функция даже в хелпе по Делфи есть.

Столь специфической проблеме, как ни странно, посвящено много страниц в Интернете. В основном они содержат пример программы безо всяких объяснений или с минимальными ремарками. Вот несколько адресов навскидку — http://www.scalabium.com/faq/dct0002.htm, http://www.latiumsoftware.com/en/delphi/00046.php3, http://members.nbci.com/jescott/DelphiCodeTips1.html, http://members.truepath.com/delphi/tips/tip114_anglefont1.htm, http://www.hitekdev.com/delphi/rotatetext.html, http://www.jpl.nu/~magnus/delphiqa/articles/0149.html, http://www.multimania.com/offset/inform/inform.html.

Последняя страничка вообще-то на французском, но там так мало текста и так много кода, что данный факт совершенно не смущает. Тем более что приведенный там пример — самый простой и удачный.

Источник - http://www.mycomp.com.ua

 
Разместил 18/02/2004 от rolcom ( Прочитано: )

  blocks.gif
Связанные ссылки
 

· Больше про Работа с текстами
· Новость от rolcom


Самая читаемая статья: Работа с текстами:
О том, как вращать текст, с помощью Delphi

 
blocks.gif
Рейтинг статьи
 

Средняя оценка: 5
Ответов: 1


Пожалуйста, проголосуйте за эту статью:

Отлично
Очень хорошо
Хорошо
Нормально
Плохо


 
blocks.gif
опции
 


 Напечатать текущую страницу  Напечатать текущую страницу

 Отправить статью другу  Отправить статью другу

 
 

Page generation 0.039 seconds