| Ver tema anterior :: Ver tema siguiente |
| Autor |
Mensaje |
best_guitar Lt


Registrado: 12 Nov 2005Mensajes: 92
|
Publicado: Mie 24 Jun, 2009 8:33 pm Asunto: Propiedad TStrings en diseño. (cannot assign a nil to a..) |
|
|
Hola a todos,
estoy hace unas horas intentando solucionar un problema.
Creo un componente, derivado de TImage, en el cual quiero crear una lista de paths donde estarian ubicados los dibujos correspondientes. Para ello, añado una propiedad lista de tipo TStrings o TStringList, como hago a continuación.
| Código: |
class PACKAGE TImageMejor : public TImage
{
private:
TStrings *lista;
protected:
public:
__fastcall TImageMejor(TComponent* Owner);
__published:
__property TStrings *ListaCaminos = {read=lista,write=lista};
};
|
Sin embargo, al compilar y registrar el componente, al clicar sobre la propiedad ListaCaminos, me aparece el mensaje de error (cannot assign a nil to a TRichEditStrings.)
¿Como puedo invocar el editor de TStrings o TStringList y evitar ese mensaje de error?
Por cierto, en el constructor hago this->lista = NULL;
Imagino que debo crear una instancia de TStrings pero en el constructor del nuevo componente no me ha dejado. ¿Me podeis echar una mano? _________________ Be water my friend. |
|
| Volver arriba |
|
 |
escafandra Master

Registrado: 29 Nov 2007Mensajes: 625Ubicación: Madrid - España
|
Publicado: Mie 24 Jun, 2009 9:37 pm Asunto: |
|
|
Efectivamente, tienes que crear Lista, en caso contrario tendrás error ya que le asignas a ese puntero un valor nulo.
Yo lo crearía en el constructor de tu componente o en el evento OnCreate:
| Código: | lista = new TStrignList; |
No tienes porqué tener ningún problema.
Saludos. |
|
| Volver arriba |
|
 |
_Leo Site Admin

Registrado: 11 Ago 2002Mensajes: 1875Ubicación: Lanzarote - Islas Canarias (España)
|
Publicado: Mie 24 Jun, 2009 9:47 pm Asunto: |
|
|
Ampliando un poco la respuesta de escafandra.. tienes que crear además el método "setlista" para copiar el valor del editor en tiempo de diseño en tu TStringList:
| Código: | class PACKAGE TImageMejor : public TImage
{
private:
TStrings* lista;
protected:
public:
__fastcall TImageMejor(TComponent* Owner);
__fastcall ~TImageMejor();
void __fastcall setlista(TStrings* valor);
__published:
__property TStrings* ListaCaminos = {read=lista, write=setlista};
};
__fastcall TImageMejor::TImageMejor(TComponent* Owner)
: TImage(Owner)
{
lista = new TStringList;
}
__fastcall TImageMejor::~TImageMejor()
{
delete lista;
}
// Esto es necesario para que se copie
// el valor del editor en tu TStringList
void __fastcall TImageMejor::setlista(TStrings* valor)
{
lista->Assign(valor);
} |
|
|
| Volver arriba |
|
 |
|