一下是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干的。
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干的。
published:
propery Canvas;
end;((TMyPanel)Panel).Canvas ...
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;
THackPanel = class(TCustomPanel);begin
with THackPanel(Panel1).Canvas do
begin
....
end;
end;
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;
拿分过来
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;