Новые книги

Хакер — это человек, который чем-то увлечен, будь то компьютеры, написание книг, природа или спорт. Это человек, который, благодаря этой своей увлеченности, испытывает любопытство ко всему, связанному с его увлечением. Если хакер любит компьютеры, то будет стараться узнать как можно больше о компьютерах, а также о том, как ими пользуются другие люди. Хакеры уважают предмет своего увлечения. Для компьютерного хакера это означает уважение к компьютерам, которые предоставляют людям возможность входить в контакт друг с другом и получать информацию со всего мира, а это в свою очередь означает, что он уважает других людей и не допустит умышленного использования своих знаний о компьютерах в целях развлекательных или разрушительных. Серьезный компьютерный взломщик просто хочет знать обо всем, что делается в мире, особенно в мире компьютеров. Настоящий Компьютерный Взломщик — это компьютерный энтузиаст, и, что более важно, вселенский энтузиаст. Я надеюсь, что вы будете энтузиастами.
Почему одни компании процветают, а другие теряют бизнес? Важнейшим инструментом продвижения сегодня стал Интернет. Многое зависит от методов, с помощью которых вы сами, web-студии или рекламные и PR-агентства продвигают ваш бизнес. Методы эти зачастую неэтичны, незаконны и попросту неправильны. Например, продвижение интернет-магазина в корне отличается от продвижения сетевого издания.

В итоге, обладатели интернет-ресурсов ежедневно недополучают огромные прибыли.

Данная книга – первая в нашей стране попытка рассказать обо всех действенных методах рекламы и PR в Интернет. Автор, главный редактор «Российского PR-портала», в течение последних 9 лет успешно использовал эти способы в своей работе. Кроме того книга поможет вам самостоятельно сформулировать – чего вы хотите от собственного сайта.

Издание будет полезно и интернет-специалистам, и новичкам.

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