如何将 TForm 和 TPanel 传递给函数?
How to pass TForm and TPanel to a function?
我有这两个功能
procedure GradiantFill(Control: TCustomControlEx; ColorTop, ColorBtm: TColor); overload;
procedure GradiantFill(Control: TForm; ColorTop, ColorBtm: TColor); overload;
两个函数都需要访问 canvas 所以为了访问 TPanel 的 canvas,我声明:
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 属性.
你可以使用这样的东西
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);
我有这两个功能
procedure GradiantFill(Control: TCustomControlEx; ColorTop, ColorBtm: TColor); overload;
procedure GradiantFill(Control: TForm; ColorTop, ColorBtm: TColor); overload;
两个函数都需要访问 canvas 所以为了访问 TPanel 的 canvas,我声明:
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 属性.
你可以使用这样的东西
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);