我需要在表单中使用透明tpanel。谁可以建议我一个好的组件,可能是免费的?如果不是很长可以发布代码或一些关于它的链接?非常感谢。 马塞罗。
答案 0 :(得分:8)
您可以尝试下载Jedi组件库,并查看TjvTransparentPanel组件,一旦安装了该组件库,就可以在“Jv Additional”选项卡下找到它。
答案 1 :(得分:3)
创建一个组件并覆盖Paint方法和其他一些东西:没有边框或标题,但它是一个功能面板。内部的任何组件也需要透明。祝你好运。
unit PanelTransparent;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
ExtCtrls;
type
TPanelTransparent = class (TPanel)
private
procedure CnCtlColorStatic (var Msg: TWMCtlColorStatic); message CN_CTLCOLORSTATIC;
procedure WmEraseBkgnd (var Msg: TWMEraseBkgnd); message WM_ERASEBKGND;
procedure Paint; override;
protected
procedure CreateParams (var Params: TCreateParams); override;
end;
procedure Register;
implementation
procedure Register;
begin
RegisterComponents ('AppMic', [TPanelTransparent]);
end;
procedure TPanelTransparent.CreateParams (var Params: TCreateParams);
begin
inherited CreateParams(Params);
Params.ExStyle := Params.ExStyle or WS_EX_TRANSPARENT;
end;
procedure TPanelTransparent.WmEraseBkgnd(var Msg: TWMEraseBkgnd);
begin
Msg.Result := 1;
end;
procedure TPanelTransparent.CnCtlColorStatic(var Msg: TWMCtlColorStatic);
begin
SetBKMode (Msg.ChildDC, TRANSPARENT);
Msg.Result := GetStockObject (NULL_BRUSH);
end;
procedure TPanelTransparent.Paint;
begin
SetBKMode (Handle, TRANSPARENT);
//inherited;
end;
end.
答案 2 :(得分:0)
为什么不使用TBevel,并将形状设置为bsSpacer,或bsBox或其中一行?如果边界的性质不是问题,您可能会发现已经解决了您的问题。