Tooltip-Text für Titlebar-Schaltflächen außer Kraft setzen (Schließen, Maximieren, Minimieren, Hilfe)

8

Ich habe ohne Glück versucht, den Text des Tooltips zu ändern, der für die Schaltflächen in der Haupttitelleiste eines Formulars angezeigt wird.

Kurz gesagt, wir haben den "Hilfe" -Button für Windows Forms genutzt, um einen anderen Zweck zu haben. Das funktioniert gut. Das Problem ist, dass, wenn Sie den Mauszeiger über diese Schaltfläche bewegen, ein Tooltip "Hilfe" angezeigt wird, der für die Anwendung keinen Sinn ergibt.

Idealerweise gibt es eine Möglichkeit, den Text dieses Tooltips für meine Anwendung zu ändern. An dieser Stelle wäre ich jedoch zufrieden damit, einen Weg zu finden, die Tooltips komplett zu deaktivieren.

Ich weiß, dass Sie die Tooltips für das gesamte Betriebssystem deaktivieren können, indem Sie den Schlüssel "UserPreferencesMask" in regedit ändern, aber ich möchte wirklich, dass dies nur meine Anwendung betrifft.

Auch hier gibt es im Idealfall eine Möglichkeit, dies mit verwaltetem Code zu tun, aber ich würde nicht dagegen sein, in die Windows-API oder ähnliches zu verlinken.

Vielen Dank für Vorschläge zur Lösung dieses Problems!

    
Tim 30.03.2010, 21:45
quelle

2 Antworten

1

Um das Problem zu umgehen, können Sie stattdessen die Hilfeschaltfläche nicht verwenden: Fügen Sie Ihre benutzerdefinierte Schaltfläche hinzu.

Obwohl dieses Beispiel nicht so perfekt ist, aber es zeigt Ihnen die Idee.

    
Sameh Deabes 30.03.2010 22:15
quelle
0

Das ist eine äußerst interessante Frage. Meine erste Idee war, das Systemmenü mit GetSysMenu zu ändern. Ich habe versucht, das Element "Schließen" zu entfernen und umzubenennen, aber der Tooltip der Schaltfläche "Schließen" hat sich nicht geändert. Dann habe ich versucht, den HWND des Tooltip-Fensters zu erfassen, aber es ist mir nicht gelungen. Wenn ich das Formular (ich arbeite in Delphi) eine QuickInfo mit dem Namen "Test" anzeigen lasse, kann ich seine HWND von FindWindow (nil, 'Test') bekommen, und dann kann ich SendMessage WM_CLOSE dazu.

Im folgenden Beispielcode verwende ich einen Timer, um ständig nach dem Tooltip zu suchen. Das ist schlecht für die Leistung, also würde man genau herausfinden wollen, wann der Tooltip erscheint. In diesem Fall, wenn der Tooltip einem Client-Steuerelement zugeordnet ist, kann einfach das OnHint-Ereignis verwendet werden.

%Vor%

Es gibt jedoch zwei Probleme, wenn der Tooltip den Titelleisten-Schaltflächen zugeordnet ist.

  1. Ich konnte den Tooltip für die Schaltfläche "Schließen" nicht mithilfe von FindWindow (ohne 'Schließen');
  2. ermitteln
  3. Wenn wir in der Lage sind, den Griff zu bekommen, brauchen wir einen intelligenten Ort, um den Code zu schreiben - wir wollen es nicht in einem Timer. OnHint (in Delphi - ähnliche Ereignisse sind in allen nativen Win32-Anwendungen vorhanden) funktioniert wahrscheinlich nur für Client-Steuerelemente. Man könnte die WM_NC * -Nachrichten verwenden, um daraus abzuleiten, wann ein Titelleisten-Tooltip angezeigt werden soll.
Andreas Rejbrand 31.03.2010 12:09
quelle