怎样让panel DBGrid 等元件 为透明
解决方案 »
- Delphi如何将文件夹压缩成zip
- 热烈庆祝第一个DELPHI节!(散分)
- 请问高手:怎么自定义一个对话框?
- 请问如果写一个程序,将所有区位码所表示的字符读出来?
- 什麼函數可以判斷出一個字符串的內容全部是數字
- 诚聘程序员,工作地:深圳市内
- 对一数组快速排序,搞定给分!(在线)!
- 如何在Delphi6 程序中,把数据库(BDE)连接的用户名、密码写进程序中?
- 请教大家一个数据库问题:
- 我用DELPHI打开FOXPRO的表时,为什么提示corrupt table/index header
- 关于image控件双击的问题!!
- 自动登陆网站的软件(用idhttp做的),运行报错,请高手帮我看看问题在哪?
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls;type
TTransPanel = class(TPanel) private ReEntry: Boolean;
FOnPaint: TNotifyEvent; procedure WMEraseBkgnd(var Message: TWmEraseBkgnd); message WM_ERASEBKGND;
procedure WMWindowPosChanged(var Message: TWMWindowPosChanged);
message WM_WINDOWPOSCHANGED; protected procedure CreateParams(var Params: TCreateParams); override;
procedure Paint; override; public property Canvas;
property OnPaint: TNotifyEvent read FOnPaint write FOnPaint; constructor Create(AOwner: TComponent); override;
procedure Invalidate; override; end;implementationconstructor TTransPanel.Create(AOwner: TComponent);
begin
inherited;
with Canvas do begin
Pen.Color := clHighlight;
Pen.Style := psDot;
Brush.Style := bsClear;
end;
ControlStyle := ControlStyle - [csCaptureMouse, csOpaque,
csClickEvents, csDoubleClicks,
csReflector, csMenuEvents,
csNoStdEvents];
end;procedure TTransPanel.CreateParams(var Params: TCreateParams);
begin
Params.ExStyle := Params.ExStyle or WS_EX_TRANSPARENT;
inherited CreateParams(Params);
end;procedure TTransPanel.WMEraseBkgnd(var Message: TWmEraseBkgnd);
var
rc: TRect;
OrgDesignMode: Boolean;
rgn: THandle;
i: Integer;
begin
rgn := CreateRectRgn(0, 0, Width, Height);
try
for i := Parent.ControlCount-1 downto 0 do
if Parent.Controls[0] = Self then
SelectClipRgn(Canvas.Handle, rgn);
finally
DeleteObject(rgn);
end; if ReEntry then exit;
ReEntry := True;
OrgDesignMode := csDesigning in ComponentState;
try
SetDesigning(False);
Visible := False;
rc := BoundsRect;
InvalidateRect(Parent.Handle, @rc, False);
UpdateWindow(Parent.Handle);
Visible := True;
finally
SetDesigning(OrgDesignMode);
ReEntry := False;
Message.Result := 0;
end;
end;procedure TTransPanel.WMWindowPosChanged(var Message:
TWMWindowPosChanged);
begin
inherited;
if HandleAllocated then begin
InvalidateRect(Handle, nil, True);
UpdateWindow(Handle);
end;
end;procedure TTransPanel.Paint;
begin
if Assigned(OnPaint) then OnPaint(Self);
end;procedure TTransPanel.Invalidate;
begin
if HandleAllocated then Perform(WM_ERASEBKGND, 0, 0);
end;end.