음..
제가 요즘 금액 콤포넌트를 하나 만들었거든요.
근데 다 잘되는데 약간의 문제점이 있어서 이렇게 글을 씁니다.
다름이 아니오라 TCustomEdit에서 상속을 받아서 금액 콤포넌트를 만드는데 금액에 콤마를 찍는 루틴을 TCustomEdit의 Change 이벤트를 상속받아서 그 이벤트 안에서 FormatFloat를 사용하여 금액에 콤마를 찍은것을 콤포넌트이 Text Prooerty 에 집어 넣었는데 이런 식으로 하니까 OnChange 이벤트를 두번 실행하게 되더라구요.
이벤트를 한번만 실행할 수 있는 방법이 없을까요?
애플리케이션 상에선 에디트의 Onchange의 함수 포인터를 잠시 nil로 만들었다 다시 연결하면 해결
그리고 ChangeBySelf라는 변수를 Boolean형으로 주시구요..
OnChange이벤트를 처리하는 부분을 보시면
If Assigned 어쩌구 저쩌구... 모 이럴거에요.
이곳에서 If (not ChangeBySelf) and Assigned 어쩌구...
이런식으로 해주시구요..
Text에 넣는 부분에서는 ChangeBySelf를 True로 주시구요..
KeyPress나 KeyDown이벤트를 처리하는 부분에서 ChangeBySelf를 False로 주시구요...
이렇게 하시면 OnChage이벤트를 처리하는 부분에서 ChangeBySelf가 참이면 그곳에 Assign된 함수를 호출하지 않습니다...
최석기 wrote:
> 음..
> 제가 요즘 금액 콤포넌트를 하나 만들었거든요.
> 근데 다 잘되는데 약간의 문제점이 있어서 이렇게 글을 씁니다.
> 다름이 아니오라 TCustomEdit에서 상속을 받아서 금액 콤포넌트를 만드는데 금액에 콤마를 찍는 루틴을 TCustomEdit의 Change 이벤트를 상속받아서 그 이벤트 안에서 FormatFloat를 사용하여 금액에 콤마를 찍은것을 콤포넌트이 Text Prooerty 에 집어 넣었는데 이런 식으로 하니까 OnChange 이벤트를 두번 실행하게 되더라구요.
>
> 이벤트를 한번만 실행할 수 있는 방법이 없을까요?
>
> 애플리케이션 상에선 에디트의 Onchange의 함수 포인터를 잠시 nil로 만들었다 다시 연결하면 해결