![]() |
|
#7
|
||||
|
||||
![]() Возможно с TPanel пример не совсем корректный, но в общем случае он правильный, например для TButton.
Канвой обладают все графические компоненты (наследники от TGraphicControl), но не все оконные компоненты. Те компоненты, которые наследуются от TCustomControl, имеют канву, к таким компонентам относится и панель. Код:
TCustomControl = class(TWinControl) private FCanvas: TCanvas; public constructor Create(AOwner: TComponent); override; destructor Destroy; override; end; { TCustomControl } constructor TCustomControl.Create(AOwner: TComponent); begin inherited Create(AOwner); FCanvas := TControlCanvas.Create; TControlCanvas(FCanvas).Control := Self; end; destructor TCustomControl.Destroy; begin FCanvas.Free; inherited Destroy; end; А вот к примеру кнопки (TButton) канвы не имеют (они наследуются от TButtonControl), и тогда описанный выше способ будет очень кстати. Зачем кнопке канва, это уже другой вопрос (просто поверьте, бывают случаи когда она необходима). |