Win32 편집 컨트롤에서 '자리 표시 자 텍스트'를 어떻게 사용합니까?
문제
스택 오버 플로우 사이트의 오른쪽 상단을 살펴보십시오. 검색 상자에는 "검색"이라는 텍스트가 있습니다. 내부를 클릭하면 텍스트가 사라집니다.
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) 용
제휴하지 않습니다 StackOverflow