PDA

Ver la Versión Completa : Problema de diseño y con canvas.


rojo raton
23-10-2011, 17:28:44
Estoy intentando diseñar una clase TPintor que tenga un método PintarRectangulo() que reciba como parámetro un objeto gráfico sobre el cual se pintará el rectangulo. De antemano Tpintor no sabrá que tipo de objeto recibirá como parámetro, podría ser un Timage,Tlabel,TForm,etc. alguno que implemente el canvas. He visto que esos derivan el Tcanvas de la clase TgraphicControl, intenté usar esa clase en TPintor para trabajar con el canvas pero no me deja hacer lo siguiente

var
G : TgraphicControl;
begin
G:= TgraphicControl.Create(nil);
g.canvas //me dice "undeclared identifier: canvas"
g.Free;
end;

identificador no declarado, como si Tgraphiccontrol no conociese al canvas.
No se si se entiende el problema que quiero resolver. Un saludo.

escafandra
23-10-2011, 20:27:36
El problema está en que Canvas es protected.
La solución mejor es que pases como parámetro el canvas en lugar de un TGraphicControl.

Pero si lo anterior no puede ser, entonces un truco puede ser el siguiente:


unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls;

type
TG = class(TGraphicControl);
TForm1 = class(TForm)
Button1: TButton;
Image1: TImage;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure graf(G: TgraphicControl);
begin
TG(G).Canvas.Rectangle(1,30, 60, 60); // con esto puedo acceder a Canvas... Y pintar un rectángulo
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
graf(Image1);
end;
end.


Saludos.

rojo raton
23-10-2011, 23:36:45
Si, que buen truco!
Gracias escafandra. Me ha servido tu ayuda.