delphi如何实现任意窗口透明化?

1
2
3
4
5
6
7
//声明:
SetLayeredWindowAttributes(
Hwnd: THandle; {窗口句柄}
crKey: COLORREF; {透明色}
bAlpha: Byte; {Alpha 值}
dwFlags: DWORD {LWA_COLORKEY(=1)表示使用透明色; LWA_ALPHA(=2)表示使用 Alpha 值}
): Boolean; {是否成功设置}

举例(控制外部程序的透明度, 用计算器举了个例子):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;

type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

{设定计算器的 Alpha 透明}
procedure TForm1.Button1Click(Sender: TObject);
var
h: HWND;
FormStyle: Integer;
begin
h := FindWindow('CalcFrame','计算器');
FormStyle := GetWindowLong(h, GWL_EXSTYLE);
SetWindowLong(h, GWL_EXSTYLE, FormStyle or WS_EX_LAYERED);
SetLayeredWindowAttributes(h, 0, 128, LWA_ALPHA);
end;

{设定计算器中的白色透明}
procedure TForm1.Button2Click(Sender: TObject);
var
h: HWND;
FormStyle: Integer;
begin
h := FindWindow('SciCalc', nil);
FormStyle := GetWindowLong(h, GWL_EXSTYLE);
SetWindowLong(h, GWL_EXSTYLE, FormStyle or WS_EX_LAYERED);
SetLayeredWindowAttributes(h, clWhite, 255, LWA_COLORKEY);
end;

end.
-------------本文已结束赏个小钱吧-------------
×

感谢您的支持,我们会一直保持!

扫码支持
请土豪扫码随意打赏

打开微信扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

64.7K