如何实现IMAGE控件的半透明效果,想用此做界面特效([阿胡]工作室)
解决方案 »
- 怎样把一个浮点数存放到文件中?
- XMLDocument的问题,偶尔访问出错,百思不得其解。
- 遇到一个quickreport难题,希望这方面的高手帮帮我
- 在ServerSocket和ClientSocket中能否获得某个会话Socket的Server端和Client端的Port值?
- 请问OA程序员有前途吗,主要是做什么工作的?
- 如何遍历整个硬盘
- 大虾,可怜一下吧,我都提前了N次了
- 如何让form1一运行就自动成为最大化窗口?
- 急!!!哪儿有 InstallShield Express for Delphi 6 下载
- 都睡觉了么?给小弟解决个小问题吧?
- 请问delphi里double类型精确到小数点几问呢?
- 动态创建组件的赋值问题
http://community.csdn.net/Expert/topic/5050/5050346.xml?temp=7.743472E-02
http://www.2ccc.com/article.asp?articleid=3131
TForm1 = class(TForm)
Image1: TImage;
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
OldWndProc: TWndMethod;
procedure ImageWndProc(var Message: TMessage);
public
{ Public declarations }
end;var
Form1: TForm1;implementationuses GDIPOBJ, GDIPAPI;{$R *.dfm}procedure TForm1.FormCreate(Sender: TObject);
begin
OldWndProc := Image1.WindowProc;
Image1.WindowProc := ImageWndProc;
end;procedure TForm1.ImageWndProc(var Message: TMessage);
var
g: TGpGraphics;
Image: TGpImage;
attr: TGpImageAttributes;
clm: TColorMatrix;
I: Integer;
begin
if (Message.Msg = WM_PAINT) and (Message.WParam <> 0) and
not Image1.Picture.Bitmap.Empty then
begin
FillChar(clm, Sizeof(TColorMatrix), 0);
for I := 0 to 4 do
clm[I, I] := 1;
clm[3, 3] := 0.5;
attr := TGPImageAttributes.Create;
try
attr.SetColorMatrix(clm);
g := TGpGraphics.Create(HDC(Message.WParam));
try
with Image1.Picture.Bitmap do
Image := TGpBitmap.Create(Handle, Palette);
try
g.DrawImage(Image, MakeRect(0, 0, Image1.Width, Image1.Height), 0, 0, Image.GetWidth, Image.GetHeight, UnitPixel, attr);
finally
Image.Free;
end;
finally
g.Free;
end;
finally
attr.Free;
end;
Exit;
end;
OldWndProc(Message);
end;
clm[3, 3] := 0.5;
var
g: TGpGraphics;
Image: TGpImage;
attr: TGpImageAttributes;
clm: TColorMatrix;
I, W, H: Integer;
begin
if (Message.Msg = WM_PAINT) and (Message.WParam <> 0) and
not Image1.Picture.Bitmap.Empty then
begin
FillChar(clm, Sizeof(TColorMatrix), 0);
for I := 0 to 4 do
clm[I, I] := 1;
clm[3, 3] := 0.5;
attr := TGPImageAttributes.Create;
try
attr.SetColorMatrix(clm);
g := TGpGraphics.Create(HDC(Message.WParam));
try
with Image1.Picture.Bitmap do
Image := TGpBitmap.Create(Handle, Palette);
try
if not Image1.AutoSize and Image1.Stretch then
begin
W := Image1.Width;
H := Image1.Height;
end else
begin
W := Image.Width;
H := Image.Height;
end;
g.DrawImage(Image, MakeRect(0, 0, W, H), 0, 0, Image.GetWidth, Image.GetHeight, UnitPixel, attr);
finally
Image.Free;
end;
finally
g.Free;
end;
finally
attr.Free;
end;
Exit;
end;
OldWndProc(Message);
end;