Показать сообщение отдельно
  #7  
Старый 15.05.2017, 09:50
Аватар для Decoding
Decoding Decoding вне форума
Местный
 
Регистрация: 03.06.2006
Адрес: Почту найдете на моем сайте
Сообщения: 576
Версия Delphi: D10.2
Репутация: 214
По умолчанию

Возможно с 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), и тогда описанный выше способ будет очень кстати.

Зачем кнопке канва, это уже другой вопрос (просто поверьте, бывают случаи когда она необходима).
Ответить с цитированием