L'Aide Delphi nous dit :
« TGraphicControl fournit une propriété Canvas pour accéder à la surface de dessin du contrôle ».
Mais quand je fais, par exemple :
procedure MaProcedure(Control : TControl);
var DC : HDC;
CV : TCanvas;
begin
if Control is TWinControl
then DC := GetDC((Control as TWinControl).Handle); //-->ça passe.
if Control is TGraphicControl
then CV := (Control as TGraphicControl).Canvas; //--> Delphi a changé d'avis : ça passe pas.
end;
D'où ma question :
Comment savoir si le contrôle passé en paramètre possède un Canvas?
ca ne passe pas car canvas est protected sur TGraphicControl
tu peu outrepasser la protection en utilisant l'astuce suivante:
type
TMyGrpCtrl = class(TGraphicControl) end;
procedure MaProcedure(Control : TControl);
var DC : HDC;
CV : TCanvas;
begin
if Control is TWinControl
then DC := GetDC((Control as TWinControl).Handle); //-->ça passe.
if Control is TGraphicControl
then CV := (Control as TMyGrpCtrl ).Canvas;
end;