Deutsch
Quelltexte/ Codesnippets

NotifyIconDataA, NotifyIconDataW, TrayIcon, SysIcon

 

Georg
Teles
Mir war mal wieder wichtig, WideStrings an das TrayIcon übergeben 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 benötigt, 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 Größe = 128 Zeichen
Struct NIDataW = cbSize&, hWnd&, uID&, uFlags&, uCallbackMessage&, hIcon&, szTip$(256)'benötigt doppelte Größe 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 benötigt !
'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


Thementitel, max. 100 Zeichen.
 

Systemprofile:

Kein Systemprofil angelegt. [anlegen]

XProfan:

 Beitrag  Schrift  Smilies  ▼ 

Bitte anmelden um einen Beitrag zu verfassen.
 

Themenoptionen

1.629 Betrachtungen

Unbenanntvor 0 min.
Georg Teles vor 26 Tagen
H.Brill03.08.2024
Stephan Sonneborn05.07.2021
ByteAttack21.01.2021
Mehr...

Themeninformationen

Dieses Thema hat 1 Teilnehmer:

Georg Teles (1x)


Admins  |  AGB  |  Anwendungen  |  Autoren  |  Chat  |  Datenschutz  |  Download  |  Eingangshalle  |  Hilfe  |  Händlerportal  |  Impressum  |  Mart  |  Schnittstellen  |  SDK  |  Services  |  Spiele  |  Suche  |  Support

Ein Projekt aller XProfaner, die es gibt!


Mein XProfan
Private Nachrichten
Eigenes Ablageforum
Themen-Merkliste
Eigene Beiträge
Eigene Themen
Zwischenablage
Abmelden
 Deutsch English Français Español Italia
Übersetzungen

Datenschutz


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