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

Прозрачность

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

Прозрачность


interface

uses
  Windows, Messages, Forms;

type
  TForm1 = class(TForm)
    procedure FormCreate(Sender: TObject);
  end;

const
  WS_EX_LAYERED = $80000;

function SetLayeredWindowAttributes(hWindow : HWND; crKey : DWORD; bAlpha : Byte;
dwFlags : DWORD) : BOOL; stdcall; external user32 name 'SetLayeredWindowAttributes';

var
  Form1: TForm1;

implementation
{$R *.DFM}

procedure TForm1.FormCreate(Sender: TObject);
begin
  SetWindowLong(Handle, GWL_EXSTYLE, GetWindowLong(Handle, GWL_EXSTYLE) or WS_EX_LAYERED);
  SetLayeredWindowAttributes(Handle, 0, Byte(196), 2);
end;

end.

...

const
  WS_EX_LAYERED = $80000;

type
TSetLayeredWindowAttributes = function(hWnd : HWND; crKey : DWORD;
bAlpha : Byte; dwFlags : DWORD) : BOOL; stdcall;

...

procedure TForm1.FormCreate(Sender: TObject);
var
  SetLayeredWindowAttributes : TSetLayeredWindowAttributes;
  hUser32 : HINST;
begin
  SetWindowLong(Handle, GWL_EXSTYLE, GetWindowLong(Handle, GWL_EXSTYLE) or WS_EX_LAYERED);

  hUser32 := LoadLibrary('user32.dll');
  if hUser32 <> 0 then
  begin
    try
      SetLayeredWindowAttributes := GetProcAddress(hUser32, 'SetLayeredWindowAttributes');
      if Assigned(@SetLayeredWindowAttributes) then
        SetLayeredWindowAttributes(Handle, 0, Byte(196), 2);
    finally
      FreeLibrary(hUser32);
    end;
  end;
end;

Код, который я предоставил, - это реализация формы в Delphi, которая настраивает прозрачность окна с помощью функции SetLayeredWindowAttributes из Windows API.

Вот подробное описание того, что код делает:

  1. Обработчик события FormCreate для формы реализован в классе TForm1.
  2. В этом обработчике добавляется флаг стиля окна WS_EX_LAYERED с помощью функции SetWindowLong. Это позволяет окну быть слоем и прозрачным.
  3. Затем вызывается функция SetLayeredWindowAttributes с.handle формы, значением цвета ключа (0 в этом случае), значением альфа (196, что соответствует 49,6% неопределенности) и флагами, указывающими желаемое поведение прозрачности окна.

Вторая версия кода обеспечивает больше гибкости, определив функциональный указатель TSetLayeredWindowAttributes, который указывает на функцию SetLayeredWindowAttributes из Windows API. Это позволяет динамически загружать DLL, содержащую эту функцию, и вызывать ее в runtime, а не связываясь с ней при компиляции.

Вот, как работает вторая версия кода:

  1. Обработчик события FormCreate реализован так же, как и раньше.
  2. Загружается handle библиотеки user32.dll с помощью функции LoadLibrary.
  3. Если библиотека успешно загружена, получается указатель на функцию SetLayeredWindowAttributes с помощью функции GetProcAddress.
  4. Затем вызывается функция SetLayeredWindowAttributes с.handle формы, значением цвета ключа (0 в этом случае), значением альфа (196, что соответствует 49,6% неопределенности) и флагами, указывающими желаемое поведение прозрачности окна.
  5. Наконец, библиотека разгружается с помощью функции FreeLibrary.

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

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


Комментарии и вопросы

Получайте свежие новости и обновления по 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 16:50:07/0.0032370090484619/0