-
Хочу сделать subj. Пробовал разные способы по наитию, но всё как-то криво, или относительно линии скачут буквы, или интервал между ними не соблюдается. Не подскажите ли способ или компонент для реализации. Спасибо...
-
Похоже у тебя с геометрией проблемы.
-
в msdn есть пример, но ссылки не помню
-
Сергей, с геометрией-то нормально, с TTF хуже. А ты только ерничать умеешь, или есть реальная помощь?
-
> с геометрией-то нормально
Сомневаюсь.
> ерничать умеешь
Умею. А ты только "по наитию" умеешь ? Или Гуглём тоже ?)
-
Вот из-за таких мудозвонов я и стараюсь не посещать форумы. Тема закрыта, бзди сколько хочешь, меня тут больше не будет, ЧМО!
-
Оказывается, у тебя не только с геометрией проблемы)
-
> Сергей М. © (03.12.07 16:47) [6]
ага, к психиатру бы... )))
-
> ага, к психиатру бы... )))
Не... Ну мне тоже к психиатру надо, но чтоб на людей на форуме бросаться... Это уже лишнее. :)
-
вот такое впечателние производят на обычных людей форумы, может тут угарный газ какой нибудь? придышались кто сидит, а новым людям не продохнуть..
>Сергей М. © Вы победил этого недостойного новичка, о сергей))))
-
> [9] shlst (12.12.07 14:18) > вот такое впечателние производят на обычных людей форумы, > > может тут угарный газ какой нибудь? придышались кто сидит, > а новым людям не продохнуть..
Хм. Мне в свое время такой наезд Сергея помог осознать некоторые вещи. :)
-
Чтобы появилась возможность гуглить надо хоть иногда отвечать на вопросы. А то напрягает - гуглишь-гуглишь, а ответы - "пойди погугли"...
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;
|