2012-05-30 3 views
4

나는 테두리를 표시하고 테두리를 나타 내기 위해 표준 편집 컨트롤 + 스핀 단추와 정렬하려고하는 일부 data output text boxes (테두리가없는 텍스트 상자와 나머지 배경의 텍스트 상자가 있음) 숫자 중 하나를 편집 할 수 있습니다 :텍스트 상자 정렬

screen shot

내가 수동으로 델파이/C++ 빌더 폼 디자이너에서 이러한 정렬 할 수 있습니다,하지만 난 다음의 Windows 또는 다른 버전의 양식을 볼 때 다른 DPI를 사용하면 텍스트가 더 이상 오른쪽 맞춤이되지 않습니다. 아마도 스핀 단추 간격, 테두리 등의 차이 때문일 것입니다.

EM_GETMARGINS를 사용하여 스핀 단추의 너비를 결정할 수 있지만 편집 컨트롤의 여백과 테두리의 크기는 어떻게 결정합니까? EM_POSFROMCHAR, ClientToScreen, GetSystemMetrics (SM_CXBORDER), GetSystemMetrics (SM_CXEDGE) 및 GetThemeMargins의 다양한 조합을 시도했지만 지금까지는 작동하고 의미가있는 조합을 찾을 수 없습니다.

자세한 내용 :

  • 환경은 델파이/C++ 빌더 XE2입니다.
  • 데이터 출력 컨트롤은 BorderStyle bsNone을 가진 TEdits입니다.
  • 편집 + 스핀 버튼은 TJvSpinEdit입니다. 소스보기에서 EM_SETMARGINS를 사용하여 스핀 버튼을위한 공간을 허용합니다.

답변

2

Win32 API GetWindowRect()GetClientRect() 메서드를 사용하십시오. 경계는 두 직사각형의 차이가됩니다. 그래도 경계선 만 줄 것입니다. 클라이언트 영역 내에 여분의 공간이있을 수 있습니다.

+0

이전에 시도했지만 작동하지 않았습니다. 외관상으로는 TFrame의 생성자에서 완료되면 실패하지만 양식이 표시되면 완료됩니다. 여전히 1 픽셀의 불일치가 있습니다. 내가 TJvSpinEdit의 구현에서 온 것처럼 보일지 모르지만, 나는 그것을 유발할 수있는 것을 볼 수는 없다. –

+0

그런 다음 대신'EM_GETRECT' 메시지를 사용해보십시오. Edit 컨트롤이 텍스트를 렌더링 할 수있는 테두리 사각형을 반환합니다. 그럴 경우 오른쪽 사각형 가장자리가 정렬되도록 컨트롤을 배치 할 수 있습니다. –

+2

VCL 소스 코드가 설치되어있는 경우 "Designer Guidelines"기능이 활성화되어있을 때 Form Designer가 다양한 정렬을 계산하는 데 사용하는 다음 클래스의 구현을 살펴볼 수 있습니다 :'DesignIntf.TBaseComponentGuidelines' , 'DesignEditors.TComponentGuidelines','VCLEditors.TControlGuidelines','VCLEditors.TControlGuidelines'입니다. –