gpt4 book ai didi

delphi - 如何创建子分层 alpha 透明窗口?

转载 作者:行者123 更新时间:2023-12-03 15:58:39 25 4
gpt4 key购买 nike

我正在尝试创建透明子窗口。

procedure TForm1.BtnGoClick(Sender: TObject);
var
bmp:TBitmap;
BitmapPos: TPoint;
BitmapSize: TSIZE;
BlendFunction: _BLENDFUNCTION;
exStyle: Cardinal;
begin
bmp := TBitmap.Create;
bmp.LoadFromFile('my32bitbitmap.bmp');
exStyle := GetWindowLongA(Form2.Handle, GWL_EXSTYLE);
if (exStyle and WS_EX_LAYERED = 0) then
SetWindowLong(Form2.Handle, GWL_EXSTYLE, exStyle or WS_EX_LAYERED);
BitmapPos := Point(0, 0);
BitmapSize.cx := bmp.Width;
BitmapSize.cy := bmp.Height;
BlendFunction.BlendOp := AC_SRC_OVER;
BlendFunction.BlendFlags := 0;
BlendFunction.SourceConstantAlpha := 200;
BlendFunction.AlphaFormat := AC_SRC_ALPHA;
UpdateLayeredWindow(Form2.Handle, 0, nil, @BitmapSize, bmp.Canvas.Handle, @BitmapPos, 0, @BlendFunction, ULW_ALPHA);

Windows.SetParent(Form2.Handle, Form1.Handle);
bmp.Free;
end;

它几乎可以工作:Form2 成为 Form1 内漂亮的透明窗口。但看起来 Form2 不随 Form1 移动。当我移动 Form1 时,Form2-Window 也会移动,但在屏幕上我看到了它。当 Form1 移动时,我无法单击 Form2,单击会通过,所以我知道窗口已移动。

所以问题是如何在没有这些功能的情况下使子透明窗口? (只是随父窗口一起移动的普通窗口)

最佳答案

每次移动或调整 Form2 大小后,您都需要调用 UpdateLayeredWindow。或者您可以将其替换为 TCustomTransparentControl 后代。

关于delphi - 如何创建子分层 alpha 透明窗口?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7750224/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com