Win32 편집 컨트롤에서 '자리 표시 자 텍스트'를 어떻게 사용합니까?

StackOverflow https://stackoverflow.com/questions/1196779

  •  20-09-2019
  •  | 
  •  

문제

스택 오버 플로우 사이트의 오른쪽 상단을 살펴보십시오. 검색 상자에는 "검색"이라는 텍스트가 있습니다. 내부를 클릭하면 텍스트가 사라집니다.

Win32 편집 컨트롤이 비어 있으면 (예 : 텍스트가 없음) 일반 텍스트보다 더 차분한 색상으로 텍스트를 페인트하고 싶습니다. 컨트롤에 초점이 있거나 그 안에 텍스트가 있다면 페인트 칠하고 싶지 않습니다.

실제 텍스트를 컨트롤로 설정하고 텍스트 색상을 변경하지 않고 수행 할 수있는 방법이 있습니까? 어쩌면 제어 페인트를 가로 채어서?

감사.

도움이 되었습니까?

해결책

XP로 가능합니다. 을 체크하다 EM_SETCUEBANNER 메시지. 그러나 있습니다 특정 문제 그것은 XP에서 완전히 작동하지 않으므로 Vista를 다루는 것이 가장 좋습니다.

Win2K 이상의 버전에 필요한 경우 적어도 해당 플랫폼에서 직접 수행해야합니다.

다른 팁

이 질문에 감사드립니다. 앞으로 이것을 사용할 수 있습니다. fwiw (아마도 많지 않을 것입니다), 여기 델파이의 구현이 있습니다.

procedure TForm1.FormShow(Sender: TObject);
const
  ECM_FIRST = $1500;
  EM_SETCUEBANNER = ECM_FIRST + 1;
begin
  SendMessage(edt.Handle,EM_SETCUEBANNER,0,LParam(PWideChar(WideString('Enter search here'))));
end;

한 가지 가능성 : 텍스트 속성이 비어있는 경우 소유자를 드로 사용하고 수동으로 텍스트를 페인트하십시오.

보세요 EM_SETCUEBANNER

어쩌면 기본 텍스트와 색상을 필요에 따라 설정하고 'Onclick'이벤트로 지우지 않겠습니까?

당신은 소유자가 필요하지 않으며, 사용자 API (배너)와 함께 기본적입니다. Winapi Grp 샘플 (C) 용

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top