[문제 원인]
님께서 TSkinControl을 동적으로 생성하셔서 그런것입니다.
Designtime에 폼위에 올려진 control및 component정보는 xxxx.dfm 파일에 기록됩니다.
프로퍼티수정한 정보도 모두 xxx.dfm 에 들어가게 되죠
하지만 아래 코드처럼 ScrollBar1처럼 동적으로 생성한 Control은 xxx.dfm 파일에 정보자체가 없습니다.
xxx.dfm은 컴파일하면 exe에 리소스로 포함이 되며
Form이 생성될때 리소스에 포함된 xxx.dfm파일을 읽어와서
해당 Control을 생성하고 control의 property를 변경해주는것입니다.
해결방법은?
방법1. 동적생성하지 않는 방법이있습니다.
아래 코드를 보면 VScrollBar 라는 TSkinControl형의 프로퍼티가 있네요
내부에서 동적생성하여 쓸거라면 저 프로퍼티가 필요없을것 같은데....
저렇게 해두면 다른 TSkinControl을 폼위에 올리고 프로퍼티로 설정하면...
동적생성한 놈은 쓸모없게 되죠
동적생성쓰지 말고 그냥 저렇게 프로퍼티로 Form위에 ScrollBar를 올려서 설정하는 방법이 있을것 같습니다.
방법 2. 프로퍼티에서 VScrollBar같은것은 빼구요
TSkinControl의 프로퍼티에서 꼭 필요한것을 TKListView의 프로퍼티로 만듭니다.
read , write 함수에서 내부에 TSkinControl정보를 읽어 return해주거나 , 설정해줘야 겠죠..
//동적생성은 그대로 쓰구...
__fastcall TKListView::TKListView(TComponent* Owner)
: TCustomControl(Owner)
{
ScrollBar1=new TSkinControl(this);
}
// Header에서는 ...
TSkinControl *ScrollBar1;
TColor __fastcall GetScrollBarColor()
{
return ScrollBar1->Color;
}
void __fastcall SetScrollBarColor(TColor clr)
{
ScrollBar1->Color=clr;
}
__published:
__property TColor ScrollBarColor={read = GetScrollBarColor, write=SetScrollBarColor};
위와같이 하면 ...
ScrollBarColor라는 프로퍼티는 TKListView 컨트롤의 프로퍼티가 되어 xxx.dfm에 저장되게 됩니다.
그럼..
강대민 님이 쓰신 글 :
: (1)
: __fastcall TKListView::TKListView(TComponent* Owner)
: : TCustomControl(Owner)
: {
: ScrollBar1=new TSkinControl(this);
: .
: .
: .
: }
:
: (2)
: __published:
: __property TSkinControl* VScrollBar={read = ScrollBar1, write=ScrollBar1};
:
:
: ---------------------------------------------
:
: TKListView라는 컴포넌트를 만들고있습니다 기존에만들어두었던
:
: TSkinControl 컨트롤도 내부에 포함시켜 만들려고 위의 소스처럼 생상자에서(2) new 를하고
:
: (2)프로퍼티를 다음과같이 설정했습니다...
:
: 잘되는듯하는대 문재가 디자인모드에서 VScrollBar의 프로퍼티등 정상적으로 접근과 수정이되는대
:
: 막상컴파일해서 실행할때는 적용이 되어있지않내요... 이런경우는 어떻게 해야하나요?
:
: 고수님들의 답변 기다리겠습니다..