2011-08-30 15 views
11

Utilizando Delphi 7:¿Usar AddObject de TStringList con números enteros?

  • ¿Cómo puedo agregar un número entero a la parte objeto de un artículo StringList, usando AddObject?
  • ¿Cómo puedo recuperar el número entero de un objeto propiedad del elemento de lista de cadenas?
  • ¿Cómo puedo liberar todos los objetos y listar cuando haya terminado?

Respuesta

38

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. 
+1

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. –

+0

@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. –

+0

@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

Cuestiones relacionadas