2011-08-30 6 views
11

デルファイ7の使用:TStringListのAddObjectを整数で使用していますか?

  • がどのように私はSTRINGLIST項目の対象部分に整数を追加することができますが、 AddObjectを使用していますか?
  • オブジェクトから整数を取得するにはどうすればいいですか? stringlist itemのプロパティ?
  • すべてのオブジェクトを解放し、完了したら をリストするにはどうすればよいですか?

答えて

38

Q:How can i add an integer to the object portion of a stringlist item, using AddObject?

A:ちょうどTObject

List.AddObject('A string',TObject(1)); 

Qに整数値をキャスト:How can a retrieve the integer back from a object property of stringlist item?

A:キャストへオブジェクト値を整数

AValue := Integer(List.Objects[i]); 

Q:How do i free all objects and list when done?

A:あなたはメモリを割り当てていないので、あなたは、オブジェクトのリストを解放する必要はありません。 TStringListFreeプロシージャを呼び出すだけです。

あなたはそれに私を打つこのサンプルアプリ

{$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

を試してみて、私は答えを書いていたが、私が代わりにあなたをupvoteます。 OPへの最後のメモとして、リスト以外のオブジェクトを明示的に解放する必要はありません.TStringListはポインタの内部リストを解放し、オブジェクトを作成せず、そのリストに格納されている整数のみを作成します。これはRRUZが示しているもので、TSTringListを解放するだけです。 –

+0

@RRUZ - +1うわー!私はあなたが私にとって大事な問題を解決したと思っています。私は、データベース参照値にID /値ペアを使用するのが好きです。だから私は上記を正しく理解すれば、ドロップダウンにList.Strings [i](値の部分)を表示し、関連するInteger(List.Objects [i])をデータベースのForeignKey Idとして使用することができます。 –

+0

@IElite、私は精度とダイナミックレンジが重要ではない浮動小数点値のリストを格納するのに同様のトリックを使用しました(Delphi 'single'型は4バイトであり、ポインタへの型キャスト可能です)。文字列がなく、整数/浮動小数点数をすべて格納したい場合は、TListを使用することもできます。 – rossmcm

関連する問題