Разбойному нападению сотрудников фирмы "Майкрософт" подверглась штаб-квартира компании "Sun". Хулиганы вышибли в здании все двери и взамен установили окна.
Программный код на языке Delphi для создания пользовательского контрола TStretchHandle, который имитирует поведение окна с прозрачным фоном и функцией подделки удаления.
Вот разбивка каждого процедуры:
CreateParams: Этот метод вызывается при создании контрола, и он устанавливает некоторые параметры по умолчанию для контрола. В этом случае, он добавляет стиль WS_EX_TRANSPARENT, чтобы сделать контрол прозрачным.
WMGetDLGCode: Этот метод вызывается, когда контрол получает сообщение WM_GETDLGCODE (которое обычно отправляется Windows, чтобы спросить, хочет ли контрол обработать ввод клавиатуры). Код возвращает DLGC_WANTARROWS, что означает, что контрол позволит использовать стрелки.
WMEraseBkgnd: Этот метод вызывается, когда контрол получает сообщение WM_ERASEBKGND (которое обычно отправляется Windows, чтобы спросить, хочет ли контрол удалить свой фон). Код возвращает 1, что означает, что контрол не будет удалять свой фон.
Процедура Paint - это место, где происходит фактическая живопись контрола. В этом случае, она вызывает метод Paint, унаследованный от предка, а затем использует свойство Canvas для выполнения некоторых рисунков (которые в данный момент комментированы).
Комментарий о "прозрачно" области, я предполагаю, что это русское слово, означающее "прозрачный". Автор, вероятно, намекает на то, что любые области контрола, где не происходит рисунка, будут прозрачными.
В целом, этот код создает пользовательский контрол с некоторыми необычными свойствами. Использование подделки удаления и прозрачного фона может быть полезно в определенных ситуациях, таких как создание окна, которое сочетается идеально с его родительским окном или фоном.
Альтернативное решение:
Вместо использования WS_EX_TRANSPARENT вы можете использовать функцию AlphaBlend, чтобы достичь прозрачности на Windows-контроле. Это позволит вам контролировать уровень прозрачности более точно и избежать необходимости в подделке удаления.
Пример кода, демонстрирующий использование AlphaBlend:
procedureTStretchHandle.Paint;begininheritedPaint;withCanvasdobeginBrush.Style:=bsClear;// Очистка фонаFont.Style:=[fsBold];// Установка стиля шрифта (опционально)TextOut(0,0,'Hello World!');// Рисование текстаAlphaBlend(0,0,ClientWidth,ClientHeight,// Блендинг с фономCanvas.Handle,0,0,ClientWidth,ClientHeight,System.ARGB(255,255,255));// Установка уровня альфа (0-255)end;end;
В этом примере функция AlphaBlend используется для блэндинга текста с фоном. Вы можете настроить уровень альфа, чтобы контролировать уровень прозрачности. Обратите внимание, что это подход требует Windows XP или более поздней версии для корректной работы.
Помните, что использование AlphaBlend имеет некоторые ограничения и потенциальные проблемы, такие как влияние на производительность или проблемы совместимости с определенным драйвером графических устройств. В некоторых случаях подделка удаления может все еще быть необходимой или более подходящей для вашего конкретного случая использования.
В статье описывается создание окна с прозрачным фоном на языке программирования Delphi, которое позволяет надписям и другим элементам формы проходить сквозь него.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.