Конференция "Media" » Надпись вдоль кривой (например по окружности) [D7, WinXP]
 
  • DimaTS (29.11.07 12:05) [0]
    Хочу сделать subj. Пробовал разные способы по наитию, но всё как-то криво, или относительно линии скачут буквы, или интервал между ними не соблюдается. Не подскажите ли способ или компонент для реализации. Спасибо...
  • Сергей М. © (29.11.07 15:09) [1]
    Похоже у тебя с геометрией проблемы.
  • MBo © (29.11.07 15:49) [2]
    в msdn есть пример, но ссылки не помню
  • DimaTS (30.11.07 16:58) [3]
    Сергей, с геометрией-то нормально, с TTF хуже.
    А ты только ерничать умеешь, или есть реальная помощь?
  • Сергей М. © (01.12.07 11:40) [4]

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


    Сомневаюсь.


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


    Умею. А ты только "по наитию" умеешь ? Или Гуглём тоже ?)
  • DimaTS (03.12.07 16:31) [5]
    Вот из-за таких мудозвонов я и стараюсь не посещать форумы.
    Тема закрыта, бзди сколько хочешь, меня тут больше не будет, ЧМО!
  • Сергей М. © (03.12.07 16:47) [6]
    Оказывается, у тебя не только с геометрией проблемы)
  • MetalFan © (11.12.07 09:34) [7]

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

    ага, к психиатру бы... )))
  • @!!ex © (12.12.07 09:25) [8]
    > ага, к психиатру бы... )))

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

    >Сергей М. ©
    Вы победил этого недостойного новичка, о сергей))))
  • @!!ex © (12.12.07 14:25) [10]
    > [9] shlst   (12.12.07 14:18)
    > вот такое впечателние производят на обычных людей форумы,
    >
    > может тут угарный газ какой нибудь? придышались кто сидит,
    > а новым людям не продохнуть..

    Хм. Мне в свое время такой наезд Сергея помог осознать некоторые вещи. :)
  • klesha28 (13.03.08 20:22) [11]
    Чтобы появилась возможность гуглить надо хоть иногда отвечать на вопросы.
    А то напрягает - гуглишь-гуглишь, а ответы - "пойди погугли"...

    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;
 
Конференция "Media" » Надпись вдоль кривой (например по окружности) [D7, WinXP]
Есть новые Нет новых   [134431   +15][b:0][p:0]