Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Problema de diseño y con canvas. (https://www.clubdelphi.com/foros/showthread.php?t=76313)

rojo raton 23-10-2011 17:28:44

Problema de diseño y con canvas.
 
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
Código Delphi [-]
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:

Código Delphi [-]
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.


La franja horaria es GMT +2. Ahora son las 23:21:18.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi