Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Окно по рисунку

Delphi , Программа и Интерфейс , Интерфейс

Окно по рисунку


Разбойному нападению сотрудников фирмы "Майкрософт" подверглась штаб-квартира компании "Sun". Хулиганы вышибли в здании все двери и взамен установили окна.


TStretchHandle = class(TCustomControl)
  private
    procedure WMEraseBkgnd(var message: TWMEraseBkgnd); message WM_ERASEBKGND;
    procedure WMGetDLGCode(var message: TMessage); message WM_GETDLGCODE;
  protected
    procedure Paint; override;
    property Canvas;
  public
    procedure CreateParams(var Params: TCreateParams); override;
end;

procedure TStretchHandle.CreateParams(var Params: TCreateParams);
begin
  { set default Params values }
  inherited CreateParams(Params);
  { then add transparency }
  Params.ExStyle := Params.ExStyle + WS_EX_TRANSPARENT;
end;

procedure TStretchHandle.WMGetDLGCode(var message: TMessage);
begin
  { completely fake erase, don't call inherited, don't collect $200 }
  message.Result := DLGC_WANTARROWS;
end;

procedure TStretchHandle.WMEraseBkgnd(var message: TWMEraseBkgnd);
begin
  { completely fake erase, don't call inherited, don't collect $200 }
  message.Result := 1;
end;

procedure TStretchHandle.Paint;
begin
  inherited Paint;
  with Canvas do
  begin
    // рисуете что нужно -
    // где не рисовали, там будет "прозрачно"
  end;
end;

Программный код на языке Delphi для создания пользовательского контрола TStretchHandle, который имитирует поведение окна с прозрачным фоном и функцией подделки удаления.

Вот разбивка каждого процедуры:

  1. CreateParams: Этот метод вызывается при создании контрола, и он устанавливает некоторые параметры по умолчанию для контрола. В этом случае, он добавляет стиль WS_EX_TRANSPARENT, чтобы сделать контрол прозрачным.
  2. WMGetDLGCode: Этот метод вызывается, когда контрол получает сообщение WM_GETDLGCODE (которое обычно отправляется Windows, чтобы спросить, хочет ли контрол обработать ввод клавиатуры). Код возвращает DLGC_WANTARROWS, что означает, что контрол позволит использовать стрелки.
  3. WMEraseBkgnd: Этот метод вызывается, когда контрол получает сообщение WM_ERASEBKGND (которое обычно отправляется Windows, чтобы спросить, хочет ли контрол удалить свой фон). Код возвращает 1, что означает, что контрол не будет удалять свой фон.

Процедура Paint - это место, где происходит фактическая живопись контрола. В этом случае, она вызывает метод Paint, унаследованный от предка, а затем использует свойство Canvas для выполнения некоторых рисунков (которые в данный момент комментированы).

Комментарий о "прозрачно" области, я предполагаю, что это русское слово, означающее "прозрачный". Автор, вероятно, намекает на то, что любые области контрола, где не происходит рисунка, будут прозрачными.

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

Альтернативное решение:

Вместо использования WS_EX_TRANSPARENT вы можете использовать функцию AlphaBlend, чтобы достичь прозрачности на Windows-контроле. Это позволит вам контролировать уровень прозрачности более точно и избежать необходимости в подделке удаления.

Пример кода, демонстрирующий использование AlphaBlend:

procedure TStretchHandle.Paint;
begin
  inherited Paint;
  with Canvas do
  begin
    Brush.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




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: Интерфейс ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-06-16 09:00:00/0.0061719417572021/0