|
특정 클래스의 Private 멤버에 직접 억세스하려는 의도이므로, 아주 구질구질한 아키텍쳐가 됩니다.
Text는 TWinControl 의 Private Member 인 FText 를 GetText 와 SetText 함수로 Access하고 있는
것이고, Caption 역시 그런식입니다. 하물며 AnsiString 클래스는 여러모로 연산자 오버로딩되어 있으니까요.
말씀하신 경우를 처리하는데는, 해당 컨트롤의 포인터를 넘겨 받는 쪽이 차라리 손이 덜 갈 것 같군요.
TEdit냐, TLabel이냐를 미리 알고 거기에 따라 캐스팅해 사용하시면 속도에도 무리가 없을터이고,
만약 어떤 컨트롤이 넘어올지 모른다는 가정하에 코딩을 하신다면,
void __fastcall TForm1::Test(TControl *ctrl){
AnsiString str = "Hello"; // 바꿀 문자열
if (AnsiString(ctrl->ClassName()) == "TEdit"){
((TEdit *)ctrl)->Text = str;
}
else if (AnsiString(ctrl->ClassName()) == "TLabel"){
((TLabel *)ctrl)->Caption = str;
}
}
이런식으로 코딩하게 되실텐데, 문자열 비교루틴이 들어가게 되니 성능에는 약간 데미지를 입을 것입니다.
즉, Label이면 Label, Edit면 Edit 로 미리 약속을 하고 해당 컨트롤의 포인터를 받아
그 멤버인 AnsiString형의 내용을 변경시키는 구조로 가시는게 낫겠죠.
|