我想创建一个透明面板,其中包含一个透明的PNG图像.我想把这个面板放在其他面板的顶部并看到低谷.
我有下面的代码,但它不接受控件.如果我取消注释注释行,当我将控件放在窗体上时,IDE会引发异常.
unit TransparentPanel5;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Vcl.Controls, ExtCtrls;
type
TTransparentPanel5 = class(TCustomTransparentControl)
private
public
constructor Create(AOwner: TComponent); override;
procedure CreateParams(var Params: TCreateParams); override;
end;
procedure Register;
implementation
constructor TTransparentPanel5.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
//ControlStyle := ControlStyle - [csSetCaption]+ [csAcceptsControls];
end;
procedure TTransparentPanel5.CreateParams(var Params: TCreateParams);
begin
inherited CreateParams(Params);
// Params.ExStyle := Params.ExStyle + WS_EX_Transparent;
// ControlStyle := ControlStyle - [csOpaque] + [csAcceptsControls]
end;
procedure Register;
begin
RegisterComponents('His', [TTransparentPanel5]);
end;
end.
Run Code Online (Sandbox Code Playgroud)
你有两个不相关的问题.我选择回答第二个问题.
IDE会引发AV,因为您无法正确应用扩展样式.您必须使用或运算符来设置位.当你使用+时,你加上样式位的值并最终得到一个完全不同的含义,在这种情况下,有些WS_EX_MDICHILD会导致CreateWindowEx调用失败.
应该是这样的:
procedure TTransparentPanel5.CreateParams(var Params: TCreateParams);
begin
inherited CreateParams(Params);
Params.ExStyle := Params.ExStyle or WS_EX_Transparent;
// ControlStyle := ControlStyle - [csOpaque] + [csAcceptsControls]
end;
Run Code Online (Sandbox Code Playgroud)
请注意,它TCustomTransparentControl已经设置了扩展样式,因此不会产生任何影响.
| 归档时间: |
|
| 查看次数: |
147 次 |
| 最近记录: |