Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   Error al crear un componente muy simple. (https://www.clubdelphi.com/foros/showthread.php?t=18830)

ALMERA 24-02-2005 09:07:12

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.

roman 24-02-2005 09:15:20

En SetIpServers prueba poner

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

// Saludos

ALMERA 24-02-2005 09:49:26

Gracias Roman pero me sigue dando el mismo error.

roman 24-02-2005 18:29:06

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


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

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