2010-02-27 3 views
0

필자는 TCanvas 요소와 결합 된 Windows API를 사용하여 Delphi에서 고급 텍스트 편집기 구성 요소 (고정 너비, 구문 강조 표시 등)를 작성했으며 한 가지를 제외하면 훌륭하게 작동합니다. TEdit과 같은 캐럿을 표시하는 동일한 응용 프로그램 내에서 다른 컨트롤에 포커스를 설정하면 내 편집기 구성 요소에서 포커스를 훔치기 때문에 새 편집기 (예 : TEdit)의 캐럿이 표시되지 않습니다. 대신에 편집기 요소에서 캐럿이 이동합니다! 예를 들어, 새 편집기 (TEdit)에 문자를 쓰면 예상대로 표시되고 내 구성 요소의 오른쪽으로 캐럿이 이동합니다. 무엇이 이것을 일으킬 수 있습니까? Win API의 키보드 포커스 처리와 VCL 처리 사이에 약간의 충돌이있을 것으로 생각됩니다. 내 편집기 구성 요소에서 WM_KILLFOCUS에 대한 응답으로 WM_SETFOCUS 및 DestroyCaret에 대한 응답으로 CreateCaret을 사용합니다. 새 편집 컨트롤이 새로운 모달 창에있는 경우에만 문제가 발생하는 것 같습니다.캐럿이 보여주는 델파이 포커스 문제

+0

코드 예제가 없으면 하나만 추측 할 수 있습니다. WM_KILLFOCUS를받은 후 텍스트 편집기 구성 요소가 잘못된 WM_SETFOCUS 메시지를 받고 포커스를 잃어 버렸을 수 있습니다. – kludg

+0

불행히도, 그게 아니야 ... –

답변

1

구성 요소 코드에 사소한 버그가 있습니다. 내 사과.

+0

그런 다음 대답 (Loren 's or yours)을 수락하십시오. 그것은 답변되지 않은 깃발을 제거합니다. –

+0

4 시간 후에 그렇게하겠습니다. (서버가 지금 내게 그것을 허락하지 않을 것이다.) –

0

첫 번째 생각은 WM_KILLFOCUS 메시지가 표시되지 않는다는 것입니다. 나는 그것이 일어나고 있는지 여부를 알려주는 진단서를 만들 것입니다.

저는 입니다.은 이런 종류의 문제를 해결하기 위해 디버거를 사용하고자하는데, 이와 같은 상호 작용을 진단 할 때 제목 수정이 더 효과적이라고 생각합니다.

+0

고마워,하지만 나는 코드가 실행된다는 긍정적이다. (나는 삐 소리가났다.) –