![]() |
![]() ![]() ![]() ![]() ![]() |
![]() |
Многострочный заголовок у TBitBtn 2Delphi , Компоненты и Классы , КнопкиМногострочный заголовок у TBitBtn 2Я создал удобный компонент, инкапсулирующий обычную кнопку, но с возможностью многострочного заголовка. В *действительности* - это TBitBtn, чей Glyph *нарисован* в виде заголовка с переносом текста. Реальный заголовок невидим. Это работает! Попробуйте с этим поэкспериментировать и сообщите мне о ваших новых находках. Я был удивлен, что это свойство оказалось легко *подавить*. Тем более, что это свойство public/published, а не какой-то кот в мешке. Все это так, но вы можете перекрыть свойство другим с таким же именем и с атрибутом READ ONLY. И вы можете ссылать на свойство предка, как, например, "Inherited Glyph". ООП!
Код, предоставленный ниже, является компонентом TWrapBtn, который наследуется от TBitBtn и добавляет функциональность для многострочного заголовка. Компонент переопределяет несколько методов и свойства родительского класса, чтобы достичь этого. В разделе реализации есть процедура CaptionGlyph, которая создает объект TBitmap, устанавливает шрифт в тот же, что у родительской кнопки, копирует заголовок в буфер, рисует текст на битмапе с помощью DrawText и затем присваивает битмапу свойству Glyph. Функция GetGlyph по умолчанию возвращает '(Н/Д)' (рус. 'Не реализовано'). В методах CMTextChanged, CMFontChanged и WMSize CaptionGlyph вызывается всякий раз, когда текст или шрифт кнопки изменяются, или когда размер окна изменяется. Функции GetMargin по умолчанию возвращает 0. Функция GetSpacing возвращает различные значения в зависимости от того, запущено ли приложение под Windows (12) или нет (6). Функции GetKind, GetLayout и GetNumGlyphs возвращают bkCustom, blGlyphLeft и 1 соответственно. Наконец, есть процедура Register, которая регистрирует компонент в IDE. Идея за этим - предоставить способ для разработчиков иметь многострочный текст в своих кнопках без необходимости создавать custom control или использовать внешнюю библиотеку. Используя свойство Glyph TBitBtn, разработчик может установить текст кнопки по своему желанию и затем вызвать CaptionGlyph для перерисовки глифа с новым текстом. Одной из возможных альтернативных решений могло бы быть создание custom control, наследующегося от TButton вместо TBitBtn, так как это позволило бы более гибкой настройке и расположению. Автор статьи описывает созданный им компонент TWrapBtn, который позволяет использовать кнопку TBitBtn с многострочным заголовком. Комментарии и вопросыПолучайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.
|
|||||
©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007 |