|
답변 감사합니다.
CBuilder로 똑같이 코딩해서
해당 double형 Property-PropInfo 의 Default값을 0x80000000으로 변경했는데..
여전히 값이 0 인 경우는 dfm에는 저장이 되지 않고 있네요
다른 깔끔하지 못한 꼼수를 써야하나? ㅠㅠ
루도라 님이 쓰신 글 :
: 이상하게 실수값은 default 지정을 하지 않으면 PropInfo 의 Default 가 0 으로 고정되 버리네요. default 에 저장할 수 있는 값이 Integer 이다 보니 실수의 default 를 지정할 수 없어서 그렇게 한거 같은데 그거 때문에 stored 까지는 정상이다가 저장할려고 하는 부분에서 "default 가 0 인가?" 라는 이상한 판별식을 만나면서 0값이 default 가 되버리네요.
:
: 그래서 꼼수로 PropInfo 의 default 를 0x80000000; 로 설정해버리면 default 가 없다고 판별해서 무사히 저장이 됩니다.
:
: 아래는 제가 C++이 설치되어 있지 않아서 델파이로 짠거예요. C++도 비슷하겠죠?
:
: constructor TMyComponent.Create(Owner: TComponent);
: var
: PropInfo: PPropInfo;
: Protect: Cardinal;
: begin
: inherited Create(Owner);
:
: PropInfo:= GetPropInfo(Self, 'Value1');
: if VirtualProtect(PropInfo, SizeOf(PropInfo^), PAGE_READWRITE, Protect) then
: begin
: PropInfo^.Default:= $80000000;
: VirtualProtect(PropInfo, SizeOf(PropInfo^), Protect, Protect);
: end;
: end;
:
: ps. Component 의 constructor 에서 매번 하는거 보다는 유닛의 initialization 에서 한번 해주는게 더 좋을거 같네요.
:
: 장성호 님이 쓰신 글 :
: : 컴포넌트의 float형 프로퍼티의 default값이 0이 아닐때
: : 디자인 타임에 프로퍼티의 값을 Object-Inspector에서 0 으로 설정하면
: : 관련 프로퍼티가 *.dfm에 저장이 되지 않습니다.
: :
: : 다른 데이타 형인 int 형 , enum형 , string형 , bool 형 등의 경우에는 문제가 없는것 같은데요
: :
: : 유독 float 형 double 형은
: :
: : default값 지정이 통하지 않습니다.
: : stored , default 어떤 지시자를 사용해도 0 값은 dfm에 기록이 안되네요
: :
: :
: : float형 double형 프로퍼티의 값이 0 (제로) 일때도 dfm에 저장되게 하고 싶습니다.
: : (default값이 0 이 아니게 설정하고 싶은것입니다.)
: :
: : 해결방법 좀 알려주세요
: :
: :
: : 개발툴 C++Builder2010 , 컴포넌트 소스 cbuilder로 개발
: :
: : 그럼..
|