|
younkwan 님이 쓰신 글 :
: Label->Caption.printf("%d", err");
: 와같이 하면 보여야 하지 안나요?
: 아니면 별도로 화면에 update하는 함수를 call해야 하는지요?
:
: AnsiString msg;
: msg.printf("%d", err);
: Label->Caption = msg;
: 와 같이 해야 되더군요.
:
: 어떤 차이점이 있는건가요?
:
: 수고하세요.
Label->Caption이 "property" 라서 그렇습니다.
도움말에 property 키워드에 대해 보면, 내부 변수에 대한 접근 제어를 한다고 되어 있네요.
외부에서 객체 내부 변수에 대한 직접 접근을 방지하고, 객체마다 특정 속성(attribute)의 접근 제어를 구현할 수 있도록 하는것 같습니다.
Label->Caption은 내부적으로 Label->GetText() 함수를 통해 caption 문자열 객체의 복사본을 반환하네요.
__property AnsiString Caption = {read=GetText, write=SetText, stored=IsCaptionStored};
(Label->Caption).printf() 함수는 Label->GetText 함수에 의해 반환된 임시 문자열 객체의 .printf() 함수를 호출
하므로, Label 내부의 Caption 데이터는 변경되지 않습니다.
'=' 연산자를 통해서만 Label->SetText 함수가 호출되어 내부 Caption 데이터를 변경하네요.
'AnsiString msg' 와 같이 임시 변수를 사용하지 않으려면 아래와 같이 할 수도 있습니다.
Label->Caption=Label->Caption.printf(..);
|