Q:How can i add an integer to the object portion of a stringlist item, using AddObject?
R: Sólo echado el valor entero a TObject
List.AddObject('A string',TObject(1));
Q:How can a retrieve the integer back from a object property of stringlist item?
A: moldeada a Entero El valor de los objetos
AValue := Integer(List.Objects[i]);
Q:How do i free all objects and list when done?
A: No es necesario liberar a la lista de objetos, porque no está asignando memoria. así que solo llame al procedimiento Free
del TStringList
.
Probar aplicación muestra
{$APPTYPE CONSOLE}
uses
Classes,
SysUtils;
Var
List : TStringList;
i : Integer;
begin
try
List:=TStringList.Create;
try
//assign the string and some integer values
List.AddObject('A string',TObject(1));
List.AddObject('Another string',TObject(100));
List.AddObject('And another string',TObject(300));
//Get the integer values back
for i:=0 to List.Count - 1 do
Writeln(Integer(List.Objects[i]));
finally
//Free the list
List.free;
end;
except
on E:Exception do
Writeln(E.Classname, ': ', E.Message);
end;
Readln;
end.
Usted se me adelantó, sólo estaba escribiendo una respuesta, pero voy a Upvote la suya en su lugar. Como nota final para OP, no necesita liberar explícitamente ningún objeto, excepto la lista, ya que TStringList libera su lista interna de punteros y no ha creado ningún objeto, solo enteros que están almacenados en esa lista. Esto es lo que RRUZ ha demostrado, solo liberando TSTringList. –
@RRUZ - +1 ¡Guau! Creo que acabas de resolver un problema importante que he tratado de resolver. Me gusta usar pares ID/Value para valores de búsqueda de bases de datos. Entonces, si entiendo correctamente lo anterior, puedo mostrar List.Strings [i] (la parte de valor) en un menú desplegable y usar el Integer asociado (List.Objects [i]) como ForeignKey Id en la base de datos. –
@IElite, he usado un truco similar para almacenar una lista de valores de punto flotante donde la precisión y el rango dinámico no son cruciales (el tipo 'simple' de Delphi es de 4 bytes y puede encasillarse en un puntero). También puede usar un TList si no hay cadenas y los enteros/flotantes son todo lo que desea almacenar. – rossmcm