Entwickler-Ecke

Windows API - Trayicon-Hint und "&"


Gausi - Di 07.08.07 13:36
Titel: Trayicon-Hint und "&"
Ich leite den letzten Bugreport zu meinem Player einfach mal weiter. Keine Ahnung, wie man das elegant lösen kann, aber irgendein Winapi-Spezialist kann das bestimmt. Bei Nemp sieht das zwar etwas anders aus, aber so gibts den Fehler auch schon (Code aus der Lib):

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
var   fIconData: TNOTIFYICONDATA;

procedure TForm1.FormCreate(Sender: TObject);
begin
// NotifyIconData-Struktur mit Werten füllen
  with fIconData do
    begin
      cbSize := SizeOf (TNOTIFYICONDATA);
      Wnd := Handle;
      uID := 1;
      uFlags := NIF_ICON + NIF_TIP;
      hIcon := LoadIcon (0, IDI_INFORMATION);
      szTip := 'Ernie & Bert';
    end;
  // Icon in die TNA hinzufügen
  If not Shell_NotifyIcon (NIM_ADD, @fIconData) then { Fehler! }
end;
ergibt als Hint ein "Ernie Bert". Zwei & ergeben ein "Ernie _Bert", drei ein "Ernie & Bert". Das Verhalten ist also so ähnlich wie bei den Captions bei Menuitems, aber wie stelle ich das im Tray ab? Bei MSDN hab ich nichts finden können, und ne Suche nach & ist etwas knifflig. Auch Begriffe wie accelerator (so heißen die Dinger doch, oder?) bringen mich nicht weiter.

Ich habe nämlich keine Lust, meine Tooltips nach Stringofchar('&', x) abzusuchen, und diese durch Stringofchar('&', 2*x+1) zu ersetzen. Oder muss ich da durch? (Das wird dann aber wieder so ne frimmelige Funktion... :?)


arj - Di 07.08.07 13:39

Mmh wüsste momentan auch nichts. Als weitere Suchbegriff kannst du vielleicht noch "ampersand" benutzen.


Gausi - Di 07.08.07 14:14

Naja, der Begriff hat mich nur insofern weitergebracht, dass XMPlay (der Player vom Entwickler der bass.dll), dasselbe Problem auch mal hatte, und dass das dort wohl durch ne Verdopplung der &'s gelöst hat...Mist. Warum ich allerdings scheinbar ne Verdopplung+1 brauche, hab ich noch nicht raus...


Dunkel - Di 07.08.07 16:39
Titel: Re: Trayicon-Hint und "&"
user profile iconGausi hat folgendes geschrieben:
{ ... }ergibt als Hint ein "Ernie Bert". Zwei & ergeben ein "Ernie _Bert", drei ein "Ernie & Bert".

Dass Du 3 & brauchst um ein & anzuzeigen, ist sehr komisch, normalerweise reichen 2 &.


user profile iconGausi hat folgendes geschrieben:
Auch Begriffe wie accelerator (so heißen die Dinger doch, oder?) bringen mich nicht weiter.

Ich spiele gerade ein wenig mit DrawText und DrawTextW rum, die Hilfe sagt dazu folgendes:
Zitat:
DT_HIDEPREFIX
Windows 2000/XP: Ignores the ampersand (&) prefix character in the text. The letter that follows will not be underlined, but other mnemonic-prefix characters are still processed. For example:
input string: "A&bc&&d"
normal: "Abc&d"
DT_HIDEPREFIX: "Abc&d"

Vielleicht geht es ja ähnlich mit dem Trayicon-Hint?!?


user profile iconGausi hat folgendes geschrieben:
Ich habe nämlich keine Lust, meine Tooltips nach Stringofchar('&', x) abzusuchen, und diese durch Stringofchar('&', 2*x+1) zu ersetzen. Oder muss ich da durch? (Das wird dann aber wieder so ne frimmelige Funktion... :?)


Delphi-Quelltext
1:
StringReplace(str,'&','&&',[rfReplaceAll]);                    

Was ist daran frimmelig? (wenn es sonst nicht anders geht...)


Gausi - Di 07.08.07 17:01


Delphi-Quelltext
1:
StringReplace(str,'&','&&',[rfReplaceAll]);                    

Das reicht leider nicht, weil ich &&&&& brauche, um ein && darzustellen, und kein &&&&. Ich brauche also 2n+1 viele &'s, wenn ich n aufeinanderfolgende &'s ausgegeben haben möchte.


user profile iconDunkel hat folgendes geschrieben:
Dass Du 3 & brauchst um ein & anzuzeigen, ist sehr komisch, normalerweise reichen 2 &.
Das finde ich auch, aber zwei && ergeben ein unterstrichenes Leerzeichen. :nixweiss:

Wäre aber nett, wenn du (oder jemand anders) das auf deinem System mit obigem Code verifizieren könntest, oder ob das ne Eigenheit meines Systems ist.


Lannes - Di 07.08.07 17:44

Hallo,

das liegt nicht an Deinem System.

Eventuell hilft das weiter:
...Ballon-Tips in der eigenen Delphi Anwednung anzeigen? [http://www.swissdelphicenter.com/de/showcode.php?id=1587]
Noch ein Stichwort: TTS_NOPREFIX