Q&A

  • 금액 콤포넌트 만드는데 문제점..
음..

제가 요즘 금액 콤포넌트를 하나 만들었거든요.

근데 다 잘되는데 약간의 문제점이 있어서 이렇게 글을 씁니다.

다름이 아니오라 TCustomEdit에서 상속을 받아서 금액 콤포넌트를 만드는데 금액에 콤마를 찍는 루틴을 TCustomEdit의 Change 이벤트를 상속받아서 그 이벤트 안에서 FormatFloat를 사용하여 금액에 콤마를 찍은것을 콤포넌트이 Text Prooerty 에 집어 넣었는데 이런 식으로 하니까 OnChange 이벤트를 두번 실행하게 되더라구요.



이벤트를 한번만 실행할 수 있는 방법이 없을까요?



애플리케이션 상에선 에디트의 Onchange의 함수 포인터를 잠시 nil로 만들었다 다시 연결하면 해결
2  COMMENTS
  • Profile
    이정욱 1999.05.11 22:26
    먼저 OnChange이벤트를 재정의를 하십시요.

    그리고 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로 만들었다 다시 연결하면 해결
  • Profile
    최석기 1999.05.12 02:23
    이정욱 wrote:

    > 먼저 OnChange이벤트를 재정의를 하십시요.

    > 그리고 ChangeBySelf라는 변수를 Boolean형으로 주시구요..

    > OnChange이벤트를 처리하는 부분을 보시면

    > If Assigned 어쩌구 저쩌구... 모 이럴거에요.

    > 이곳에서 If (not ChangeBySelf) and Assigned 어쩌구...

    > 이런식으로 해주시구요..

    > Text에 넣는 부분에서는 ChangeBySelf를 True로 주시구요..

    > KeyPress나 KeyDown이벤트를 처리하는 부분에서 ChangeBySelf를 False로 주시구요...

    > 이렇게 하시면 OnChage이벤트를 처리하는 부분에서 ChangeBySelf가 참이면 그곳에 Assign된 함수를 호출하지 않습니다...

    >



    먼저 정욱님께 신경 써 주신거에 대해 감사를 드립니다.

    정욱님께서 가르쳐 주신데로 하면 OnChange 이벤트는 한번만 실행되기는 하는데 제가 잘못한건지 또 다른 문제점 하나가 발생하는군요.

    정욱님이 가르쳐 주신 방법은 아래 문장을 Override 한 Change 이벤트의 제일 앞에 적어야 하는거 아닌가요?

    procedure TCustomNumEdit.Change;

    begin

    inherited Change;

    if (not ChangeBySelf) and Assigned(FOnChange) then

    .....



    이런식으로요??

    그러면 OnChange에서 Text 값을 체크하면 FormatFloat를 사용하여 콤마를 찍기 전의 값이 Text에 들어있어요.

    가령 '1,234'로 들어있는 Text에 5를 입력하면 OnChange 이벤트 시에 Text 값은 '1,2345'로 가지고 있게 되더라구요.



    그래서 좀 지저분하긴 하지만 전 Chang 이벤트가 실행되어진 횟수를 세어서 한번 이상이면 Exit를 시켰거든요..



    이런 경우는 어떻케 처리해야 하나요??



    답변에 감사드립니다.

    • 최석기
    • 1999.05.11 21:40
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 이정욱
      1999.05.11 22:26
      먼저 OnChange이벤트를 재정의를 하십시요. 그리고 ChangeBySelf라는 변수를 Boolean형으로 주시구요.. O...
    • 최석기
      1999.05.12 02:23
      이정욱 wrote: > 먼저 OnChange이벤트를 재정의를 하십시요. > 그리고 ChangeBySelf라는 변수를 Boolean...
    • 이정욱
      1999.05.11 20:23
      RxLib의 RichEDit2 콘트롤을 사용하는 방법이 있구요.. 또하나는 상용인 InfoPower에 포함되어있는 RichEd...
    • 아무게
    • 1999.05.11 18:49
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 이정욱
      1999.05.11 20:26
      공유정보를 읽어오는것입니다. 김영대님의 팁에서 가져왔습니다. // 아래 예제는 Windows NT/Windows 20...
    • 김지건
    • 1999.05.11 18:10
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 이정욱
      1999.05.11 20:16
      64k 이상을 넘지 못합니다. 그럴때는 RichEdit을 사용하시는것이 좋습니다. 아니면 상용으로나온 확장 Me...
    • 김지건
      1999.05.11 20:54
      이정욱 wrote: > 64k 이상을 넘지 못합니다. > 그럴때는 RichEdit을 사용하시는것이 좋습니다. > 아니면...
    • 송수정
    • 1999.05.11 10:01
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 이정욱
      1999.05.11 11:01
      한델(http://www.delphi.co.kr) 강의실에 가보시면 인쇄에 관한 강좌가 있습니다. 참고하시구요.. TPrint...
    • 엠마
    • 1999.05.11 09:04
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 하윤철
      1999.05.11 18:02
      엠마 wrote: > 테이블에 insert한후에 조회하면은 insert한 자료는 조회가 되지 않습니다. > 테이블에 데...
    • 강경중
    • 1999.05.11 07:08
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 안치봉
      1999.05.11 08:09
      강경중 wrote: > 델파이의 폼에 콤포넌트를 추가하면 > 콤포넌트 마다 고유의 Taborder가 있습니다. > ...
    • 강경중
      1999.05.12 03:13
      안치봉 wrote: > 강경중 wrote: > > 델파이의 폼에 콤포넌트를 추가하면 > > 콤포넌트 마다 고유의 Tabo...
    • 강경중
    • 1999.05.11 06:53
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 이정욱
      1999.05.11 10:08
      에러를 가로챈다기 보다 무시하게 하면 됩니다. Try Except문으로 처리하세요. 델파이환경에서 Break on ...
    • 강경중
    • 1999.05.11 06:47
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 이정욱
      1999.05.11 11:03
      ImageList의 속성(Property)를 보시면 그림의 크기를 정하는곳이 있습니다. Width와 Height이죠. 그림은 ...
    • 누군지
      1999.05.11 10:12
      이런 종류의 질문이....??? 스스로 노력을 하다가 문제가 생겼을 때 질문을 해야하는것이 적어도 성의가...
    • 영이...
    • 1999.05.11 03:09
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 이정욱
      1999.05.11 20:32
      안녕하세요? 제가 DB는 모르지만 언어적으로 해결을 하시려면... 하나씩 기억했다가 사용하면 어떨까요? ...
    • 왕초보
    • 1999.05.11 02:55
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 이정욱
      1999.05.11 20:38
      CM_EXIT 라는 컴포넌트 내부 메세지를 가로채면 됩니다. procedure CMExit(var Message: TCMExit); mess...
    • 왕초보
      1999.05.11 21:54
      친절한 답변 감사드립니다... 이정욱 wrote: > CM_EXIT 라는 컴포넌트 내부 메세지를 가로채면 됩니다....
    • 이호선
    • 1999.05.11 01:57
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 이정욱
      1999.05.11 20:50
      BitBtn1.Glyph.LoadFromFile의 메소드가 잘 먹히는데요? 아래는 테스트 해본 코드입니다... var ...
    • 왕초보
      1999.05.11 02:54
      Tfield의 EditMask에다가 #라고 쓰십시오...이게 무슨 뜻인지..? "#"으로만 editmask를 잡으면 1,234 와 ...
    • 하윤철
      1999.05.11 17:29
      죄송합니다... TField에 EditFormat과 DisplayFormat 속성이 있을겁니다. DisplayFormat은 보여주는 ...
    • 김장섭
    • 1999.05.10 20:57
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 글쎄요.
      1999.05.10 23:16
      영문으로 되 있는 데 참고하시는 데 그리 어려움이 없을 겁니다. 그럼 좋은 하루 되셔요. ////////// TI...
    • 김영대
      1999.05.10 22:27
      김장섭 wrote: > 콤보 박스의 Item에 텍스트가 아닌 텍스트와 이미지가 들어가는 > 컴포넌트를 구합니다...