我想創建透明的子窗口。如何創建兒童分層透明窗口?
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,點擊通過,所以我知道窗口被移動了。
所以問題是如何讓孩子透明窗口沒有這些功能? (只是普通的窗口隨它移動)
Delphi窗體有一個你可以設置的'AlphaBlendValue'屬性。這將使表格透明。爲什麼要使用API調用,請參閱:http://docwiki.embarcadero.com/VCL/XE2/en/Forms.TForm.AlphaBlendValue – Johan
@Johan:屬性AlphaBlendValue只能讓我的窗口不斷透明。對我來說不夠... – Astronavigator
您能否添加您在移動Form1時看到的內容的截圖?我不完全明白你會得到什麼樣的行爲。 Form2是否以Form1爲準?當你移動Form1時,它是否可以渲染,但是敵人Form2會保持原來的位置,或者你看到一個「蹤跡」,或者......? –