Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > OOP
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Coloboración Paypal con ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 15-01-2004
Descendents Descendents is offline
Miembro
 
Registrado: may 2003
Ubicación: Barcelona
Posts: 396
Poder: 24
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
  #2  
Antiguo 15-01-2004
Descendents Descendents is offline
Miembro
 
Registrado: may 2003
Ubicación: Barcelona
Posts: 396
Poder: 24
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
  #3  
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.964
Poder: 29
delphi.com.ar Va camino a la fama
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
  #4  
Antiguo 15-01-2004
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Cita:
Empezado por delphi.com.ar
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.
¿Has probado esto?

Estuve haciendo pruebas al respecto y también me marca errores (aún quitando la línea que indicas), uno montón de "Access violation" e "Invalid pointer operation" y no queda más que Ctrl-Alt-Supr.

Esto sucede cuando se inserta la componente durante el diseño y creo que tiene que ver con el hecho de que el Designer no se entera de la componente creada.

También intenté usar InsertControl y aunque los errores no fueron tan catastróficos aún apareción uno aunque esto último ya no lo probé con detalle.

// Saludos

Última edición por roman fecha: 15-01-2004 a las 20:24:08. Razón: Un penoso error ortográfico
Responder Con Cita
  #5  
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.964
Poder: 29
delphi.com.ar Va camino a la fama
Pues, si lo he probado.... Este fue el texto original de mi respuesta, solo que lo resumí (bastante) porque creí que lo estaba complicando:

Bueno, te comento que he probado tu código y el error solo lo da si el Owner del TEdit2 destruye al componente, si lo destruyes "a mano" no se produce esto, lo que me lleva a sospechar que el problema es que primero se ejecuta el destroy del TWinControl y luego el de TComponent, que quiero decir con esto, que el form libera primero a todos los componentes relacionados por el Parent y luego los relacionados por el Owner, y como accede a la lista de abajo hacia arriba, destruye primero el botón y luego al edit, entonces cuando quieres destuír el botón explícitamente en el Destroy da un access violation, solución: elimina la línea Fboton.Free, total queda siempre eliminado cuando se elimina el TEdit, por su relación Owner.
__________________
delphi.com.ar

Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla.
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.964
Poder: 29
delphi.com.ar Va camino a la fama
¿Has recompilado el paquete donde tienes instalado el componente?... porque si lo cambias solo en RunTime, el exe funcionará sin problemas pero el IDE fallará porque conserva una versión antigua del componente.
__________________
delphi.com.ar

Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla.
Responder Con Cita
  #7  
Antiguo 15-01-2004
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Cita:
Empezado por delphi.com.ar
¿Has recompilado el paquete donde tienes instalado el componente?
Sí claro. Acabo de hacerlo nuevamente y pasó esto:

1. Inserté el componente
2. Cerré el formulario
3. Cerré Delphi

Sin problemas

Y me dije a mí mismo: "MiMismo, algo andabas haciendo mal"
Entonces volví a abrir Delphi e hice:

1. Inserté el componente
2. Cerré Delphi

Accesss violation again.

// Saludos
Responder Con Cita
  #8  
Antiguo 15-01-2004
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Como dije, aún eliminando la línea del Free obtengo errores. Aquí está el codigo completo que según yo coincide con lo que dices:

Código:
unit EditEx;

interface

uses
  SysUtils, Classes, Controls, StdCtrls;

type
  TEditEx = class(TEdit)
  private
    FBoton: TButton;

  protected
    procedure SetParent(AParent: TWinControl); override;

  public
    constructor Create(AOwner: TComponent); override;
  end;

procedure Register;

implementation

procedure Register;
begin
  RegisterComponents('Samples', [TEditEx]);
end;

constructor TEditEx.Create;
begin
  inherited;
  FBoton := TButton.Create(Self);
end;

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

end.
¿Qué me falta?
Responder Con Cita
  #9  
Antiguo 15-01-2004
Descendents Descendents is offline
Miembro
 
Registrado: may 2003
Ubicación: Barcelona
Posts: 396
Poder: 24
Descendents Va por buen camino
Buenas, lo he probado, y a mi aún me sigue dando errores.Me pasa igual que ha roman

Por todos sitios donde he mirado, lo hacen como tu dices, pero no me funciona.

El labelededit que lleva delphi, le he mirado el codigo fuente, y tambien lo hacen igual.

No se, pero no me funciona.

El error es una lista interminable de errores hasta que tengo que reiniciarlo.

Gracias.
__________________
La victoria tiene cien padres. La derrota es huérfana (Napoleón).
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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 13:15:41.


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