Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Надпись вдоль кривой (например по окружности) [D7, WinXP]


DimaTS ©   (2007-11-29 12:05:00) 

Хочу сделать subj. Пробовал разные способы по наитию, но всё как-то криво, или относительно линии скачут буквы, или интервал между ними не соблюдается. Не подскажите ли способ или компонент для реализации. Спасибо...


klesha28   (2008-03-13 20:22:00) [1]

Чтобы появилась возможность гуглить надо хоть иногда отвечать на вопросы.
А то напрягает - гуглишь-гуглишь, а ответы - "пойди погугли"...

2 DimaTS:
Для написания текста по кривой необходимо каждый символ выводить по-отдельности. А перед выводом каждогосимвола создавать фонт - это нужно из-за того, что там каждый раз указывается необходимый угол наклона. Вывод символа - любой WinAPI функцией, рисующей текст - после SelectObject с указателем на созданный фонт.

Пример (попробуй в OnRepaint для формы):

var
 s: string; //тут будет строка для вывода
 fnt: HFont; //указатель на создаваемый фонт для каждого символа
 FontName: string;
 FontSize: integer;
 i: integer; //для цикла по строке
 f, a: single; // для подсчета кривизны и наклона
begin
 SetBkMode(self.Canvas.Handle, TRANSPARENT); //симолы будут врисовыватся без собственного фона
 SetTextAlign(self.Canvas.Handle, TA_CENTER or VTA_CENTER); //выравнивание символов по их центру

 FontName := 'Tahoma';
 FontSize := 50;

 s := 'Строка по кривой. Длинная. Блаблаблабла-бла-бла. Бла.';

 for i := 1 to Length(s) do
 begin
   f := sin(DegToRad(i*20))*50; // 20 --> "частота",  50 --> амплитуда
   a := (cos(DegToRad(i*20)))*500; // 500 --> от балды

   // создадим фонт - необходимо ради одной-единственной штуки - наклон символа:
   fnt := CreateFont(
     -FontSize, //размер шрифта. :) Постоянно забываю - с минусом это в пунктах, или в пикселах...
     0, //ширина символа
      round(-a), //УГОЛ НАКЛОНА - градусы умноженное на 10 (450 = 45гр)
     0,
     0, //толщина
     0, //наклонные - не путать с углом наклона (см.выше)
     0, //подчеркнутые
     0, //перечеркнутые
     DEFAULT_CHARSET,
     0,
     0,
     5, //Качество прорисовки (5 = ClearType - нет константы в Delphi 7 и ниже)
     DEFAULT_PITCH,
     PChar(FontName) );

   SelectObject(self.Canvas.Handle, fnt); //применяем созданный фонт к контексту
   self.Canvas.TextOut(i*(FontSize div 2), round(f)+100, s[i]); //рисуем символ

   DeleteObject(fnt); //не забываем освобождать
 end;


@!!ex   (2007-12-12 14:25:00) [2]

> [9] shlst   (12.12.07 14:18)
> вот такое впечателние производят на обычных людей форумы,
>
> может тут угарный газ какой нибудь? придышались кто сидит,
> а новым людям не продохнуть..

Хм. Мне в свое время такой наезд Сергея помог осознать некоторые вещи. :)


shlst   (2007-12-12 14:18:00) [3]

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

>Сергей М. ©
Вы победил этого недостойного новичка, о сергей))))


@!!ex   (2007-12-12 09:25:00) [4]

> ага, к психиатру бы... )))

Не... Ну мне тоже к психиатру надо, но чтоб на людей на форуме бросаться... Это уже лишнее. :)


MetalFan   (2007-12-11 09:34:00) [5]


> Сергей М. ©   (03.12.07 16:47) [6]

ага, к психиатру бы... )))


Сергей М.   (2007-12-03 16:47:00) [6]

Оказывается, у тебя не только с геометрией проблемы)


DimaTS   (2007-12-03 16:31:00) [7]

Вот из-за таких мудозвонов я и стараюсь не посещать форумы.
Тема закрыта, бзди сколько хочешь, меня тут больше не будет, ЧМО!


Сергей М.   (2007-12-01 11:40:00) [8]


> с геометрией-то нормально


Сомневаюсь.


> ерничать умеешь


Умею. А ты только "по наитию" умеешь ? Или Гуглём тоже ?)


DimaTS   (2007-11-30 16:58:00) [9]

Сергей, с геометрией-то нормально, с TTF хуже.
А ты только ерничать умеешь, или есть реальная помощь?


MBo   (2007-11-29 15:49:00) [10]

в msdn есть пример, но ссылки не помню


Сергей М.   (2007-11-29 15:09:00) [11]

Похоже у тебя с геометрией проблемы.


Наверх

Титульная страница Поиск, карта сайта Написать письмо