一下是TPanel在D6中的申明
  TPanel = class(TCustomPanel)
  public
    property DockManager;
  published
    property Align;
    property Alignment;
    property Anchors;
    property AutoSize;
    property BevelInner;
    property BevelOuter;
    property BevelWidth;
    property BiDiMode;
    property BorderWidth;
    property BorderStyle;
    property Caption;
    property Color;
    property Constraints;
    property Ctl3D;
    property UseDockManager default True;
    property DockSite;
    property DragCursor;
    property DragKind;
    property DragMode;
    property Enabled;
    property FullRepaint;
    property Font;
    property Locked;
    property ParentBiDiMode;
    property ParentColor;
    property ParentCtl3D;
    property ParentFont;
    property ParentShowHint;
    property PopupMenu;
    property ShowHint;
    property TabOrder;
    property TabStop;
    property Visible;
    property OnCanResize;
    property OnClick;
    property OnConstrainedResize;
    property OnContextPopup;
    property OnDockDrop;
    property OnDockOver;
    property OnDblClick;
    property OnDragDrop;
    property OnDragOver;
    property OnEndDock;
    property OnEndDrag;
    property OnEnter;
    property OnExit;
    property OnGetSiteInfo;
    property OnMouseDown;
    property OnMouseMove;
    property OnMouseUp;
    property OnResize;
    property OnStartDock;
    property OnStartDrag;
    property OnUnDock;
  end;
你瞧,Canvas 属性被屏蔽了,而其他的被继承了。这是published干的。

解决方案 »

  1.   

    type TMyPanel = class(TCustomPanel)
      published:
      propery Canvas;
      end;((TMyPanel)Panel).Canvas ...
      

  2.   

    在应用程序里实现被TPANEL隐藏起来的TCANVAS属性。不明白你的意思,
      

  3.   

    自己声明啊
    type
      TMyPanel = class(TPanel)
        property Canvas;
      end;
     
      TForm1 = class...
      ...在程序中自己创建控件var Panel1:TMyPanel;
    begin
      Panel1:=TMyPanel.Create(Self);
      Panel1.Parent:=Self;
      Panel1.Left:=10;
      Panel1.Top:=10;
      Panel1.Canvas....//As you like
      ...
    end;
      

  4.   

    type
      THackPanel = class(TCustomPanel);begin
      with THackPanel(Panel1).Canvas do
      begin
        ....
      end;
    end;
      

  5.   

    procedure TForm1.Button2Click(Sender: TObject);var c:TCanvas;begin c:=TControlCanvas.Create; TControlCanvas(c).Control:=Panel1; c.Brush.Style:=bsClear; c.Pen.Color:=clBlue; c.Rectangle(5,5,15,15); c.Free;end;
      

  6.   

    procedure TForm1.Button1Click(Sender: TObject);
    var
      PanelCanvas: TCanvas;
    begin
      PanelCanvas := TControlCanvas.Create;
      TControlCanvas(PanelCanvas).Control := Panel1;
      PanelCanvas.Brush.Style := bsClear;
      PanelCanvas.Pen.Color := clBlue;
      PanelCanvas.Rectangle(2, 2, Panel1.Width - 2, Panel1.Height - 2);
      PanelCanvas.Font.Name:='楷体_GB2312';
      PanelCanvas.Font.Size:=24;
      PanelCanvas.TextOut(Panel1.Width div 2,Panel1.Height div 2,'OK');
      PanelCanvas.Free;
    end;
    拿分过来
      

  7.   

    这样也可以。
    procedure TForm1.Button1Click(Sender: TObject);
    var
      PanelCanvas: TCanvas;
    begin
      PanelCanvas := TControlCanvas.Create;
      PanelCanvas.Handle := GetDC(Panel1.Handle); //////
      PanelCanvas.Brush.Style := bsClear;
      PanelCanvas.Pen.Color := clBlue;
      PanelCanvas.Rectangle(2, 2, Panel1.Width - 2, Panel1.Height - 2);
      PanelCanvas.Font.Name:='楷体_GB2312';
      PanelCanvas.Font.Size:=24;
      PanelCanvas.TextOut(Panel1.Width div 2,Panel1.Height div 2,'OK');
      PanelCanvas.Free;
    end;