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

C++빌더 Q&A
C++Builder Programming Q&A
[24049] Re:[질문]콤포넌트 생성시 프로퍼티 값의 할당시기
임문환 [mhlim] 748 읽음    2003-02-05 01:00
이 문제가 아닐 수도 있지만 도움이 될 수도 있을 것같아 글을 올립니다.

아래의 C++Builder 도움말에 따르면 property 가 선언된 순서대로 저장하고 읽어옵니다.
그런데 여기에 하나의 함정이 있을 수 있습니다.
프로그램 실행 시 컴포넌트를 로드하게 되는데 그 순서가
1. 먼저 자신을 생성하고(생성자 실행됨)
2. 모든 property를 각각의 디폴트 값으로 설정한 다음
3. 저장된(stored) 값(디폴트 값과 다른 property의 값)을 읽어다 할당

2단계와 3단계가 property를 메인 루프로 해서 진행 되느냐(property 우선) 단계를 메인 루프로 해서 진행되느냐(단계우선)의 문제가 있는데
단계우선으로 진행된다면 님과 같은 상황이 발생할 수 있겠습니다. 
단계우선일 때
__property a;
__property b;
__property c;
a 가 stored=true이며 저장된 값이 있고(즉,디폴트 값과 다르고)
b,c가 stored=false이거나 저장된 값이 없다면(즉, 디폴트 값과 동일)
위의 2단계는 a,b,c순서대로 발생하지만 3단계에서 a에 값을 지정하는 것은 발생되지만 b,c에 대한 것은 발생하지 않게되겠네요.
결과적으로 a,b,c 중 a의 값이 가장 나중에 설정되는 효과가 발생하는 것이지요.

By default, when storing itself, a component writes the values of all its published properties
that differ from their default values, in the order of their declaration.
When loading itself, a component first constructs itself, setting all properties to their default values
, then reads the stored, non-default property values.


After a component reads all its property values from its stored description
, it calls a virtual method named Loaded, which performs any required initializations.
The call to Loaded occurs before the form and its controls are shown
, so you do not need to worry about initialization causing flicker on the screen.
To initialize a component after it loads its property values, override the Loaded method.

Note:    The first thing to do in any Loaded method is call the inherited Loaded method.
This ensures that any inherited properties are correctly initialized before you initialize your own component.



나엑스 님이 쓰신 글 :
: 요새 컴포넌트 제작하고 있는데
: 이것이 developer guide에는 언급이 없네요
:
: 제가 아는 바로는 컴포넌트 생성시
:
: 생성자
: afterConstruct()
: 프로퍼티 설정함수(Set~~())
: loded()
:
: 이런 순이고 폼 파일에 저장된 프로퍼티가 로딩되어 컴포넌트에 할당되는 순서는 폼파일에 기록된 순서라고 알고 있습니다.
:
: 그래서 헤더파일에
: __property a;
: __property b;
: __property c;
:
: 이렇게 선언하였는데 디버깅해보면 a가 가장 나중에 할당이 됩니다. b,c는 순서되로 할당이 되고
: a 와 b,c가 다른 점은 a는 다른 컴포넌트의 포인터이고 b,c는 상수 값입니다. 왜 그렇가요?
: 포인터는 항상 가장 나중에 할당되는 걸까요 프로퍼티에서 아시는 분 답변좀..

+ -

관련 글 리스트
24047 [질문]콤포넌트 생성시 프로퍼티 값의 할당시기 나엑스 567 2003/02/04
24049     Re:[질문]콤포넌트 생성시 프로퍼티 값의 할당시기 임문환 748 2003/02/05
24098         Re:Re:[질문]콤포넌트 생성시 프로퍼티 값의 할당시기 나엑스 681 2003/02/06
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.