2010-03-30 19 views
8

He intentado sin suerte cambiar el texto de la información sobre herramientas que aparece para los botones en la barra de título principal de un formulario.Anula texto de información sobre herramientas para los botones de la barra de título (Cerrar, Maximizar, Minimizar, Ayuda)

En pocas palabras, hemos aprovechado el botón 'Ayuda' para que Windows Forms tenga algún otro propósito. Esto está funcionando bien. El problema es que al pasar el mouse sobre ese botón, aparece una información sobre herramientas de 'Ayuda', que no tiene ningún sentido para la aplicación.

Idealmente, habría alguna forma de cambiar el texto de esa información sobre herramientas para mi aplicación; sin embargo, en este punto estaría satisfecho de encontrar una forma de desactivar la información sobre herramientas.

Sé que puede desactivar la información sobre herramientas para todo el sistema operativo modificando la clave 'UserPreferencesMask' en regedit, pero realmente me gustaría una forma de que esto solo afecte a mi aplicación.

Nuevamente, idealmente habría alguna forma de hacer esto con el código administrado, pero no me opondría a enlazar con la API de Windows o similar.

Gracias por cualquier sugerencia para resolver este problema!

Respuesta

1

Como solución alternativa, no puede usar el botón de ayuda, en su lugar: agregue su botón personalizado.

Aunque this sample no es tan perfecto, pero le muestra la idea.

+0

Sin duda recomendaría evitar cambiar el propósito de las instalaciones de sistema estándar como una regla. Me imagino que esto causa problemas de accesibilidad, en particular para los usuarios con software de asistencia. – eftpotrm

+0

Esta solución realmente no satisface mis necesidades. Usamos una biblioteca de terceros (DevExpress) para permitir el desvelado de los componentes de WinForms. El botón que se dibuja en este caso es solo un botón plano de Windows. Además, parece tener algunos problemas de parpadeo y problemas de actualización. – Tim

+0

su aplicación de ejemplo compartida no funciona perfectamente en el sistema operativo Windows 7, quiero decir que desaparece en Windows 7 si usted tiene alguna otra idea, ¿puede compartirla aquí? Gracias por adelantado. – SharpUrBrain

0

Esta es una pregunta extremadamente interesante. Mi primera idea fue alterar el menú del sistema, usando GetSysMenu. Intenté eliminar y cambiar el nombre del elemento "Cerrar", pero la información sobre herramientas del botón Cerrar no cambió. Luego traté de capturar el HWND de la ventana de información sobre herramientas, pero no tuve éxito. Si dejo que el formulario (trabajo en Delphi) muestre un tooltip llamado "Test", puedo obtener su HWND por FindWindow (nil, 'Test'), y luego puedo SendMessage WM_CLOSE.

En el siguiente código de ejemplo, utilizo un temporizador para buscar constantemente la información sobre herramientas. Esto es malo para el rendimiento, por lo que uno querría saber exactamente cuándo aparece la información sobre herramientas. En este caso, cuando la información sobre herramientas está asociada con un control de cliente, simplemente puede usar el evento 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; 

Sin embargo, hay dos problemas cuando la información sobre herramientas está asociada con los botones de la barra de título.

  1. No pude obtener un control de la información sobre herramientas para el botón Cerrar utilizando FindWindow (nulo, 'Cerrar');
  2. Si somos capaces de obtener el mango, necesitamos un lugar inteligente para escribir el código, no lo queremos en un temporizador. OnHint (en Delphi, existen eventos similares en todas las aplicaciones nativas de Win32) probablemente solo funcione para los controles del cliente. Uno podría usar los mensajes WM_NC * para deducir cuándo se mostrará una información sobre herramientas de la barra de título.
Cuestiones relacionadas