Исходник программы, показывающей пример создания эффекта отраженного и перевернутого текста.
Особенности исходника
- Поворот текста заключается в изменении свойства шрифта, известного как «escapement», которое определяет угол для текстовой строки в десятых долях градуса. Это выполняется в процедуре InitInvertedText.
- У InitInvertedtext есть еще одна задача - определить межстрочный интервал для текущего шрифта. Методом проб и ошибок я пришел к использованию суммы двух текстовых полей метрик (tmHeight и tmExternalLeading), полученных путем вызова функции GettextMetrics Windows API.
- DrawInvertedText - это процедура, которая рисует строки на указанном холсте на указанной строке относительно правого нижнего угла страницы. Это, конечно же, становится верхним левым углом, когда вы переворачиваете страницу (или монитор) вверх ногами.
- Не все шрифты можно повернуть - в документации указано, что допустимы только шрифты TrueType. Опять же методом проб и ошибок я обнаружил, что некоторые другие могут быть повернуты; некоторые дают странные результаты. Я добавил диалоговое окно выбора шрифта в основную форму, чтобы вы могли поиграть с характеристиками шрифта и увидеть результат.
- Еще одна хитрость, обнаруженная при написании этого, - это вставка в Delphi пар возврата каретки / перевода строки (CR / LF) в текст, введенный в свойство TMemo Lines во время разработки. Эти жесткие разрывы приводят к ужасно выглядящему результату, если характеристики шрифта или размеры области отображения изменяются во время выполнения. Мое исправление - процедура MemoFixUp, которая удаляет все пары CR / LF, если не найдены две последовательные пары. Поэтому, если вы дважды нажмете Enter при вводе текста во время разработки, появится пустая строка. Это хороший визуальный разделитель абзацев, который MemoFixUp будет учитывать.
- Я переместил три описанные выше процедуры в отдельный блок, U_InvertedText, чтобы упростить их использование в других программах. Они вызываются из модуля основной формы U_TextInvertedText.
- Наконец, есть некоторые проблемы, характерные только для печати. Поскольку разрешение принтеров обычно намного выше, чем разрешение мониторов, простое растягивание изображения на мониторе до размера страницы обычно неадекватно. Лучшее решение - просто воссоздать изображение на холсте принтера таким же образом, как оно было создано изначально. Код Windows, который генерирует символы, достаточно умен, чтобы проверять разрешение устройств вывода и соответствующим образом настраивать размеры символов, чтобы поддерживать довольно однородный внешний вид.
Просмотры: 818
Скачивания: 11
|