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
[46463] Re:AnsiString을 다른 클래스에 포인터로 넘기는 방법?
열씸! [cappuccino] 1046 읽음    2006-09-07 04:00
특정 클래스의 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형의 내용을 변경시키는 구조로 가시는게 낫겠죠.

+ -

관련 글 리스트
46455 AnsiString을 다른 클래스에 포인터로 넘기는 방법? 이돈진 1019 2006/09/06
46463     Re:AnsiString을 다른 클래스에 포인터로 넘기는 방법? 열씸! 1046 2006/09/07
46464         어려울것 같더니만 결국 그 방법밖에 없군요 이돈진 813 2006/09/07
46474             Re:어려울것 같더니만 결국 그 방법밖에 없군요 열씸! 909 2006/09/07
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.