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 24-02-2005
ALMERA ALMERA is offline
Miembro
 
Registrado: may 2003
Posts: 42
Poder: 0
ALMERA Va por buen camino
Error al crear un componente muy simple.

Saludos amigos del foro, estoy creando un componente y he definido una propiedad de tipo Strings, compilo mi componente hasta aquí todo bien, pero cuando lo uso en tiempo de diseño he intento entrar en esta propiedad, el inspector de objetos me da el siguiente error: "Cannot assigned a nil to a TRichEditStrings." no comprendo el porque de esto, uso Delphi6 y os paso el código para que lo veais, yo creo que esta todo bién pero si alguién puede ayudarme le estaría muy agradecido, aqui va el código:

unit AMRConsultaRemotaMultihilo;

interface

uses
Windows, Messages, SysUtils, Classes,AMRHiloConsultaSqlRemota,kbmMemTable,DesignIntf,DesignEditors,VCLEditors;

type
TAMRConsultaRemotaMultihilo = class(TComponent)
private
FIpServers:TStrings;
protected
procedure SetIpServers(value:TStrings);
public
Constructor Create;
Destructor Destroy; Override;
published
property IpServers:TStrings read FIpServers write SetIpServers;
end;

procedure Register;

implementation


constructor TAMRConsultaRemotaMultihilo.create;
begin
inherited create(nil);
FIpServers:=TStringList.Create;
end;

Destructor TAMRConsultaRemotaMultihilo.Destroy;
begin
freeandnil(FIpServers);
inherited;
end;


procedure TAMRConsultaRemotaMultihilo.SetIpServers(value:TStrings);
begin
FIpServers.Assign(value);
end;

procedure Register;
begin
RegisterComponents('AMR-SOFT', [TAMRConsultaRemotaMultihilo]);
end;

end.
Responder Con Cita
  #2  
Antiguo 24-02-2005
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
En SetIpServers prueba poner

Código Delphi [-]
if Assigned(Value) then
  FIpServers.Assign(value)
else
  FIpServers.Clear;

// Saludos
Responder Con Cita
  #3  
Antiguo 24-02-2005
ALMERA ALMERA is offline
Miembro
 
Registrado: may 2003
Posts: 42
Poder: 0
ALMERA Va por buen camino
Gracias Roman pero me sigue dando el mismo error.
Responder Con Cita
  #4  
Antiguo 24-02-2005
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
Es cierto, lo que te puse no es necesario. El problema exacto no lo sé pero sí sé dónde se origina. Estás usando un constructor para la componente que rompe el polimorfismo. No sé si tienes alguna razón específica para ello pero el IDE de Delphi se basa en ello para poder construir las componentes durante el diseño. Si haces un debug de tu componente te darás cuenta que de hecho tu constructor nunca es llamado pues al omitir el override, el IDE simplemente llama al constructor de TComponent. Al no ser llamado, tampoco se construye FIpServers.

Para corregir esto cambia la declaración del constructor por:


Código Delphi [-]
constructor Create(AOwner: TComponent); override;

y la implementación por

Código Delphi [-]
inherited Create(AOwner);
FIpServers:=TStringList.Create;

// Saludos
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 03:38:26.


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