2010-03-30 5 views
8

양식의 기본 제목 표시 줄에있는 단추에 나타나는 도구 설명 텍스트를 변경하지 않고 계속 노력했습니다.제목 표시 줄 단추에 대한 도구 설명 텍스트 덮어 쓰기 (닫기, 최대화, 최소화, 도움말)

간단히 말해 Windows Forms의 '도움말'버튼을 사용하여 다른 용도로 사용할 수 있습니다. 이것은 잘 작동합니다. 문제는 해당 버튼 위로 마우스를 가져 가면 응용 프로그램에 아무런 의미가없는 '도움말'툴팁이 나타납니다.

이상적으로는 내 응용 프로그램에 대한 해당 툴팁의 텍스트를 변경할 수있는 방법이있을 것입니다. 그러나이 시점에서 툴팁을 사용하지 못하게하는 방법을 찾으면 만족할 것입니다.

regedit에서 'UserPreferencesMask'키를 수정하여 전체 OS에 대한 툴팁을 사용 중지 할 수 있다는 것을 알고 있지만이 기능은 내 애플리케이션에만 영향을 미칩니다.

다시 말하면 이상적으로는 관리되는 코드를 사용하여이 작업을 수행 할 수있는 방법이 있지만 Windows API 등을 연결하는 것에 반대하지는 않습니다.

이 문제를 해결하는 데 도움이되는 의견을 보내 주셔서 감사합니다.

답변

1

해결 방법으로 사용자 지정 단추를 추가하는 대신 도움말 단추를 사용할 수 없습니다.

this sample하지만 완벽하지는 않지만 아이디어를 보여줍니다.

+0

표준 시스템 기능의 목적을 변경하는 것을 피하는 것이 좋습니다. 특히 보조 소프트웨어 사용자에게는 접근성 문제가 발생한다고 생각합니다. – eftpotrm

+0

이 솔루션은 실제로 내 요구 사항을 충족하지 않습니다. 우리는 제 3 자 라이브러리 (DevExpress)를 사용하여 WinForms 구성 요소의 스키닝을 허용합니다. 이 경우 그려지는 버튼은 평면 윈도우 버튼입니다. 또한, 약간의 깜박 거리는 문제와 다시 그리기 문제가있는 것으로 보입니다. – Tim

+0

공유 샘플 응용 프로그램이 Windows 7 운영 체제에서 완벽하게 실행되고 있지 않습니다. 다른 생각이 있다면 Windows 7에서 사라질 것입니다. 그런 다음 여기에서 공유 할 수 있습니까? 미리 감사드립니다. – SharpUrBrain

0

이것은 매우 흥미로운 질문입니다. 내 첫 번째 아이디어는 GetSysMenu를 사용하여 시스템 메뉴를 변경하는 것이 었습니다. 나는 "닫기"항목을 제거하고 이름을 바꾸려고 시도했지만 닫기 버튼의 툴팁은 변경되지 않았습니다. 그런 다음 툴팁 윈도우의 HWND를 캡처하려고 시도했지만 성공하지 못했습니다. Delphi에서 작업하는 양식에 "Test"라는 툴팁을 표시하게하면 FindWindow (nil, 'Test')에 의해 HWND를 가져올 수 있습니다. 그런 다음 SendMessage WM_CLOSE를 수행 할 수 있습니다.

다음 샘플 코드에서는 타이머를 사용하여 툴팁을 계속 검색합니다. 이것은 성능에 좋지 않으므로 정확한 툴팁이 언제 나타나는지 알고 싶을 것입니다. 이 경우 도구 설명이 클라이언트 컨트롤과 연결되면 OnHint 이벤트를 간단히 사용할 수 있습니다. 툴팁 표제 바 버튼과 연관된 때

procedure TForm1.Timer1Timer(Sender: TObject); 
var 
    h: HWND; 
begin 
    h := FindWindow(nil, 'Test'); 
    if h <> 0 then 
    SendMessage(h, WM_CLOSE, 0, 0); 
end; 

그러나, 두 가지 문제가 존재한다.

  1. FindWindow (nil, 'Close')를 사용하여 닫기 단추에 대한 도구 설명 핸들을 가져올 수 없습니다.
  2. 우리가 핸들을 얻을 수 있다면 코드를 작성하는 데 스마트 한 장소가 필요합니다. 우리는 타이머에 넣고 싶지 않습니다. OnHint (델파이 - 모든 원시 Win32 응용 프로그램에 비슷한 이벤트가 있음)는 클라이언트 컨트롤에서만 작동합니다. WM_NC * 메시지를 사용하여 제목 표시 줄 툴팁이 표시 될 때 추측 할 수 있습니다.
관련 문제