Новые книги

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

Не секрет, что основная масса софтостроения сосредоточена в секторе так называемой корпоративной разработки: от комплексных информационных систем предприятия до отдельных приложений. Поэтому немалая часть сюжетов касается именно Enterprise Programming.

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

В книге мне хотелось показать наш софтостроительный мир разработки корпоративных информационных систем не с парадного фасада описаний программных сред, подходов и технологий, а изнутри. Насколько это получилось – судить читателю.
Автор руководства — опытный интернет-предприниматель, открывший и раскрутивший 4 интернет-магазина разной тематики. В данном руководстве наиболее полно рассматриваются основные этапы создания магазина, начиная от идеи проекта до получения прибыли.

Читая данное руководство, вы шаг за шагом узнаете все тонкости открытия интернет-магазина.

Вопрос и Ответ 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.010