2012년 10월 5일 금요일

Object를 TObkectList에 저장(레코드와 비교하면서 사용)

역시 같은 개념이다

  TMyObject=class(TObject)
  private
    FNo: integer;
    FName: string;
  public
    function Calc2x(idx: integer): integer;
    property Name: string read FName write FName;
    property No: integer read FNo write FNo;
  end;

비슷한 형식이지만 자료로의 접근 방식이 조금다르다.

델파이에서는 interface 부분에서 위와같이 선언하고나서 Ctrl+Shift+C 하면 실제 구현(Implementation) 부분에 기본 틀이 만들어 집니다.

Record를 쌓아두는 곳으로 TList가 있었다면
Object 자료를 샇아두는 곳은 TObjectList가 준비되어 있습니다.

procedure TForm2.FormCreate(Sender: TObject);
begin
  MyObjectList:= TObjectList.Create;
end;

물론 uses Contnrs 를 삽이하여야합니다.

실제 자료를 생성하고 자료를 접근하기 위하여는 레코드에서 New를 사용하던 식으로
procedure TForm2.btObjectAddClick(Sender: TObject);
var
  iMyObject: TMyObject;
begin
  iMyObject:= TMyObject.Create;
  iMyObject.Name:= Edit1.Text;
  iMyObject.No:= Random(65000);
  MyObjectList.Add(iMyObject);
end;

하면 됩니다.

사용이 끝난 서재는 간단하게 정리됩니다.
procedure TForm2.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  FreeAndNil(MyObjectList);
end;

또는 MyObjectList.Clear 해도 되겠지요.

자동으로 해제 되지 않게 하기위하여는 
   MyObjectList.OwnsObjects := False; 하면 됩니다. 기정치는 True 입니다.
다른 방법으로는 생성시
  iMyObject:= TMyObject.Create(False); 또는
  iMyObject:= TMyObject.Create(True); 하면 됩니다.

댓글 없음:

델파이 12.1이냐 11.3이냐?

 델파이가 12.1이 나왔습니다. 혹시 11.3버전의 커뮤니티버전이 필요하시는분이 있을 수 있을 것 같아 https://altd.embarcadero.com/.../RADStudio_11_3_esd_28... 와 이것 찾느랴 엄청고생함.