Hola,
En el caso del "TPanel" parece ser que no se "publica" la propiedad "Canvas", que cuenta con ella, puesto que desciende de "TWinControl", que es quien la ofrece.
Podrías derivar un componente de "TPanel" y hacer pública su propiedad "Canvas", o, más sencillamente, declarar un tipo como el siguiente a modo de "clase superpuesta" (busca en el Foro sobre esto).
Código Delphi
[-]
type
TPanel = class(ExtCtrls.TPanel)
public
property Canvas;
end;
Dicho tipo tendrías que declararlo antes que el tipo del formulario que contuviera al "Panel". A continuación un ejemplo de todo esto:
Código Delphi
[-]
unit Unit1;
interface
uses
Forms, StdCtrls, Classes, Controls, ExtCtrls;
type
TPanel = class(ExtCtrls.TPanel)
public
property Canvas;
end;
type
TForm1 = class(TForm)
Panel1: TPanel;
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
public
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
begin
Panel1.Canvas.TextOut(10, 10, 'ClubDelphi.com');
end;
end.