Veo algunos problemas:
1. Tu código no está indentado por lo que es difícil leerlo. Por favor utiliza la etiqueta [ code ] para que preserve los espacios:
[ code ]
Código:
Linea
Linea indentada
[ /code ]
Aquí la etiqueta tiene espacios alrededor para que se vea pero debes ponerla sin espacios.
Usando la etiqueta, los debidos espacios y líneas en blanco tu código queda así:
Código:
var
Form1: TForm1;
ListaAnimales : TStringList;
implementation
function ObtieneNombreAnimal (Numero: Integer) : String;
begin
result := ListaAnimales.Values[IntToStr(Numero)];
end;
{$R *.dfm}
procedure TForm1.CargaListaAnimales;
begin
if ListaAnimales = nil then
ListaAnimales := TStringList.Create;
with TIniFile.Create ('C:\may.ini') do
try
ReadSection ('ANIMALES', ListaAnimales);
finally
Free;
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
memo1.lines.text:=(ObtieneNombreAnimal(1))
end;
2. No indicas en qué momento sale la excepción ni cuál es ésta. El problema podría ser que llamas a Button1Click antes de CargaListaAnimales lo que implicaría que ListaAnimales aún no ha sido creada.
3. En Button1Click asignas una cadena a la propiedad Text del memo. La propiedad Text reune en conjunto todas las líneas del memo y no estoy seguro de que eso es lo que desees. Quizá prefieras algo como
memo1.lines.add(ObtieneNombreAnimal(1));
4. En general no entiendo muy bien qué es lo que pretendes pero pareciera que deseas asignar una clave (número u otra cosa) a cada cadena para luego poder desplegar la cadena refiriéndote a ella mediante dicha clave. Esto podría hacerse mejor utilizando alguna base de datos. Puedes usar ClientDataSets sin conectarlos a ninguna base "real" y te funciona bien.
// Saludos
pd: Por favor no me tomes a mal lo del código. Es sólo que cuesta trabajo leer código que no está indentado.