Новые книги

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

Для сотрудников и руководителей отделов маркетинга и продаж, коммерческих директоров.
Сильный бренд, запоминающийся логотип и верное позиционирование – важные составляющие любого успешного бизнеса. В этой книге кратко и доходчиво рассказано, что такое бренд, как его создать, добиться узнаваемости в своей товарной категории и превзойти конкурентов. Примеры из практики всемирно известных компаний помогут избежать многих подводных камней на пути от стартапа к империи, а яркие оригинальные рисунки предельно понятно донесут основные идеи авторов, авторитетных специалистов по брендингу.

Вопрос и Ответ 11

Вопросы и Ответы


      11. Можно ли в Delphi вывести строку повернутую под любым углом?

      Стандартные средства Delphi не позволяют использовать вывод строки текста под произвольным углом, так как в модуле Graphics поля отвечающие за угол поворота строки принудительно обнуляются. Это приводит к необходимости использовать средства API.

      Наверное, лучший способ - это исправить модуль Graphics и разрешить использование произвольного угла поворота во всех объектах сразу. Но такой путь потребует перекомпиляции нескольких модулей и приведет к некорректной работе ваших кодов с другими версиями Delphi. Другой способ - написать процедуру вывода под углом и пользоваться ею при необходимости.

      Чтобы не нарушать существующий порядок вывода строки на экран, будем следовать следующим правилам:

      1. Все параметры шрифта, кроме угла - брать из объекта Font;
      2. Рисовать в контексте Canvas.

      Пример:

      ............

      PROCEDURE FreeTextOut(Canvas: TCanvas; X, Y, A: Integer; S: String);
      VAR

        OldFont, NewFont: hFont;
        lf : TLogFont;

      BEGIN

        {Создаем описание для нового шрифта.}
        WITH lf, Canvas DO BEGIN

          {Устанавливаем текущие для объекта Font параметры, кроме углов.}
          lfHeight := Font.Height;
          lfWidth := 0;
          lfEscapement := A*10; {Угол наклона строки в 0.1 градуса}
          lfOrientation := A*10; {Угол наклона символов в строке в 0.1 градуса}
          if fsBold in Font.Style then lfWeight := FW_BOLD

            else lfWeight := FW_NORMAL;

          lfItalic := Byte(fsItalic in Font.Style);
          lfUnderline := Byte(fsUnderline in Font.Style);
          lfStrikeOut := Byte(fsStrikeOut in Font.Style);
          lfCharSet := DEFAULT_CHARSET;
          StrPCopy(lfFaceName, Font.Name);
          lfQuality := DEFAULT_QUALITY;
          lfOutPrecision := OUT_DEFAULT_PRECIS;
          lfClipPrecision := CLIP_DEFAULT_PRECIS;
          lfPitchAndFamily := DEFAULT_PITCH;

        end;
        {Создаем новый шрифт}
        NewFont := CreateFontIndirect(lf);
        {Выбираем новый шрифт в контекст отображения}
        OldFont := SelectObject(Canvas.Handle, NewFont);
        {Выводим текст на экран ПОД ЗАДАННЫМ УГЛОМ}
        Canvas.TextOut(X, Y, S);
        {Восстанавливаем в контексте старый шрифт}
        SelectObject(Canvas.Handle, OldFont);
        {Удаляем новый шрифт}
        DeleteObject(NewFont);

      END;

      ............

      Созданную процедуру лучше всего оформить в виде модуля.

      Процедура работает аналогично процедуре TextOut, единственное - ей необходимо явно передавать контекст отображения:

    procedure FreeTextOut(Canvas: TCanvas; X, Y, A: Integer; S: String);

      где

      • Canvas - контекст (канва) отображения;
      • X, Y - соответствующие координаты;
      • A - угол поворота строки (в углах);
      • S - выводимая строка.

      Пример:

      ............

      FreeTextOut(Canvas, 100, 100, 45, 'Пример вывода под углом');

      ............

      P.S. Поворачивать можно только векторные и масштабируемые (True Type) шрифты. А шрифт System, используемый Delphi по умолчанию - растровый!


...предыдущая страница следующая...
оглавление





"Вопрос и Ответ 11"
Copyright © "В помощь Веб-Мастеру" (Alexander D. Belyaev) 2005-2024 .
При перепечатке любого материала видимая ссылка на источник "В помощь Веб-Мастеру" и все имена, ссылки авторов обязательны!
Время генерации страницы: 0.013