2012-03-13 2 views
4

저는 편집 컨트롤 내부에있는 왼쪽에 아이콘과 오른쪽에 아이콘 버튼을 모두 추가하는 것으로 구성된 사용자 지정 편집 컨트롤을 만들고 있습니다. 이렇게하려면 텍스트 (및 커서)의 시작점을 X 픽셀만큼 오른쪽으로 이동해야합니다. 이것은 또한 오른쪽에있는 버튼을위한 공간을 만들기 위해 텍스트를 얼마나 크게 그릴 수 있는지를 '제한'해야한다는 것을 의미합니다. 브라우저에서와 같이 왼쪽에 맞춤 아이콘과 오른쪽의 'X'버튼을 모두 제공하여 편집 컨트롤의 콘텐츠를 삭제합니다.편집 컨트롤에서 커서 위치를 오프셋하는 방법은 무엇입니까?

Rect을 상쇄하여 TCustomEdit 자손의 텍스트 및 커서를 그릴 위치를 어떻게 지정합니까?

+0

아니면 다른 사용자 정의 컨트롤을 만들고 내부에 'TEdit'을 삽입하는 것이 더 좋을까요? –

+0

그림이 외부 위젯을 방해하지 않도록 클리핑을 사용하지 않는 이유는 무엇입니까? – OnTheFly

답변

6

최신 버전의 Delphi를 사용하는 경우 이미 TButtonedEdit 컨트롤이 있어야하며 작업을 수행 할 수 있습니다.

그렇지 않다면 왼쪽 및 오른쪽 여백을 설정하기 위해 TCustomEdit에 EM_SETMARGINS 메시지를 보낼 수 있다고 생각합니다.

SendMessage(CustomEdit.Handle, EM_SETMARGINS, EC_LEFTMARGIN or EC_RIGHTMARGIN, MakeLong(LeftMargin, RightMargin)); 
+0

맞습니다 (+ 1ed).하지만이 주제를 쳤을 때, 많은 예제에서 본 "TWinControl"을 "내부"컨트롤의 기본 레이어로 사용하고 있는데 궁금합니다. 이것은 여백을 여기에 표시된 것과 같은 방식으로 설정해도 편집이 깜박 거리기 때문입니까? 인스턴스 버튼을 만들고이 하위 레이어가없는 편집 컨트롤에 부모를 설정하면 어떻게됩니까? – TLama

+0

+1 트릭을 할 것 같습니다. 고마워요! 사실 XE2에서 이미 버튼 편집에 대해 알지 못했지만 몇 가지 기능도 추가하고 있습니다. 그것은 본질적으로 검색 상자가 될 것입니다. –

+1

@TLama 그 컨트롤을 실제로 구현하지는 않았지만 델파이는 TButtonEdit의 공식 버전을 구현하기 위해 EM_SETMARGINS를 사용합니다. 그렇기 때문에 구현하는 데 유효한 방법 일 수 있다고 생각합니다. – Justmade

관련 문제