Systrayicon hat keine Funktion bei erhöhter DPI - Skalierung

18/03/2014 - 15:46 von Wilfried Dietrich | Report spam
Ich verwende nachfolgenden Code um ein Icon im Systemtray
anzuzeigen und bei einem Klick darauf, ein Fenster ein- oder auszublenden
bzw. ein Popupmenu anzuzeigen.


'SystrayPict ist eine Picturebox die ein Icon enthàlt

'\\ In einem Modul
Public Declare Function Shell_NotifyIcon Lib "shell32.dll" Alias "Shell_NotifyIconA" (ByVal dwMessage As Long, IpData As
NOTIFYICONDATA) As Long
Type NOTIFYICONDATA
cbSize As Long
hWnd As Long
uID As Long
UFlags As Long
uCallbackmessage As Long
hIcon As Long
szTip As String * 64
End Type
Public t As NOTIFYICONDATA
Public Const NIM_ADD = &H0
Public Const NIM_MODIFY = &H1
Public Const NIM_DELETE = &H2
Public Const NIF_MESSAGE = &H1
Public Const NIF_ICON = &H2
Public Const NIF_TIP = &H4
Public Const WM_MOUSEMOVE = &H200
'// Ende


Private Sub Form_Load()
SystraySymbol
End Sub


Private Sub SystraySymbol()
On Error GoTo EH

'Symbol im Systray anzeigen
t.cbSize = Len(t)
t.hWnd = SystrayPict.hWnd
t.uID = 1&
t.UFlags = NIF_MESSAGE Or NIF_ICON Or NIF_TIP
'bei Click auf Symbol SystrayPict.MouseMove aufrufen
t.uCallbackmessage = WM_MOUSEMOVE
'Symbol setzen
t.hIcon = SystrayPict.Picture
'ToolTip-Text setzen
t.szTip = "Mein Tooltip" & Chr$(0)
'Symbol anzeigen
Shell_NotifyIcon NIM_ADD, t
EH:
On Error GoTo 0
End Sub


Private Sub SystrayPict_MouseMove(Button As Integer, Shift As Integer, x As Single, Y As Single)
If Hex(x) = "1E3C" Then 'rechte Maustaste gedrückt
If Me.Visible Then
PopupMenu mnuSystrayPopUp, vbRightButton, , , mnuAusblenden
Else
PopupMenu mnuSystrayPopUp, vbRightButton, , , mnuAnzeigen
End If
End If
If Hex(x) = "1E0F" Then 'linke Maustaste gedrückt
Me.Visible = Not Me.Visible
End If
End Sub


Wird unter Windows 7 in Anzeige die Skalierung auf z.B. auf Mittel - 125%
eingestellt, dann wird das Icon zwar noch angezeigt, es reagiert aber auf
keinen Mausklick bzw. das SystrayPict_MouseMove wird nicht ausgelöst.

Was muss ich im Code àndern bzw. welchen Code muss ich verwenden,
das dass Icon nicht nur bei Kleiner - 100% (Standard) wie gewünscht funktioniert?

Gruß
Wilfried
 

Lesen sie die antworten

#1 Ulrich Möller
18/03/2014 - 15:51 | Warnen spam
Am 18.03.2014 15:46, schrieb Wilfried Dietrich:
Ich verwende nachfolgenden Code um ein Icon im Systemtray
anzuzeigen und bei einem Klick darauf, ein Fenster ein- oder auszublenden
bzw. ein Popupmenu anzuzeigen.


'SystrayPict ist eine Picturebox die ein Icon enthàlt

'\\ In einem Modul
Public Declare Function Shell_NotifyIcon Lib "shell32.dll" Alias
"Shell_NotifyIconA" (ByVal dwMessage As Long, IpData As
NOTIFYICONDATA) As Long
Type NOTIFYICONDATA
cbSize As Long
hWnd As Long
uID As Long
UFlags As Long
uCallbackmessage As Long
hIcon As Long
szTip As String * 64
End Type
Public t As NOTIFYICONDATA
Public Const NIM_ADD = &H0
Public Const NIM_MODIFY = &H1
Public Const NIM_DELETE = &H2
Public Const NIF_MESSAGE = &H1
Public Const NIF_ICON = &H2
Public Const NIF_TIP = &H4
Public Const WM_MOUSEMOVE = &H200
'// Ende


Private Sub Form_Load()
SystraySymbol
End Sub


Private Sub SystraySymbol()
On Error GoTo EH

'Symbol im Systray anzeigen
t.cbSize = Len(t)
t.hWnd = SystrayPict.hWnd
t.uID = 1&
t.UFlags = NIF_MESSAGE Or NIF_ICON Or NIF_TIP
'bei Click auf Symbol SystrayPict.MouseMove aufrufen
t.uCallbackmessage = WM_MOUSEMOVE
'Symbol setzen
t.hIcon = SystrayPict.Picture
'ToolTip-Text setzen
t.szTip = "Mein Tooltip" & Chr$(0)
'Symbol anzeigen
Shell_NotifyIcon NIM_ADD, t
EH:
On Error GoTo 0
End Sub


Private Sub SystrayPict_MouseMove(Button As Integer, Shift As Integer,
x As Single, Y As Single)
If Hex(x) = "1E3C" Then 'rechte Maustaste gedrückt
If Me.Visible Then
PopupMenu mnuSystrayPopUp, vbRightButton, , , mnuAusblenden
Else
PopupMenu mnuSystrayPopUp, vbRightButton, , , mnuAnzeigen
End If
End If
If Hex(x) = "1E0F" Then 'linke Maustaste gedrückt
Me.Visible = Not Me.Visible
End If
End Sub


Wird unter Windows 7 in Anzeige die Skalierung auf z.B. auf Mittel - 125%
eingestellt, dann wird das Icon zwar noch angezeigt, es reagiert aber auf
keinen Mausklick bzw. das SystrayPict_MouseMove wird nicht ausgelöst.

Was muss ich im Code àndern bzw. welchen Code muss ich verwenden,
das dass Icon nicht nur bei Kleiner - 100% (Standard) wie gewünscht
funktioniert?

Gruß
Wilfried



Hallo Wilfried,

nach deinem Kommentar fragst du anhand der X-Koordinate der Mausposition
ab, ob eine Maustaste gedrückt ist (if Hex(x)=???? ) ?

Ulrich

Ähnliche fragen