| |
|
|
Georg Teles | Mir war veces otra vez wichtig, WideStrings a el TrayIcon transferencia a puede, hauptsächlich wegen kyrillischem Texto por lo tanto hier una Codesnippet dazu - el kyrillische Texto kann mittels dieser Unit [...] producido y hier verwendet voluntad (habs auskommentiert)
'###############################################
'# #
'# TrayIcon mittels NOTIFYICONDATAA/W erzeugen #
'# #
'# Georg Teles al 21.09.2020 #
'# #
'###############################################
'$U lat2cyr.pcu = l2cPCU. ' Unit se benötigt, en kyrillischen Texto a erzeugen
Declarar OldWndProc&, ico&, ico2&, e%
'-------------# Definitionen
Def GetWindowLong(2)!"USER32","GetWindowLongA"
Def SetWindowLong(3)!"USER32","SetWindowLongA"
Def CallWindowProc(5)!"USER32","CallWindowProcA"
Def Shell_NotifyIconA(2)!"SHELL32","Shell_NotifyIconA"'ANSI
Def Shell_NotifyIconW(2)!"SHELL32","Shell_NotifyIconW"'WIDE
'-------------# NotifyIcon Konstanten
Def &TRAYMSG $500
Def &NIM_ADD $0
Def &NIM_MODIFY $1
Def &NIM_DELETE $2
Def &NIF_MESSAGE $1
Def &NIF_ICON $2
Def &NIF_TIP $4
'-------------# Estructuras
Struct NIDataA = cbSize&, hWnd&, uID&, uFlags&, uCallbackMessage&, hIcon&, szTip$(128)'reservierte Größe = 128 Signo
Struct NIDataW = cbSize&, hWnd&, uID&, uFlags&, uCallbackMessage&, hIcon&, szTip$(256)'benötigt doppelte Größe como ANSI por lo tanto = 256 en 128 Signo
'-------------# Programa
Conjunto("FastMode", 1)' erweiterte Messages
Conjunto("TrueColor",1)
Windowtitle "NotifyIconData"
Ventana de Estilo 2+4+8+16+512
Ventana 355,282
ico& = Crear("hIcon",Par$(0),0)' Icon erwünscht ?
SendMessage(%HWnd,$80,1,ico&)' Icon Setzen
'SetWindowLong(%HWnd,-16,$92CE0000) ' Fensterstil alternativ conjunto = derslebe como 2+4+8+16 s.o. aber OHNE 512 !
'-------------# NOTIFYICON después de %HWnd erzeugen ! Ejemplo 3 Icons
Declarar NID#, NID2#, NID3#
'-------------# ICON #1
Dim NID#, NIDataA' ANSI
NID#.cbSize& = SizeOf(NID#)
NID#.hWnd& = %hWnd
NID#.uID& = 0' ID #0 !
NID#.uFlags& = &NIF_MESSAGE | &NIF_ICON | &NIF_TIP
NID#.uCallbackMessage& = &TRAYMSG
NID#.hIcon& = ico&
NID#.szTip$ = "Ich bin Icon #1 !"+Chr$(0)
Shell_NotifyIconA(&NIM_ADD,NID#)' Erzeuge Icon #1
'-------------# ICON #2
Dim NID2#, NIDataA' ANSI
NID2#.cbSize& = SizeOf(NID2#)
NID2#.hWnd& = %hWnd
NID2#.uID& = 1' ID #1 !
NID2#.uFlags& = &NIF_MESSAGE | &NIF_ICON | &NIF_TIP
NID2#.uCallbackMessage& = &TRAYMSG
NID2#.hIcon& = ico&
NID2#.szTip$ = "Ich bin Icon #2 !"+Chr$(0)
Shell_NotifyIconA(&NIM_ADD,NID2#)' Erzeuge Icon #2
'-------------# ICON #3
Dim NID3#, NIDataW' WIDE
NID3#.cbSize& = SizeOf(NID3#)
NID3#.hWnd& = %hWnd
NID3#.uID& = 2' ID #2 !
NID3#.uFlags& = &NIF_MESSAGE | &NIF_ICON | &NIF_TIP
NID3#.uCallbackMessage& = &TRAYMSG
NID3#.hIcon& = ico&
NID3#.szTip$ = ansi2wideFAST("Ich bin Icon #3 !"+Chr$(0))
Proc ansi2wideFAST
Parámetros texto$
Declarar textneu$
WhileLoop 0,Len(texto$)-1
textneu$ = textneu$+Mid$(texto$,&bucle+1,1)+Chr$(0)
EndWhile
Volver textneu$
ENDPROC
' lat2cyr.pcu Unit se benötigt !
'NID3#.szTip$ = l2cPCU.l2l("ein Gemischter Texto - ")+l2cPCU.l2c("-Eto nebol-m-soj test <>|\q!§$%&/()=´'?^@")+l2cPCU.l2l(" mehr Text"+Chr$(0))
Shell_NotifyIconW(&NIM_ADD,NID3#)' Erzeuge Icon #3
'-------------# WindowPROC / Auswertung el Icons
Proc WindowProc
Parámetros hWnd&, Message&, wParam&, lParam&
If Message& = &TRAYMSG' Message auffangen
' alternativ ID des Icons vorschalten mittels wParam& = ID el Icons
If lParam& = $201
imprimir "links 1x angeklickt en Icon ID"+Str$(wParam&)
ElseIf lParam& = $203
imprimir "links DBL-Clic en Icon ID"+Str$(wParam&)
ElseIf lParam& = $204
imprimir "rechts 1x angeklickt en Icon ID"+Str$(wParam&)
ElseIf lParam& = $206
imprimir "rechts DBL-Clic en Icon ID"+Str$(wParam&)
EndIf
EndIf
Volver CallWindowProc(OldWndProc&, hWnd&, Message&, wParam&, lParam&)
ENDPROC
OldWndProc& = GetWindowLong(%hWnd,-4)' original WndProc speichern
SetWindowLong(%hWnd,-4,ProcAddr("WindowProc",4))' WindowProc zuweisen
' Icon #1 löschen, erzeugen, ändern
var btk& = Crear("Button",%hWnd,"KILL #1",100,100,100,20)
var bts& = Crear("Button",%hWnd,"CREATE #1",100,130,100,20)
var btu& = Crear("Button",%hWnd,"UPDATE #1",100,160,100,20)
Sinestar encargado e%
Waitinput
If ((%Key = 2) | (%Key = 27))
Inc e%
EndIf
' Icon #1 löschen, erzeugen, ändern
If Clicked(btk&)
Shell_NotifyIconA(&NIM_DELETE,NID#)' Löschen
ElseIf Clicked(bts&)
Shell_NotifyIconA(&NIM_ADD,NID#)' Erzeugen
ElseIf Clicked(btu&)
NID#.szTip$ = "Ich bin Icon #1, Uhrzeit es: "+Time$(0)+":"+Time$(1)+Chr$(0)
Case ico2&:DeleteObject ico2&
ico2& = Crear("hIcon",Par$(0),1)
NID#.hIcon& = ico2&' una más Icon !
Shell_NotifyIconA(&NIM_MODIFY,NID#)' Aktualisieren
EndIf
EndWhile
SetWindowLong(%hWnd,-4,OldWndProc&)' original WndProc wiederherstellen
Shell_NotifyIconA(&NIM_DELETE,NID#)' lösche Icon #1
Shell_NotifyIconA(&NIM_DELETE,NID2#)' lösche Icon #2
Shell_NotifyIconA(&NIM_DELETE,NID3#)' lösche Icon #3
SetFocus(%hWnd)
DeleteObject ico&, ico2&
DisPose NID#, NID2#, NID3#
Grüße |
|
|
| |
|
|