| |
|
|
Rolf Koch | Huhu Aus hier bereits gepostetem Grund nutze ich eine alte Routine und nicht die fertigen Sachen des Trayicons in einem Projekt. Es geht darum, daß es bis damals ging, per Message zu überprüfen, ob die Maus über dem Trayicon verweilt. Wie geschrieben: Ging es früher immer, da die UserMessage (siehe Code) 1234 immer dann eintrat, wenn man mit dem Mauszeiger über dem Icon verweilte und diese wieder auf 0 war, sobald man es verließ. Seht Ihr einen Fehler in Bezug auf das Problem? Hier ein schnell extrahierter Code um das Problem darzustellen.
Def LoadIcon(2) !"USER32","LoadIconA"
DEF ExtractIcon(3) !"SHELL32","ExtractIconA"
Def GetClassLong(2) !"USER32","GetClassLongA"
Def GetCursorPos(1) !"USER32","GetCursorPos"
Def ShellNotify(2) !"SHELL32","Shell_NotifyIconA"
Def SetForegroundWindow(1) !"USER32","SetForegroundWindow"
Def GetDoubleClickTime(0) !"USER32","GetDoubleClickTime"
Def Sleep2(1) !"KERNEL32","Sleep"
Declare NIDATA#,Pos#,ic2#,ende%,icondll&,test4&
dim nidata#,100
Dim ic2#,100
Proc SetNewTip
Parameters t$
String NIDATA#,24=t$+Chr$(0)
ShellNotify(1,NIDATA#)'NIM_Modify
EndProc
Proc SetNewIcon
Parameters name$
declare icon_handle&
String ic2#,0=name$
icon_handle& = loadicon(icondll&,ic2#)' Handle des Icons
Long NIDATA#,20 = icon_handle&
ShellNotify(1,NIDATA#)'NIM_Modify
EndProc
Proc SetIcon
Parameters name$
declare icon_handle&
String ic2#,0=name$
icon_handle& = ExtractIcon(%hinstance,ic2#,0)
'icon_handle&=loadicon(0,ic2#)' Handle des Icons
Long NIDATA#,20 = icon_handle&
ShellNotify(1,NIDATA#)'NIM_Modify
EndProc
Proc CreateTrayIcon
Long NIDATA#, 0 = 88' Größe der Struktur
Long NIDATA#, 4 = %hwnd' Handle des Profanfensters
Long NIDATA#, 8 = 7777' unwichtig,ergibt &wparam bei Abfrage,kann auch 0 sein
Long NIDATA#, 12= 7' NIF_MESSAGE or NIF_ICON or NIF_TIP;
Long NIDATA#, 16 = 1234' benutzerdef. Message, muß größer als 1024 (wm_user) sein
Long NIDATA#, 20 = loadicon(icondll&,ic2#)'LoadIcon(0,0) ' Handle eines Systemicons
String NIDATA#, 24 = ""+Chr$(0)' Tooltip, max. 63 Zeichen
ShellNotify(0,NIDATA#)' NIM_ADD
EndProc
proc add_tryicon
parameters text$,icon$
WindowStyle $78
CreateTrayIcon
SetNewIcon icon$
endproc
proc del_tryicon
ShellNotify(2,NIDATA#)' NIM_DELETE
endproc
usermessages 1234
Window 0,0 - 800,800
Windowtitle "Rechtsklick auf Icon zum beenden!"
add_tryicon "Test","A"
SETICON $winpath+"\\explorer.exe"
settimer 150
WhileNot Ende%
waitinput
if %wmtimer
print %umessage
'Diese Umessage sollte nur 1234 bei Mouseover Icon sein. Ansonsten 0!
case &ulparam=516:End
endif
Endwhile
del_tryicon
|
|
|
| |
|
|
|
Rolf Koch | Zum Hinweis: Bei einer Problemsuche mit iF ist aufgefallen, daß ein Timer wie hier in dem Fall die Umessages scheinbar wegkickt. Mussten uns also was ganz anderes ausdenken. Warum die Messages bei %WMTIMER wie hier in dem Beispiel nicht ankommen, dürfte vielleicht Roland klären können, oder? |
|
|
| |
|
|