Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Creando componente visual (https://www.clubdelphi.com/foros/showthread.php?t=29545)

piccolo2101 25-01-2006 10:40:38

Creando componente visual
 
Hola,
como digo en el título, estoy creando un componente visual que hereda de TPanel (no hay razón específica por la que lo hice así) y que dentro debe tener 2 TEdit, 1 TLabel y 1 TUpDown. La idea es hacer un componente de selección de hora donde los edit son las horas y minutos. El TupDown manejara los valores de los edit incrementando o decrementando.
Bueno, los problemas o dudas que tengo son:
1.- No puedo crear el componente en vista de diseño.
2.- Si establezco con código los elementos y en el constructor del
compononte los creo y los inserto en el componente con
insertControl no se maneja bien la distribución de estos ya
que si uso el componente y lo reescalo en la vista de diseño de
mi aplicación, los elementos internos del componente
(TEdit,TUpDown) no lo hacen junto a el.
3.- Si en el constructor uso Tedit.create(self) siendo self el propio
componente, simplemente se me cierra el delphi. Gracioso verdad!!
Si le paso el AOwner del mismo constructor, como el Aowner es mi
applicación los elementos del componente aparecen como elementos
sueltos dentro de mi aplicacion en la vista de diseño como si los
hubiera insertado ahi.

Por ahora creo que esos son los problemas que necesito resolver para
poder seguir adelante.

Un saludo y gracias.

Neftali [Germán.Estévez] 25-01-2006 11:25:27

Antes de seguir por ahí, yo revisaría la ayuda y documentación sobre Frames.
De todas formas si quiere hacer pruebas, haz lo siguiente:

Para la definición de la clase:
Código Delphi [-]
  TEditHours = class(TPanel)
  private
    FEdit1: TEdit;
    FEdit2: TEdit;
    FLabel1: TLabel;
  public
    constructor Create(AOwner: TComponent); override;
    destructor Destroy; override;
  published
    property Edit1:TEdit read FEdit1 write FEdit1;
    property Edit2:TEdit read FEdit2 write FEdit2;
    property Label1:TLabel read FLabel1 write FLabel1;
  end;

El Create:

Código Delphi [-]
constructor TEditHours.Create(AOwner: TComponent);
begin

  inherited;

  Self.Height := 23;
  Self.Width := 200;
  Self.Caption := '';

  FLabel1 := TLabel.Create(Self);
  FLabel1.Parent := Self;
  FLabel1.Top := 5;
  FLabel1.Left := 3;
  FLabel1.Width := 20;
  FLabel1.Caption := 'Hora: ';

  FEdit1 := TEdit.Create(Self);
  FEdit1.Parent := Self;
  FEdit1.Top := 1;
  FEdit1.Left := 30;
  FEdit1.Width := 75;

  FEdit2 := TEdit.Create(Self);
  FEdit2.Parent := Self;
  FEdit2.Top := 1;
  FEdit2.Left := 110;
  FEdit2.Width := 75;
end;

Y el Free:

Código Delphi [-]
destructor TEditHours.Destroy;
begin

  FLabel1.Free;
  FEdit1.Free;
  FEdit2.Free;

  inherited;
end;

Funciona en diseño y en ejecución. Y puedes añadir más componentes de forma similar.

piccolo2101 25-01-2006 11:47:18

Muchas gracias. La verdad es que revisando mi código me di cuenta que al cambiar los self de los create tambien lo hice en el create inherited del constructor y claro...por eso se cerraba el delphi. Ahora estoy en el punto que tu me has dejado pero no consigo hacer que en tiempo de diseño se ajuste todo al espacio definido al insertar el componente y que si lo escalo para ajustar el tamaño los elementos también lo hagan.

Un saludo y nuevamente gracias.

piccolo2101 25-01-2006 11:53:40

Hola,

supuse que igual podía usar el onResize del propio componente y así es.
Gracias por la ayuda.

Neftali [Germán.Estévez] 25-01-2006 14:13:45

Puede que no haga falta programar nada; Tal vez si juegas con algun panel y la propiedad Anchors puedas conseguirlo.


La franja horaria es GMT +2. Ahora son las 22:13:03.

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