![]() |
UpdateLayerWindow - Invalid Parameter
Hi,
Habe hier ein Formular mit WS_EX_LAYERED. Jedoch flackert das Fenster relativ stark beim resizen und verschieben. Also schätze ich muss ich beim resizen und verschieben UpdateLayeredWindow aufrufen. Wenn das bis hierhin falsch ist, dann braucht ihr gar nicht weiterzulesen, dann klärt mich auf^^ So ich tue das im Moment so:
Delphi-Quellcode:
Ich bekomme immer den Fehler:
WM_SIZE: begin
// bf: _BLENDFUNCTION bf.BlendOp := AC_SRC_OVER; bf.BlendFlags := 0; bf.AlphaFormat := 0; bf.SourceConstantAlpha := FAlpha; // NewSize: TSize NewSize.cx := FWidth; NewSize.cy := FHeight; if not UpdateLayeredWindow(Handle,0,nil,@NewSize,GetDC(Handle),nil,0,@bf,ULW_ALPHA) ShowMessage(SysErrorMessage(GetLastError)); // Zu testzwecken end; Zitat:
Gruß Neutral General |
Re: UpdateLayerWindow - Invalid Parameter
Wollte mal nachfragen ob mir da vielleicht doch jemand helfen kann?
|
Re: UpdateLayerWindow - Invalid Parameter
Hallo, vielleicht hilft dir
![]() |
Re: UpdateLayerWindow - Invalid Parameter
I saw that there is not anything wrong with UpdateLayeredWindow parameters, you use wrong "if...then" clause.
The correct is
Code:
if not UpdateLayeredWindow(Handle,0,nil,@NewSize,GetDC(Handle),nil,0,@bf,ULW_ALPHA) then
|
Re: UpdateLayerWindow - Invalid Parameter
Hi,
Oh yes I see, but that was only a mistake caused by copy&paste ;) In the original code it looks like this:
Delphi-Quellcode:
@toms: Ne das ist nicht das Problem. Die Deklaration von UpdateLayeredWindow ist bei mir in Ordnung. Benutze Delphi7.
if not UpdateLayeredWindow(Handle,0,nil,@NewSize,GetDC(Handle),nil,0,@bf,ULW_ALPHA) then
ShowMessage('Fehler!'); Gruß Neutral General |
Re: UpdateLayerWindow - Invalid Parameter
I use Delphi 7 also. I complied your code with the correct "if...then" and everything is fine. Maybe there is a library declaration conflict with your Delphi. Some libraries have the same API header but different parameters.
|
Re: UpdateLayerWindow - Invalid Parameter
Setzte AlphaBlend vor dem Aufruf der Funktion UpdateLayerWindow auf False,
und rufe zusätzlich vorher
Delphi-Quellcode:
auf. Dann gibt es keinen Fehler (getestet unter D6 & D2007)
SetWindowLong(Handle, GWL_EXSTYLE, GetWindowLong(Handle, GWL_EXSTYLE) or WS_EX_LAYERED);
Eine Erklärung dafür habe ich noch nicht. Testfunktion:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var Bmp: TBitmap; BlendFunc: TBlendFunction; PosPt, ZeroPt: TPoint; Size: TSize; begin // Create bitmap for our layered window Bmp := TBitmap.Create; Try Bmp.Width := Width; Bmp.Height := Height; Bmp.Canvas.Brush.Color := clBlue; Bmp.Canvas.FillRect(Rect(0, 0, Bmp.Width, Bmp.Height)); {>>>>} AlphaBlend := False; // Enable the layered style SetWindowLong(Handle, GWL_EXSTYLE, GetWindowLong(Handle, GWL_EXSTYLE) or WS_EX_LAYERED); // Assign the bitmap to the layered window BlendFunc.BlendOp := AC_SRC_OVER; BlendFunc.BlendFlags := 0; BlendFunc.SourceConstantAlpha := 128; BlendFunc.AlphaFormat := 0; PosPt := BoundsRect.TopLeft; Size.cx := Width; Size.cy := Height; ZeroPt := Point(0, 0); Win32Check(UpdateLayeredWindow(Handle, GetDC(0), @PosPt, @Size, Bmp.Canvas.Handle, @ZeroPt, clnone, @BlendFunc, ULW_ALPHA)); finally Bmp.Free; end; end; |
Re: UpdateLayerWindow - Invalid Parameter
Zitat:
|
Re: UpdateLayerWindow - Invalid Parameter
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:04 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz