मैं इस आलेख के कोड का उपयोग कर रहा हूं http://melander.dk/articles/alphasplash/ किसी फ़ॉर्म में 32 बिट बिटमैप प्रदर्शित करने के लिए, लेकिन जब मैं किसी छवि के बजाय ठोस रंग बिटमैप का उपयोग करने का प्रयास करता हूं तो WM_NCHITTEST संदेश प्राप्त नहीं होता है और मैं फॉर्म नहीं ले जा सकता। अगर मैं 32 बिटमैप छवि का उपयोग करता हूं तो कोड ठीक काम करता है। मैं यहाँ क्या याद कर रहा हूँ?WM_NCHITTEST WS_EX_LAYERED रूप में काम नहीं कर रहा है
इस कोड है
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
protected
{ Private declarations }
procedure WMNCHitTest(var Message: TWMNCHitTest); message WM_NCHITTEST;
public
{ Public declarations }
end;
var
Form1 : TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var
BlendFunction: TBlendFunction;
BitmapPos: TPoint;
BitmapSize: TSize;
exStyle: DWORD;
Bitmap: TBitmap;
begin
// Enable window layering
exStyle := GetWindowLongA(Handle, GWL_EXSTYLE);
if (exStyle and WS_EX_LAYERED = 0) then
SetWindowLong(Handle, GWL_EXSTYLE, exStyle or WS_EX_LAYERED);
Bitmap := TBitmap.Create;
try
//Bitmap.LoadFromFile('splash.bmp'); //if I use a image the code works fine
Bitmap.PixelFormat := pf32bit;
Bitmap.SetSize(Width, Height);
Bitmap.Canvas.Brush.Color:=clRed;
Bitmap.Canvas.FillRect(Rect(0,0, Bitmap.Width, Bitmap.Height));
// Position bitmap on form
BitmapPos := Point(0, 0);
BitmapSize.cx := Bitmap.Width;
BitmapSize.cy := Bitmap.Height;
// Setup alpha blending parameters
BlendFunction.BlendOp := AC_SRC_OVER;
BlendFunction.BlendFlags := 0;
BlendFunction.SourceConstantAlpha := 255;
BlendFunction.AlphaFormat := AC_SRC_ALPHA;
UpdateLayeredWindow(Handle, 0, nil, @BitmapSize, Bitmap.Canvas.Handle,
@BitmapPos, 0, @BlendFunction, ULW_ALPHA);
Show;
finally
Bitmap.Free;
end;
end;
procedure TForm1.WMNCHitTest(var Message: TWMNCHitTest);
begin
Message.Result := HTCAPTION;
end;
end.
+1, इसका अर्थ क्या न हो, लेकिन मुझे यकीन है कि आप जानते हैं :-) मैं बस अपनी अंतर्ज्ञान से यह समस्या उठा रहा था। – TLama
बहुत बहुत धन्यवाद। – Salvador
@TLama - इतना सुनिश्चित न हो! मैंने आपके उत्तर के लिए वोट दिया क्योंकि मैंने आपके लिए यही सोचा था। वास्तव में, मैं एक विशेषज्ञ नहीं हूं, लेकिन यह स्पष्ट रूप से 'ब्लेंडफंक्शन' में प्रलेखित है। मेरा विचार यह है कि, आपका जवाब भी सही था। इसके साथ एकमात्र समस्या यह थी कि उसने मनमाने ढंग से अल्फा मूल्यों वाली एक छवि बनाई, लेकिन एक-रंग बिटमैप में कोई समस्या नहीं है .. –