Delphi Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
델파이 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
FreePascal/Lazarus
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
델마당
볼랜드포럼 광고 모집

델파이 Q&A
Delphi Programming Q&A
[6892] [기타] 어제 올린 질문중 몇개를 해결했습니다.감사
dashform [ ] 602 읽음    1999-12-16 09:40
안녕하세요 좋은생각입니다.

어제 올렸던 질문중...몇개를 해결 했습니다.
TUDSLinkSet에 추가 되어 있는 TLinkField를 Destroy를 발생하는 문제
를 해결했습니다.

이를 위해서 좀 무식한 방법이였지만 델파이의 TTable과 TField의 Create
와 Destroy순서를 살펴봤습니다.

결론적으로 말해서 TComponent를 상속받아 델파이에 등록된 모든 컴포넌트
들은 델파이가 독립적인 컴포넌트로 생각한다는 겁니다(참 너무 당연한
것가지고 고민을 했다는 생각이 드네요...)

폼에 올려진 컴포넌트의 생성과 삭제 순서는 생성때는 폼에 올려진 순서
대로 폼의 Designer에 매겨진 컴포넌트의 순서대로 Create가 되고
삭제될때는 그반대로 Destroy되는 것을 확인했습니다(후후 어째보면
너무 당연하죠...다시한번 제가 멍청하다는 것을 느낍니다.)

델파이의 TTable 역시 TTable가 먼저 Create 되고난후 필드가 Create되고
폼이 닫힐때는 필드가 Destroy되고난뒤 TDataSet(TTable)이 Destroy됩니다.

그럼 필드가 Destroy되고 나면 TDataSet이 Destroy될때 다시 TDataSet(TTable)가
관리하는 Fields에서 필드를 Destroy하지 않는냐고 생각했는데
해답은 의외로 간단했습니다.

바로 양방향 포인터를 가지는거죠...크크크크...
즉 TField가 Fields를 가지고 TDataSet를 Create하면서 가지게 됩니다.
다시말하면 자신이 누구의 필드로 만들어 졌고 어디에 속해있는지
태어날때부터 알고 있는거죠

이렇게 되면 자기가 죽을때 위에 알려 자신의 흔적을 없에 버리게 되는
거죠..음...

따라서 전체 적인 구조는

class = TUDSLInkSet;
class = TLinkFields;
class = TLinkFields;

TLinkField = class(TComponent)
  UDSLinkSet : TUDSLinkSet;
  LinkFields : TLinkFields;

  ...
  ...
end;

TLinkFields = class(TPersistance)
  UDSLinkSet : TUDSLinkSet;
  FLinkFieldList : TList;
  ...
end;

TUDSLinkSet = class(TComponent)
private
  ...
  LinkFields : TLinkFields;
protected
  ...
public
  ...
published
  ...
end;

이렇게 수정이 되었습니다.

하지만 아직 IDE와 통신부분에 있어서는 해결하지 못하고 있습니다.
아마 내일모래쯤이면 이쪽부분을 파고들어 갈것 같은데 ,,,음...

암튼 좋은 하루 되시군요...밤새면 안되는데...쩝...

그럼...안녕히

                     꿈을 향하여   /좋/은/생/각/...


+ -

관련 글 리스트
6892 [기타] 어제 올린 질문중 몇개를 해결했습니다.감사 dashform 602 1999/12/16
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.