[WIN] Tray
Übersicht

![]() |
GeeeckoBetreff: [WIN] Tray |
![]() Antworten mit Zitat ![]() |
---|---|---|
Huhu!
Habe für mein derzeitiges Programm ein Tray-Manager gebraucht. Das Programm kann 200 Fenster in den Tray setzen xD Die Zahl kann auch verändert werden, aber ich denke 200 sollten reichen... Code: [AUSKLAPPEN] windowToTray(window:TGadget, tip:String = "", icon:String = "", func(window:TGadget, msg:Int) = Null) Setzt ein fenster in den Tray. Fenster muss manuell versteckt werden. window: Fenster was in den Tray versetzt werden soll tip: Tooltip der angezeigt wird icon: *.ico Datei für das Icon func(window:TGadget,msg:int): Funktion die aufgerufen wird, wenn etwas mit dem Icon geschieht. window ist das Fenster, und msg die Aktion. Code: [AUSKLAPPEN] msg | ------+ 1 = Linke Maustaste Füge später noch Aktionen hinzu. Wird NULL angegeben, wird das Fenster automatisch wieder angezeigt und aus dem Tray geholt bei einem Linksklick auf das Icon. Code: [AUSKLAPPEN] windowFromTray(window:TGadget) Holt ein Fenster aus dem Tray. window: Fenster welcher heruasgeholt werden soll Fenster muss manuell wieder angezeigt werden. ACHTUNG: Ein Fenster darf NICHT öfter als 1mal in den Tray gesetzt werden! Ihr braucht 2 Datein: Code: [AUSKLAPPEN] #include "windows.h" void __windowToTray(HWND window,int ID,const char *tip[],LPCTSTR iconFile) { NOTIFYICONDATA nid; nid.cbSize = sizeof(NOTIFYICONDATA); nid.hWnd = window; nid.uID = 0; nid.uFlags = NIF_ICON|NIF_MESSAGE|NIF_TIP; nid.uCallbackMessage = WM_USER+ID; nid.hIcon = LoadImage(NULL,iconFile,IMAGE_ICON,0,0,LR_LOADFROMFILE|LR_DEFAULTCOLOR); strcpy(nid.szTip,tip); Shell_NotifyIcon(NIM_ADD,&nid); } void __windowFromTray(HWND window,int ID,const char *tip[],LPCTSTR iconFile) { NOTIFYICONDATA nid; nid.cbSize = sizeof(NOTIFYICONDATA); nid.hWnd = window; nid.uID = 0; Shell_NotifyIcon(NIM_DELETE,&nid); } tray.c - Hätte man auch direkt in BMax wrappen können, hatte aber keine Lust. Eine *.c Datei tuts auch. Code: [AUSKLAPPEN] Extern Function __windowToTray:Byte Ptr(hwnd:Int, id:Int, tip:Byte Ptr, iconFile:Byte Ptr) Function __windowFromTray(hwnd:Int, id:Int, tip:Byte Ptr, iconFile:Byte Ptr) End Extern Type TTrayManager Global ids:Int[] = New Int[200] Global trayList:TList = New TList Field window:TGadget Field tip:String Field icon:String Field func(window:TGadget, MSG:Int) Field id:Int Function windowToTray(window:TGadget, tip:String = "", icon:String = "", func(window:TGadget, msg:Int) = Null) Local newTray:TTrayManager = New TTrayManager newTray.window = window newTray.tip = tip newTray.icon = icon newTray.func = func SetWindowLongW(QueryGadget(window, QUERY_HWND), GWL_WNDPROC, Int Byte Ptr ___traysystem___Callback) Local id:Int = 0 For Local i:Int = 0 To 199 If(TTrayManager.ids[i] = 0) Then id = i Exit EndIf Next TTrayManager.ids[id] = 1 newTray.id = id If(func) Then newTray.func = func Else newTray.func = __traysystem__defaultfunc EndIf __windowToTray(QueryGadget(window, QUERY_HWND), id, tip.ToCString(), icon.ToCString()) TTrayManager.trayList.AddLast(newTray) End Function Function windowFromTray(window:Tgadget) For Local tray:TTrayManager = EachIn TTrayManager.trayList If(tray.window = window) Then __windowFromTray(QueryGadget(tray.window, QUERY_HWND), tray.id, tray.tip.ToCString(), tray.icon.ToCString()) TTrayManager.ids[tray.id] = 0 TTrayManager.trayList.Remove(tray) EndIf Next End Function End Type Function ___traysystem___Callback:Int(hwnd:Int, msg:Int, wparam:Int, lparam:Int) "win32" For Local tray:TTrayManager = EachIn TTrayManager.trayList If(MSG = 1024 + tray.id) Then If(lparam = 513) Then ' Linke Maustaste If(tray.func) Then tray.func(tray.window, 1) EndIf EndIf Next Return TWindowsGUIDriver.ClassWndProc(hwnd, MSG, wparam, lparam) End Function Function __traysystem__defaultfunc(window:TGadget, msg:Int) ShowGadget(window) TTrayManager.windowFromTray(window) End Function Function windowToTray(window:TGadget, tip:String = "", icon:String = "", func(window:TGadget, msg:Int) = Null) TTrayManager.windowToTray(window, tip, icon, func) End Function Function windowFromTray(window:TGadget) TTrayManager.WindowFromTray(window) End Function tray.bmx - Enthält die beiden Funktionen Code: [AUSKLAPPEN] SuperStrict '----------------------------------- WICHTIG!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ----------> Import maxgui.drivers Import "tray.c" Include "tray.bmx" '----------------------------------- WICHTIG!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! <---------- Global window:TGadget = CreateWindow("Window", 0, 0, 300, 300, Null, WINDOW_DEFAULT) Global window2:TGadget = CreateWindow("Window2", 100, 100, 300, 300, Null, WINDOW_DEFAULT) Repeat Select WaitEvent() Case EVENT_WINDOWCLOSE Select EventSource() Case window HideGadget(window) TTrayManager.windowToTray(window, "Window", "TestIcon.ico") Case window2 HideGadget(window2) TTrayManager.windowToTray(window2, "Window 2~nlol", "TestIcon.ico") End Select End Select Forever Beispiel.bmx - Enthält ein Beispiel. (TestIcon.ico müsst ihr Testweise irgendwo runterladen, sonst wird ein leeres Feld im Tray angeziegt) Code: [AUSKLAPPEN] SuperStrict '----------------------------------- WICHTIG!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ----------> Import maxgui.drivers Import "tray.c" Include "tray.bmx" '----------------------------------- WICHTIG!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! <---------- Global window:TGadget = CreateWindow("Window", 0, 0, 300, 300, Null, WINDOW_DEFAULT) Global window2:TGadget = CreateWindow("Window2", 100, 100, 300, 300, Null, WINDOW_DEFAULT) Repeat Select WaitEvent() Case EVENT_WINDOWCLOSE Select EventSource() Case window HideGadget(window) TTrayManager.windowToTray(window, "Window", "TestIcon.ico", meineFunktion) Case window2 HideGadget(window2) TTrayManager.windowToTray(window2, "Window 2~nlol", "TestIcon.ico", meineFunktion) End Select End Select Forever Function meineFunktion(window_:TGadget, msg:Int) Select window_ Case window Confirm "Window!" ShowGadget(window) windowFromTray(window) Case window2 Confirm "Window 2!" ShowGadget(window2) windowFromTray(window2) End Select End Function Noch ein Beispiel. ACHTUNG: Code: [AUSKLAPPEN] Import maxgui.drivers Import "tray.c" Include "tray.bmx" Muss immer in der "Haupt-Datei" stehen. Ich hoffe es gefällt. Sollte alles Funktionieren. Aber garantiere für nichts ![]() lg MD [/code] |
||
![]() |
DAK |
![]() Antworten mit Zitat ![]() |
---|---|---|
^^sowas hab ich vorgestern den ganzen tag gesucht^^
habs mir dann per winapi selbst gebaut... gute sache aber! wär vll cool, wenn dus in ein modul umbauen könntest... |
||
Gewinner der 6. und der 68. BlitzCodeCompo |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group