Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > OOP
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 14-01-2004
Descendents Descendents is offline
Miembro
 
Registrado: may 2003
Ubicación: Barcelona
Posts: 396
Poder: 22
Descendents Va por buen camino
creando componente

Tengo una pregunta, ¿como puedo yo en un determinado procedure dentro de mi componente, crear otro componente? pero que el parent sea el parent de mi componente.NO que el parent sea el mismo componente.

Es decir pongamos que hago un componetne que hereda de un tbutton, pero en el on create del mismo, que cree un tmemo, en el form , no dentro del boton.Dentro del boton seria, paren := self;

He probado parent := self.parent; pero entonces no me aparece nada.

Gracias.

La finalidad, es que en un deterrminado procedimiento o evento o lo que sea, poder crear un determinado componente, pero que el parent sea el form, o sino el parent de mi componente.

Seria que cuando pongo Tmibutton en el formulario, apreciera Tmibutton, y un Tmemo en una determinada posicion, quien dice tmemo, dice lo que sea.

Saludos
Muchas gracias
__________________
La victoria tiene cien padres. La derrota es huérfana (Napoleón).
Responder Con Cita
  #2  
Antiguo 14-01-2004
Avatar de delphi.com.ar
delphi.com.ar delphi.com.ar is offline
Federico Firenze
 
Registrado: may 2003
Ubicación: Buenos Aires, Argentina *
Posts: 5.932
Poder: 27
delphi.com.ar Va por buen camino
La solución es lo que tu propones, fíjate que el código que muestras no este dentro de un with, ten en cuenta que en el create del componente aún no esta asignado el parent del mismo.

Código:
constructor TMiComponente.Create(AOwner: TComponent); override;
begin
  inherited;
  FBoton := TButton.Create(Self);
end;

procedure TMiComponente.SetParent(AParent: TWinControl); override;
begin
  inherited;
  FBoton.Parent := AParent;
end;
en el caso que sea en un procedure como vos decís:

Código:
procedure TMiComponente.CrearBoton;
begin
  FBoton := TButton.Create(Self);
  FBoton.Parent := Parent;
end;
Saludos!
__________________
delphi.com.ar

Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla.
Responder Con Cita
  #3  
Antiguo 15-01-2004
Descendents Descendents is offline
Miembro
 
Registrado: may 2003
Ubicación: Barcelona
Posts: 396
Poder: 22
Descendents Va por buen camino
Cita:
ten en cuenta que en el create del componente aún no esta asignado el parent del mismo.
Pues este era mi problema, ya me funciona.
Gracias de nuevo
__________________
La victoria tiene cien padres. La derrota es huérfana (Napoleón).
Responder Con Cita
  #4  
Antiguo 15-01-2004
Descendents Descendents is offline
Miembro
 
Registrado: may 2003
Ubicación: Barcelona
Posts: 396
Poder: 22
Descendents Va por buen camino
Uso windows Xp y delphi 7 lo digo por si acaso.

cuando se trata de procedimiento ningún problema, el parent se asinga bien y todo.Pero lo de setparent al crear el componente, en momento de diseño todo bien, pero cuando compilo, y cierro la aplicación me da un error bastante grande, que tengo que volver a reiniciar el delphi..

Este es mi codigo de un componente simple y me da error.Haber si podeis decirme porfavor donde esta el error.Ahora que lo pienso igual el error esta en el destroy, por que es cuando me da error.

Código:
unit Edit2;

interface

uses
  SysUtils, Classes, Controls, StdCtrls;

type
  TEdit2 = class(TEdit)
  private
  Fboton :Tbutton;
    { Private declarations }
  protected
    procedure SetParent(AParent: TWinControl); override;
    { Protected declarations }
  public
    constructor Create(AOwner : TComponent); override;    {Constructor}
    destructor  Destroy; override;
    { Public declarations }
  published
    { Published declarations }
  end;

procedure Register;

implementation

procedure Register;
begin
  RegisterComponents('Lezandi', [TEdit2]);
end;


constructor TEdit2.Create(AOwner: TComponent);
begin
  inherited;
  FBoton := TButton.Create(Self);
end;

destructor TEdit2.Destroy;
begin
  Fboton.free;
  inherited;
end;

procedure Tedit2.SetParent(AParent: TWinControl);
begin
  inherited;
  FBoton.Parent := AParent;
end;

end.

Gracias
Saludos
__________________
La victoria tiene cien padres. La derrota es huérfana (Napoleón).
Responder Con Cita
  #5  
Antiguo 15-01-2004
Descendents Descendents is offline
Miembro
 
Registrado: may 2003
Ubicación: Barcelona
Posts: 396
Poder: 22
Descendents Va por buen camino
debugueando he visto que el error me lo da en el destroy justo en el inherited.

Hago algo mal, que cuando la aplicacion se cierra, por culpa del parent, me da un error que me hace reiniciar el programa entero.

Gracias de antemano
__________________
La victoria tiene cien padres. La derrota es huérfana (Napoleón).
Responder Con Cita
  #6  
Antiguo 15-01-2004
Avatar de delphi.com.ar
delphi.com.ar delphi.com.ar is offline
Federico Firenze
 
Registrado: may 2003
Ubicación: Buenos Aires, Argentina *
Posts: 5.932
Poder: 27
delphi.com.ar Va por buen camino
Tienes un problema en el orden de liberación de los componentes, solución: elimina la línea Fboton.Free, total queda siempre eliminado cuando se elimina el TEdit, por su relación Owner.

Saludos!
__________________
delphi.com.ar

Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 01:40:06.


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
Copyright 1996-2007 Club Delphi