Hi,
What am I doing wrong, or is this another LCL bug? FMyContainer, FLabel and FButton are private field variables of TForm1. I create the three is a TCustomControl descendant that has [csOpaque] excluded from ControlStyle because I want the container component to be transparent. Yet at runtime, the component is NOT transparent.
I am painting a tiled image directly on the Canvas of TForm1, so I should be able to see the background image thru my custom container, but I can't.
Screenshot-1.png = The form with a tiled background image. Screenshot-2.png = The same form as above, but with my three runtime created components added. My custom container seems to be ignoring the csOpaque style.
Below is the complete code for Unit1.pas
-------------------------------------------------------------
unit Unit1;
{$mode objfpc}{$H+}
interfaceuses
Classes, SysUtils, FileUtil, LResources, Forms, Controls, Graphics,
Dialogs, ExtCtrls, StdCtrls;type
TMyContainer = class(TCustomControl)
public
constructor Create(AOwner: TComponent); override;
end;
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
procedure FormPaint(Sender: TObject);
private
FMyContainer: TMyContainer;
FLabel: TLabel;
FButton: TButton;
public
{ public declarations }
end;
var
Form1: TForm1;
implementation{ TForm1 }
procedure TForm1.FormCreate(Sender: TObject);
begin
FMyContainer := TMyContainer.Create(self);
FMyContainer.Parent := self;
FMyContainer.Align := alClient;
FLabel := TLabel.Create(FMyContainer);
with FLabel do
begin
Parent := FMyContainer;
Top := 10;
left := 20;
AutoSize := True;
Caption := 'we are in a custom transparent container';
end;
FButton := TButton.Create(FMyContainer);
with FButton do
begin
Parent := FMyContainer;
Top := 10;
Left := 200;
Caption := 'Click me';
end;
end;
procedure TForm1.FormPaint(Sender: TObject);
var
x, y: Integer;
MyBmp: TPixmap;
begin
MyBmp := TPixmap.Create;
try
MyBmp.LoadFromFile('./login-bckgnd.xpm');
for x := 0 to (Width div MyBmp.Width) do
for y := 0 to (Height div MyBmp.Height) do
Canvas.Draw(x * MyBmp.Width, y * MyBmp.Height, MyBmp);
finally
MyBmp.Free;
end;
end;{ TMyContainer }
constructor TMyContainer.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
// Do not include [csOpaque] because we want a transparent widget.
ControlStyle := [csAcceptsControls, csNoFocus];
end;
initialization
{$I Unit1.lrs}
end.-------------------------------------------------------------
Regards,
- Graeme -
