Hallo,
ich nutze diesen
Code zum Erstellen eines TrayIcons mit einem BalloonTip.
Dies funktioniert soweit auch ganz gut.
Bei
MSDN gibt es für Vista und höher eine neue Variable
hBalloonIcon.
Dazu wollte ich folgendes Record um hBalloonIcon erweitern:
Delphi-Quellcode:
TNewNotifyIconData = record
cbSize: DWORD;
Wnd: HWND;
uID: UINT;
uFlags: UINT;
uCallbackMessage: UINT;
hIcon: HICON;
//Version 5.0 is 128 chars, old ver is 64 chars
szTip: array [0..127] of Char;
dwState: DWORD; //Version 5.0
dwStateMask: DWORD; //Version 5.0
szInfo: array [0..255] of Char; //Version 5.0
DUMMYUNIONNAME: TDUMMYUNIONNAME;
szInfoTitle: array [0..63] of Char; //Version 5.0
dwInfoFlags: DWORD; //Version 5.0
hBalloonIcon : HICON;
end;
Aber sobald ich die Zeile
hBalloonIcon : HICON;
hinzufüge, wird der BalloonTip nicht mehr dargestellt (Das Icon schon).
Blende ich diese Zeile aus, so funktioniert wieder alles wie gewünscht.
Auch wenn ich das Record anders aufbaue (sortiere) so hab ich das gleiche Phänomen.
Mein Verdacht ist, dass sich irgendwas im Speicher verschiebt. Deswegen hab ich es auch schon mit packed record versucht. Aber das ergibt das gleiche Ergebnis.
Das Einzige was ich mir wegen hBalloonIcon vorstellen könnte ist, dass man entweder hIcon oder hBalloonIcon haben darf. Das könnte man mit einem Compilerschalter abdecken.
[Edit]
Was ich jetzt gesehen habe auf der
MSDN-Seite ist, dass das Record fest vorgegeben ist.
Delphi-Quellcode:
TNewNotifyIconData =
record
cbSize : DWORD;
Wnd : HWND;
uID : UINT;
uFlags : UINT;
uCallbackMessage: UINT;
hIcon : HICON;
szTip :
array [0..127]
of Char;
dwState : DWORD;
//Version 5.0
dwStateMask : DWORD;
//Version 5.0
szInfo :
array [0..255]
of Char;
//Version 5.0
DUMMYUNIONNAME : TDUMMYUNIONNAME;
szInfoTitle :
array [0..63]
of Char;
//Version 5.0
dwInfoFlags : DWORD;
//Version 5.0
guidItem :
GUID;
hBalloonIcon : HICON;
end;
Das heisst: Vor hBalloonIcon muss guidItem definiert werden. Bei
MSDN steht:
GUID guidItem;
- Nur was ist
GUID für ein Typ?