프로그래밍 노트

[델파이]Object의 List 사용해 보기(TObjectList) 본문

델파이

[델파이]Object의 List 사용해 보기(TObjectList)

떡잎 2010. 10. 6. 18:07




 

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Contnrs;

type

  // ObjectList에 추가할  Object
  TMyObj = class(TObject)
  private
    FiState : integer;
    FsId : string;
    FiTemp : integer;
  public
    function Cal(iTemp: integer): integer;
  published
    property State : integer read FiState write FiState;
    property ID : string read FsId write FsId;
  end;

  TForm1 = class(TForm)
    btnCreate: TButton;
    btnAdd: TButton;
    Edit1: TEdit;
    Memo1: TMemo;
    btnObjList: TButton;
    procedure btnObjListClick(Sender: TObject);
    procedure btnAddClick(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure btnCreateClick(Sender: TObject);
  private
    { Private declarations }
    ol : TObjectList;  // ObjectList 정의
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

{ TPjObj }

function TMyObj.Cal(iTemp: integer): integer;
begin
  result := iTemp * 2;
end;

procedure TForm1.btnCreateClick(Sender: TObject);
begin
  // ObjectList 생성
  ol := TObjectList.Create(true);
end;

procedure TForm1.btnObjListClick(Sender: TObject);
var
  i : integer;
begin
  // Object List에 추가한 Object의 Property 표시
  for i := 0 to ol.Count - 1 do
    memo1.Lines.Add((ol.Items[i]as TMyObj).ID);
end;

procedure TForm1.btnAddClick(Sender: TObject);
var
  po : TMyObj;
begin
  // Object List에 추가할 Object 생성
  po := TMyObj.Create;
  po.ID := edit1.Text;
  // Object List에 Object 추가
  ol.Add(po);
  //po.Free;  <- Free하면 안됨
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
  // Object List 개방
  ol.Free;
end;

end.


Object List를 사용하려면 Contnrs를 uses에 추가해야 됨
Object List에 추가할 Object를 생성한 후 소멸시키지 않아도 되고
생성한 후 소멸시켜서도 안된다. ^^;;

프로그램이 죽을 때 Object List를 Free해 주면
추가한 모든 Object가 자동으로 소멸되어진다.

ObjectList에 추가한 Object의 Property나 Method를 사용할 때는
위 소스의 TMyObject로 예를들면 아래와 같이 쓸 수 있다.

    (ol.Items[i] as TMyObj).ID
    TMyObj(ol.Items[i]).ID
 
 

Comments