Italia
Fonte/ Codesnippets

NotifyIconDataA, NotifyIconDataW, TrayIcon, SysIcon

 

Georg
Teles
Mir war mal wieder wichtig, WideStrings an das TrayIcon trasferimento zu können, hauptsächlich wegen kyrillischem Text daher hier ein Codesnippet dazu - der kyrillische Text kann mittels dieser Unit  [...]  erzeugt und auch hier verwendet werden (habs auskommentiert)
'###############################################
'#                                             #
'# TrayIcon mittels NOTIFYICONDATAA/W erzeugen #
'#                                             #
'#          Georg Teles am 21.09.2020          #
'#                                             #
'###############################################
'$U lat2cyr.pcu = l2cPCU. ' Unit wird necessario, um kyrillischen Text zu erzeugen
Declare 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
'-------------# Strukturen
Struct NIDataA = cbSize&, hWnd&, uID&, uFlags&, uCallbackMessage&, hIcon&, szTip$(128)'reservierte Dimensione = 128 Zeichen
Struct NIDataW = cbSize&, hWnd&, uID&, uFlags&, uCallbackMessage&, hIcon&, szTip$(256)'necessario doppelte Dimensione wie ANSI daher = 256 bei 128 Zeichen
'-------------# Programm
Set("FastMode", 1)' erweiterte Messages
Set("TrueColor",1)
Windowtitle "NotifyIconData"
WindowStyle 2+4+8+16+512
Window 355,282
ico& = Create("hIcon",Par$(0),0)' Icon erwünscht ?
SendMessage(%HWnd,$80,1,ico&)' Icon Setzen
'SetWindowLong(%HWnd,-16,$92CE0000) ' Fensterstil alternativ setzen = derslebe wie 2+4+8+16 s.o. aber OHNE 512 !
'-------------# NOTIFYICON nach %HWnd erzeugen ! Beispiel 3 Icons
Declare 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

    Parameters text$
    Declare textneu$

    WhileLoop 0,Len(text$)-1

        textneu$ = textneu$+Mid$(text$,&loop+1,1)+Chr$(0)

    EndWhile

    Return textneu$

EndProc

' lat2cyr.pcu Unit wird necessario !
'NID3#.szTip$ = l2cPCU.l2l("ein Gemischter Text - ")+l2cPCU.l2c("-Eto nebol-m-soj test <>|\q!§$%&/()=´'?^@")+l2cPCU.l2l(" mehr Text"+Chr$(0))
Shell_NotifyIconW(&NIM_ADD,NID3#)' Erzeuge Icon #3
'-------------# WindowPROC / Auswertung der Icons

Proc WindowProc

    Parameters hWnd&, Message&, wParam&, lParam&

    If Message& = &TRAYMSG' Message auffangen

        ' alternativ ID des Icons vorschalten mittels wParam& = ID der Icons

        If lParam& = $201

            print "links 1x angeklickt auf Icon ID"+Str$(wParam&)

        ElseIf lParam& = $203

            print "links DBL-Klick auf Icon ID"+Str$(wParam&)

        ElseIf lParam& = $204

            print "rechts 1x angeklickt auf Icon ID"+Str$(wParam&)

        ElseIf lParam& = $206

            print "rechts DBL-Klick auf Icon ID"+Str$(wParam&)

        EndIf

    EndIf

    Return 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& = Create("Button",%hWnd,"KILL #1",100,100,100,20)
var bts& = Create("Button",%hWnd,"CREATE #1",100,130,100,20)
var btu& = Create("Button",%hWnd,"UPDATE #1",100,160,100,20)

WhileNot 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 ist: "+Time$(0)+":"+Time$(1)+Chr$(0)
        Case ico2&:DeleteObject ico2&
        ico2& = Create("hIcon",Par$(0),1)
        NID#.hIcon& = ico2&' ein anderes 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
 
TC-Programming [...] 
XProfan 8.0 - 10.0 - X2 - X3 - X4

21.09.2020  
 



Zum Quelltext


Topictitle, max. 100 characters.
 

Systemprofile:

Kein Systemprofil angelegt. [anlegen]

XProfan:

 Posting  Font  Smilies  ▼ 

Bitte anmelden um einen Beitrag zu verfassen.
 

Topic-Options

1.631 Views

Untitledvor 0 min.
Georg Teles vor 26 Tagen
H.Brill03.08.2024
Stephan Sonneborn05.07.2021
ByteAttack21.01.2021
Di più...

Themeninformationen

Dieses Thema hat 1 subscriber:

Georg Teles (1x)


Admins  |  AGB  |  Applications  |  Autori  |  Chat  |  Informativa sulla privacy  |  Download  |  Entrance  |  Aiuto  |  Merchantportal  |  Impronta  |  Mart  |  Interfaces  |  SDK  |  Services  |  Giochi  |  Cerca  |  Support

Ein Projekt aller XProfaner, die es gibt!


Il mio XProfan
Private Notizie
Eigenes Ablageforum
Argomenti-Merkliste
Eigene Beiträge
Eigene Argomenti
Zwischenablage
Annullare
 Deutsch English Français Español Italia
Traduzioni

Informativa sulla privacy


Wir verwenden Cookies nur als Session-Cookies wegen der technischen Notwendigkeit und bei uns gibt es keine Cookies von Drittanbietern.

Wenn du hier auf unsere Webseite klickst oder navigierst, stimmst du unserer Erfassung von Informationen in unseren Cookies auf XProfan.Net zu.

Weitere Informationen zu unseren Cookies und dazu, wie du die Kontrolle darüber behältst, findest du in unserer nachfolgenden Datenschutzerklärung.


einverstandenDatenschutzerklärung
Ich möchte keinen Cookie