让一个控件透明,可以看到背面下的图? 现有一个矢量控件,再放有一个IMAGE 控件,想让矢量控件透明,看到IMAGE的图片,请问怎么才能让前面的控件(矢量控件)透明,或者用别的办法实现两样的办法即可。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 看看我的Panel如何透明吧~{******************************************************************************}{ @UnitName : uTransPanel,pas }{ @Project : Budded Software Studio }{ @Copyright : Budded Software Studio }{ @Author : Budded }{ @Description : 透明 Panel }{ @FileVersion : 1.0.0.0 }{ @CreateDate : 2005-08-24 }{ @Comment : 单元评论(代码审查结论) }{ @LastUpdate : Budded, 2005-08-24 }{ @History : Created By Budded, 2005-08-24 10:20 }{******************************************************************************}unit uTransPanel;interfaceuses Windows, Messages, SysUtils, Graphics, Classes, Controls, ExtCtrls, Buttons;type TTransMode = (tmNone, tmSRCCOPY, tmSRCPAINT, tmSRCAND, tmSRCINVERT, tmSRCERASE, tmNOTSRCCOPY, tmNOTSRCERASE, tmMERGECOPY, tmMERGEPAINT, tmPATCOPY, tmPATPAINT, tmPATINVERT, tmDSTINVERT, tmBLACKNESS, tmWHITENESS); TTransPanel = class(TPanel) private { Private declarations } FTransMode: TTransMode; procedure CMCtl3DChanged(var Message: TMessage); message CM_CTL3DCHANGED; procedure WMEraseBkgnd(var Message: TMessage); message WM_ERASEBKGND; procedure WMWindowPosChanging(var Message: TWMWindowPosChanging); message WM_WINDOWPOSCHANGING; function GetTransModeEx: Integer; protected { Protected declarations } Buffer: TBitmap; procedure CreateParams(var Params: TCreateParams); override; procedure Paint; override; procedure Resize; override; public { Public declarations } constructor Create(AOwner: TComponent); override; destructor Destroy(); override; property TransModeEx: Integer read GetTransModeEx; published { Published declarations } property TransMode: TTransMode read FTransMode write FTransMode default tmSRCCOPY; end;procedure Register;implementationprocedure Register;begin RegisterComponents('Budded', [TTransPanel]);end;{ TTransPanel }procedure TTransPanel.CMCtl3DChanged(var Message: TMessage);begin inherited; RecreateWnd;end;constructor TTransPanel.Create(AOwner: TComponent);begin inherited; Buffer := TBitmap.Create; FTransMode := tmSRCCOPY;end;procedure TTransPanel.CreateParams(var Params: TCreateParams);begin inherited; Params.ExStyle := Params.ExStyle + WS_EX_TRANSPARENT;end;destructor TTransPanel.Destroy;begin if Assigned(Buffer) then Buffer.Free; inherited;end;function TTransPanel.GetTransModeEx: Integer;begin Result := 0; case TransMode of //case tmNone: Result := 0; tmSRCCOPY: Result := SRCCOPY; tmSRCPAINT: Result := SRCPAINT; tmSRCAND: Result := SRCAND; tmSRCINVERT: Result := SRCINVERT; tmSRCERASE: Result := SRCERASE; tmNOTSRCCOPY: Result := NOTSRCCOPY; tmNOTSRCERASE: Result := NOTSRCERASE; tmMERGECOPY: Result := MERGECOPY; tmMERGEPAINT: Result := MERGEPAINT; tmPATCOPY: Result := PATCOPY; tmPATPAINT: Result := PATPAINT; tmPATINVERT: Result := PATINVERT; tmDSTINVERT: Result := DSTINVERT; tmBLACKNESS: Result := BLACKNESS; tmWHITENESS: Result := WHITENESS; end; // end caseend;procedure TTransPanel.Paint;var Rect: TRect; TopColor, BottomColor: TColor; procedure AdjustColors(Bevel: TPanelBevel); begin TopColor := clBtnHighlight; if Bevel = bvLowered then TopColor := clBtnShadow; BottomColor := clBtnShadow; if Bevel = bvLowered then BottomColor := clBtnHighlight; end;begin// inherited; Rect := ClientRect;//Rect(0, 0, Width, Height); Buffer.Width := Width; Buffer.Height := Height; Buffer.Canvas.Brush.Style := bsSolid; Buffer.Canvas.Brush.Color := Color; Buffer.Canvas.FillRect(Rect); StretchBlt(Buffer.Canvas.Handle, 0, 0, Width, Height, Canvas.Handle, 0, 0, Width, Height, TransModeEx); if Ctl3D then DrawEdge(Buffer.Canvas.Handle, Rect, BDR_RAISEDINNER, BF_RECT); if BevelOuter <> bvNone then begin AdjustColors(BevelOuter); Frame3D(Buffer.Canvas, Rect, TopColor, BottomColor, BevelWidth); end; if BevelInner <> bvNone then begin AdjustColors(BevelInner); Frame3D(Buffer.Canvas, Rect, TopColor, BottomColor, BevelWidth); end; Buffer.Canvas.Pen.Mode := pmCopy; Buffer.Canvas.Pen.Style := psSolid; Canvas.Draw(0, 0, Buffer);end;procedure TTransPanel.Resize;begin inherited;end;procedure TTransPanel.WMEraseBkgnd(var Message: TMessage);begin Message.Result := 0;end;procedure TTransPanel.WMWindowPosChanging(var Message: TWMWindowPosChanging);begin Invalidate; inherited;end;end. panel 本身是可以透明的 设置一下 绘制透明位图的代码procedure DrawTrans(DestCanvas: TCanvas; X,Y: smallint; SrcBitmap:TBitmap; AColor: TColor);var ANDBitmap, ORBitmap: TBitmap; CM: TCopyMode; Src: TRect;begin ANDBitmap:= NIL; ORBitmap:= NIL; try ANDBitmap:= TBitmap.Create; ORBitmap:= TBitmap.Create; Src := Bounds(0,0, SrcBitmap.Width, SrcBitmap.Height); with ORBitmap do begin Width:= SrcBitmap.Width; Height:= SrcBitmap.Height; Canvas.Brush.Color := clBlack; Canvas.CopyMode := cmSrcCopy; Canvas.BrushCopy(Src, SrcBitmap, Src, AColor); end; with ANDBitmap do begin Width:= SrcBitmap.Width; Height:= SrcBitmap.Height; Canvas.Brush.Color := clWhite; Canvas.CopyMode := cmSrcInvert; Canvas.BrushCopy(Src, SrcBitmap, Src, AColor); end; with DestCanvas do begin CM := CopyMode; CopyMode := cmSrcAnd; Draw(X,Y, ANDBitmap); CopyMode := cmSrcPaint; Draw(X,Y, ORBitmap); CopyMode := CM; end; finally ANDBitmap.Free; ORBitmap.Free; end;end; 请教一个数字签名的函数 再问 dbgrid问题 那里有这个? 三个小问题,帮忙解释一下哦,谢谢 如何在listview内实现个别数据的修改? 谁能帮帮我啊?关于ActiveX Form 发布使用的问题!!! 如何申请MSN? 关于添加组件的几种方式 执行 外部程序 后的等待 如何用程序创建/删除一个windowsxp的网络链接 datagrid控件怎么实现两边得滚动条随时更新??
{******************************************************************************}
{ @UnitName : uTransPanel,pas }
{ @Project : Budded Software Studio }
{ @Copyright : Budded Software Studio }
{ @Author : Budded }
{ @Description : 透明 Panel }
{ @FileVersion : 1.0.0.0 }
{ @CreateDate : 2005-08-24 }
{ @Comment : 单元评论(代码审查结论) }
{ @LastUpdate : Budded, 2005-08-24 }
{ @History : Created By Budded, 2005-08-24 10:20 }
{******************************************************************************}unit uTransPanel;interfaceuses
Windows, Messages, SysUtils, Graphics, Classes, Controls, ExtCtrls, Buttons;type
TTransMode = (tmNone, tmSRCCOPY, tmSRCPAINT, tmSRCAND, tmSRCINVERT, tmSRCERASE,
tmNOTSRCCOPY, tmNOTSRCERASE, tmMERGECOPY, tmMERGEPAINT,
tmPATCOPY, tmPATPAINT, tmPATINVERT, tmDSTINVERT, tmBLACKNESS, tmWHITENESS); TTransPanel = class(TPanel)
private
{ Private declarations }
FTransMode: TTransMode; procedure CMCtl3DChanged(var Message: TMessage); message CM_CTL3DCHANGED;
procedure WMEraseBkgnd(var Message: TMessage); message WM_ERASEBKGND;
procedure WMWindowPosChanging(var Message: TWMWindowPosChanging); message WM_WINDOWPOSCHANGING;
function GetTransModeEx: Integer;
protected
{ Protected declarations }
Buffer: TBitmap;
procedure CreateParams(var Params: TCreateParams); override;
procedure Paint; override;
procedure Resize; override;
public
{ Public declarations }
constructor Create(AOwner: TComponent); override;
destructor Destroy(); override;
property TransModeEx: Integer read GetTransModeEx;
published
{ Published declarations }
property TransMode: TTransMode read FTransMode write FTransMode default tmSRCCOPY;
end;procedure Register;implementationprocedure Register;
begin
RegisterComponents('Budded', [TTransPanel]);
end;{ TTransPanel }procedure TTransPanel.CMCtl3DChanged(var Message: TMessage);
begin
inherited;
RecreateWnd;
end;constructor TTransPanel.Create(AOwner: TComponent);
begin
inherited;
Buffer := TBitmap.Create;
FTransMode := tmSRCCOPY;
end;procedure TTransPanel.CreateParams(var Params: TCreateParams);
begin
inherited;
Params.ExStyle := Params.ExStyle + WS_EX_TRANSPARENT;
end;destructor TTransPanel.Destroy;
begin
if Assigned(Buffer) then
Buffer.Free;
inherited;
end;function TTransPanel.GetTransModeEx: Integer;
begin
Result := 0;
case TransMode of //case
tmNone: Result := 0;
tmSRCCOPY: Result := SRCCOPY;
tmSRCPAINT: Result := SRCPAINT;
tmSRCAND: Result := SRCAND;
tmSRCINVERT: Result := SRCINVERT;
tmSRCERASE: Result := SRCERASE;
tmNOTSRCCOPY: Result := NOTSRCCOPY;
tmNOTSRCERASE: Result := NOTSRCERASE;
tmMERGECOPY: Result := MERGECOPY;
tmMERGEPAINT: Result := MERGEPAINT;
tmPATCOPY: Result := PATCOPY;
tmPATPAINT: Result := PATPAINT;
tmPATINVERT: Result := PATINVERT;
tmDSTINVERT: Result := DSTINVERT;
tmBLACKNESS: Result := BLACKNESS;
tmWHITENESS: Result := WHITENESS;
end; // end case
end;procedure TTransPanel.Paint;
var
Rect: TRect;
TopColor, BottomColor: TColor; procedure AdjustColors(Bevel: TPanelBevel);
begin
TopColor := clBtnHighlight;
if Bevel = bvLowered then TopColor := clBtnShadow;
BottomColor := clBtnShadow;
if Bevel = bvLowered then BottomColor := clBtnHighlight;
end;begin
// inherited; Rect := ClientRect;//Rect(0, 0, Width, Height);
Buffer.Width := Width;
Buffer.Height := Height;
Buffer.Canvas.Brush.Style := bsSolid;
Buffer.Canvas.Brush.Color := Color;
Buffer.Canvas.FillRect(Rect);
StretchBlt(Buffer.Canvas.Handle, 0, 0, Width, Height,
Canvas.Handle, 0, 0, Width, Height, TransModeEx); if Ctl3D then DrawEdge(Buffer.Canvas.Handle, Rect, BDR_RAISEDINNER, BF_RECT); if BevelOuter <> bvNone then
begin
AdjustColors(BevelOuter);
Frame3D(Buffer.Canvas, Rect, TopColor, BottomColor, BevelWidth);
end;
if BevelInner <> bvNone then
begin
AdjustColors(BevelInner);
Frame3D(Buffer.Canvas, Rect, TopColor, BottomColor, BevelWidth);
end; Buffer.Canvas.Pen.Mode := pmCopy;
Buffer.Canvas.Pen.Style := psSolid; Canvas.Draw(0, 0, Buffer);
end;procedure TTransPanel.Resize;
begin
inherited;
end;procedure TTransPanel.WMEraseBkgnd(var Message: TMessage);
begin
Message.Result := 0;
end;procedure TTransPanel.WMWindowPosChanging(var Message: TWMWindowPosChanging);
begin
Invalidate;
inherited;
end;end.
procedure DrawTrans(DestCanvas: TCanvas; X,Y: smallint; SrcBitmap:TBitmap; AColor: TColor);
var
ANDBitmap, ORBitmap: TBitmap;
CM: TCopyMode;
Src: TRect;
begin
ANDBitmap:= NIL;
ORBitmap:= NIL;
try
ANDBitmap:= TBitmap.Create;
ORBitmap:= TBitmap.Create;
Src := Bounds(0,0, SrcBitmap.Width, SrcBitmap.Height);
with ORBitmap do
begin
Width:= SrcBitmap.Width;
Height:= SrcBitmap.Height;
Canvas.Brush.Color := clBlack;
Canvas.CopyMode := cmSrcCopy;
Canvas.BrushCopy(Src, SrcBitmap, Src, AColor);
end;
with ANDBitmap do
begin
Width:= SrcBitmap.Width;
Height:= SrcBitmap.Height;
Canvas.Brush.Color := clWhite;
Canvas.CopyMode := cmSrcInvert;
Canvas.BrushCopy(Src, SrcBitmap, Src, AColor);
end;
with DestCanvas do
begin
CM := CopyMode;
CopyMode := cmSrcAnd;
Draw(X,Y, ANDBitmap);
CopyMode := cmSrcPaint;
Draw(X,Y, ORBitmap);
CopyMode := CM;
end;
finally
ANDBitmap.Free;
ORBitmap.Free;
end;
end;