(495) 925-0049, ITShop интернет-магазин 229-0436, Учебный Центр 925-0049
  Главная страница Карта сайта Контакты
Поиск
Вход
Регистрация
Рассылки сайта
 
 
 
 
 

По наклонной

Источник: codingclub

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

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

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

procedure TForm1.Button4Click(Sender: TObject);
var
 LgFnt : TLogFont;
 Fnt  : TFont;
begin
 Form1.Canvas.Font.Name := 'Arial';
 Form1.Canvas.Font.Size := 18;
 Fnt := TFont.Create;
 Fnt.Assign(Form1.Canvas.Font);
 GetObject(Fnt.Handle, sizeof(LgFnt), @LgFnt);
 LgFnt.lfEscapement := 180;
 LgFnt.lfOrientation := 180;
 if fsBold in Fnt.Style then
 LgFnt.lfWeight     := FW_BOLD
  else
  LgFnt.lfWeight     := FW_NORMAL;
  LgFnt.lfItalic      := Byte(fsItalic in Fnt.Style);
  LgFnt.lfUnderline    := Byte(fsUnderline in Fnt.Style);
  LgFnt.lfStrikeOut    := Byte(fsStrikeOut in Fnt.Style);
  LgFnt.lfCharSet     := DEFAULT_CHARSET;
  StrPCopy(LgFnt.lfFaceName, Fnt.Name);
  LgFnt.lfQuality     := DEFAULT_QUALITY;
  LgFnt.lfOutPrecision   := OUT_DEFAULT_PRECIS;
  LgFnt.lfClipPrecision  := CLIP_DEFAULT_PRECIS;
  case Fnt.Pitch of
   fpVariable : LgFnt.lfPitchAndFamily := VARIABLE_PITCH;
   fpFixed  : LgFnt.lfPitchAndFamily := FIXED_PITCH;
  else
   LgFnt.lfPitchAndFamily := DEFAULT_PITCH;
  end;
 Fnt.Handle := CreateFontIndirect(LgFnt);
 Form1.Canvas.Font.Assign(Fnt);
 Form1.Canvas.Font.color:=clNavy;
 Fnt.Free;
 Form1.Canvas.TextOut(30,60,'Super!');
end;
 
Вначале мы объявляем переменные типа Tfont и TlogFont. Если первая понятна и знакома (тип шрифта), то тип номер два нам в диковинку.

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

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

После указания параметров мы создаем шрифт с помощью функции CreateFontIndirect, специально предназначенной для создания шрифта согласно заранее установленным свойствам - структуре, которую мы только что заполнили. Эта функция возвращает хэндл фонта, который мы немедленно присваиваем хэндлу нашей переменной типа Tfont. Потом при помощи команды Assign мы утверждаем, что шрифт канвы формы будет таким же, как фонт, только что созданный нами, и окрашиваем его в выбранный цвет - команда color. Переменную Fnt освобождаем - она вспомогательная и, наконец, при помощи функции TextOut выводим надпись «Super!» в точке канвы формы с координатами (30,60). Эта функция даже в хелпе по Делфи есть.

 

Ссылки по теме


 Распечатать »
 Правила публикации »
  Написать редактору 
 Рекомендовать » Дата публикации: 29.12.2006 
 

Магазин программного обеспечения   WWW.ITSHOP.RU
SAP CRYSTAL Server 2013 WIN INTL 5 CAL License
IBM DOMINO ENTERPRISE CLIENT ACCESS LICENSE AUTHORIZED USER ANNUAL SW SUBSCRIPTION & SUPPORT RENEWAL
Kaspersky Endpoint Security для бизнеса – Стандартный Russian Edition. 10-14 Node 1 year Base License
ABBYY FineReader Pro для Mac, электронный ключ
ZBrush 4R6 Win Commercial Single License ESD
 
Другие предложения...
 
Курсы обучения   WWW.ITSHOP.RU
 
Другие предложения...
 
Магазин сертификационных экзаменов   WWW.ITSHOP.RU
 
Другие предложения...
 
3D Принтеры | 3D Печать   WWW.ITSHOP.RU
 
Другие предложения...
 
Новости по теме
 
Рассылки Subscribe.ru
Информационные технологии: CASE, RAD, ERP, OLAP
Новости ITShop.ru - ПО, книги, документация, курсы обучения
Программирование на Microsoft Access
CASE-технологии
СУБД Oracle "с нуля"
Мир OLAP и Business Intelligence: новости, статьи, обзоры
Windows и Office: новости и советы
 
Статьи по теме
 
Новинки каталога Download
 
Исходники
 
Документация
 
 



    
rambler's top100 Rambler's Top100