Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   ¿Cuando puedo acceder a las variables de un objeto? (https://www.clubdelphi.com/foros/showthread.php?t=69952)

ElDuc 21-09-2010 08:39:33

¿Cuando puedo acceder a las variables de un objeto?
 
Buenos días madrugadores,

Bueno eso es para los que visitan el foro desde España y en este momento, para los demás Buenos/as lo que proceda.

Estoy haciendo un componente derivado de un TImage y dentro del método Create de éste nuevo componente intento dibujar un recuadro que utilice toda la extensión del componente (en tiempo de diseño lo dimensiono de 200x200 pixels), para lo que hago:

Código Delphi [-]
 
    // CLASS TmyComponent ======================================================================================
    TmyComponent= Class(TImage)
    Private
    Public
        Constructor Create(aOwner: TComponent); Override;
        Destructor Destroy; Override;
    Published
    End;

 
Constructor TmyComponent.Create(aOwner: TComponent);
Begin
    Inherited Create(aOwner);
    Canvas.Pen.Color := clBlack;
    Canvas.Brush.Color := clWhite;
    Canvas.Rectangle(0, 0, Width, Height);
End;

Sin embargo esto me dibuja un rectángulo de 105x105, es como si esas medidas fueran las definidas por Delphi y en realidad todavía no se conocen las reales (200x200).

ENtonces ¿cuando puedo dibujar Canvas.Rectangle(0, 0, Width, Height) y que el rectángulo sea de 200x200, es decir ¿en qué momento Width y Height tienen los valores correctos? y ¿cómo puedo conocer ese momento?

Por el momento he puesto un timer a 50 ms y cuando se dispara Width y Height ya tienen el valor 200, pero me parece una chapuza, ¿verdad?

Como siempre agradeceré que intentéis ayudarme.

Saludos.

coso 21-09-2010 11:10:01

Hola,
no veo en ningun momento que establezcas el width y el height a 200. Supongo que lo haces en tiempo de diseño. Si es así, deberias sobreescribir el procedure AfterConstruction, que es justo despues de haberse creado el objeto y cargado el valor de las propiedades desde el stream. Es alla entonces cuando deberias dibujar el rectangulo. Un saludo.

Neftali [Germán.Estévez] 21-09-2010 11:21:16

Yo optaría por hacerlo en el Resize, para que funcione en cualquier momento, tanto en diseño como en ejecución y que se reajuste cuando lo redimensiones.

Código Delphi [-]
...
  protected
    procedure ReSize; override;
...


procedureTmyComponent.ReSize;
begin
  inherited;

  if Assigned(Self.Picture) then begin
    if Assigned(Self.Picture.Graphic) then begin
      Self.Picture.Graphic.Height := Height;
      Self.Picture.Graphic.Width := Width;
    end;
  end;

  Canvas.Pen.Color := clBlack;
  Canvas.Brush.Color := clWhite;
  Canvas.Rectangle(0, 0, Width , Height);

end;

A parte, que es un problema que tienes ahora también, creo que debes "reajustar" el tamaño donde pintas, para ajstarlo al componentes (por eso te está pintando siempre del mismo tamaño).


La franja horaria es GMT +2. Ahora son las 08:08:16.

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