如何将Form和Panel传递给函数?

问题描述 投票:0回答:1

我有这两个功能

procedure GradiantFill(Control: TCustomControlEx; ColorTop, ColorBtm: TColor); overload;
procedure GradiantFill(Control: TForm; ColorTop, ColorBtm: TColor); overload;

这两个函数都需要访问画布,所以为了访问TPanel的画布,我声明:

TYPE
  TCustomControlEx= class(TCustomControl)    { Control that exposes the Canvas property. It can be used to access TPanel's canvas property for example }
   public
      property Canvas;
   end;

我想将这两个函数合并为一个函数,因此我可以将TForm和TPanel都传递给它。喜欢:

procedure GradiantFill(Control: TWinControl?; ColorTop, ColorBtm: TColor); 

我如何在Delphi中实现这一目标? 问题是TPanel和TForm的共同祖先是TWinControl,但它没有Canvas属性。

delphi canvas delphi-xe7
1个回答
2
投票

你可以使用这样的东西

procedure GradiantFill(Control: TWinControl; ColorTop, ColorBtm: TColor);
var
  Canvas: TCanvas;
begin
  if Control is TCustomControl then
    Canvas:=TCustomControlEx(Control).Canvas
  else if Control is TForm then
    Canvas:=TForm(Control).Canvas
  else
    exit;

  ... 
end;

或者将Canvas作为参数传递而不是Control

procedure GradiantFill(Canvas: TCanvas; ColorTop, ColorBtm: TColor);
© www.soinside.com 2019 - 2024. All rights reserved.