お知らせ

電子会議

ライブラリ

パレット

Delphi FAQ検索

Delphi FAQ一覧

サンプル蔵





FDelphi FAQ
16番会議室「玉石混淆みんなで作るSample蔵」に寄せられたサンプル

"Extendedのリスト"



{動的に配列を変更する方法はいろいろあると思いますが、やはり使い慣れた
TStringListみたいなものが欲しい、と思って Extended用のTStringListみたい
なものを作りました。 単純な配列に比べメモリは余計に食うし、遅いだろうと
思うのであまりお奨めではありませんが、、、(^^; 本来TPersistantから派生さ
せるべきだと思うんですが、自分自身あまりストリームを使わないので実装しま
せんでした。 使い込んでないのでバグあるかもしれません。ご指摘頂ければ幸
いです。
 これを応用してTIntegerListは一瞬にして出きると思いますし 2次元配列に
対応するものも簡単に作れると思います}


interface
uses Classes;
type
  TExtendedList=Class
  private
     FCount:integer;
     theList:TList;
     newEx:pExtended;
     procedure Put(Index:integer;value:Extended);
     procedure SetCount(Count:Integer);
     function GetCount:Integer;
     function Get(Index:Integer):Extended;
  public
     //使えるメソッドは以下のとおり、だいたいTStringListの感じ
     procedure LoadFromFile(filename:string);
     procedure SaveToFile(filename:string);
     procedure delete(Index:Integer);
     procedure add(value:Extended);
     constructor create;
     destructor destroy;overRide;
     //こいつは注意 StringGridのRowCountの感じです。
     property Count:integer read getCount write setCount;
     property Items[Index: Integer]: Extended 
                                read Get write Put ;default;
  end;


implementation
constructor TExtendedList.create;
begin
   theList:=TList.create;
end;
procedure TExtendedList.LoadFromFile(filename:string);
var
   f:file of Extended;
   value:Extended;
begin
   SetCount(0);
   assignFile(f,filename);
   reset(f);
   try
      while not EOF(f) do
      begin
         read(f,value);
         add(value);
      end;
   finally
      closeFile(f);
   end;
end;
procedure TExtendedList.SaveToFile(filename:string);
var
   i:integer;
   f:file of Extended;
begin
   assignFile(f,filename);
   rewrite(f);
   try
      for i:=0 to theList.Count-1 do
         write(f,pExtended(theList.items[i])^);
   finally
      CloseFile(f);
   end;
end;
procedure TExtendedList.SetCount(Count:Integer);
var
   i:integer;
begin
   if Count>theList.Count then
   begin
      for i:=0 to Count-theList.count-1 do add(0);
   end
   else
   begin
      for i:=theList.Count-1 downTo Count do delete(i);
   end;
end;
function TExtendedList.GetCount:Integer;
begin
   GetCount:=theList.Count;
end;
procedure TExtendedList.Put(Index:integer;value:Extended);
begin
   pExtended(theList.items[Index])^:=value;
end;
function TExtendedList.Get(Index:integer):Extended;
begin
   Get:=pExtended(theList.items[Index])^;
end;
procedure TExtendedList.add(value:Extended);
begin
   new(newEx);
   newEx^:=value;
   theList.add(newEx);
end;
procedure TExtendedList.delete(Index:integer);
begin
   Dispose(pExtended(theList.Items[index]));
   theList.Delete(Index);
end;
destructor TExtendedList.destroy;
var
   i:integer;
begin
   for i:=0 to theList.count-1 do
   begin
      Dispose(pExtended(theList.Items[i]));
   end;
   theList.free;
   theList:=nil;
   inherited Destroy;
end;
                                 98/01/24(土) 12:48 凛(MXB01744)

Original document by 凛              氏 ID:(MXB01744)


ここにあるドキュメントは NIFTY SERVEの Delphi Users' Forum の16番会議室「玉石混淆みんなで作るSample蔵」に投稿されたサンプルです。これらのサンプルはボーランド株式会社がサポートする公式のものではありません。また、必ずしも動作が検証されているものではありません。これらのサンプルを使用したことに起因するいかなる損害も投稿者、およびフォーラムスタッフはその責めを負いません。使用者のリスクの範疇でご使用下さい。

Copyright 1996-2002 Delphi Users' Forum