*************************************************************************************** * tbHelp.prg *************************************************************************************** * Implements the Taskbar system tray icons. * Example: * * oTb := TaskbarIcon(():New( xbeP_User + 30 ):Create() * oTb:AddIcon( 1,ICON_PRINTER,"Print Screen" ) * // Context menu for Icon * oMenu := XbpMenu():new( oTb ):create() * oMenu:AddItem( { "~Exit" , { || PostAppEvent( xbeP_Close ) } } ) * *************************************************************************************** #INCLUDE "XBP.CH" #INCLUDE "ERROR.CH" // Pragma-Anweisung fr den C-Source #pragma map( AddIcon, "_XADDICON") #pragma map( DelIcon, "_XDELICON") #pragma map( ChangeIcon, "_XCHANGEICON") #pragma map( IconInit, "_XICONINIT") #pragma map( IconExit, "_XICONEXIT") CLASS TaskBarIcon FROM XbpStatic PROTECTED: VAR aIcons VAR nHwnd VAR nEvent VAR status EXPORTED: METHOD INIT, create, ClassName, Destroy METHOD AddIcon, RemIcon, RemAllIcons, ChangeIcon ACCESS METHOD IconCount VAR IconCount ENDCLASS /*************************************************************************************** Init-Methode */ METHOD TaskBarIcon:INIT( nEvent ) LOCAL oE, bE, oDesk := APPDESKTOP() // Init xbpStatic Class as invisible ::xbpStatic:Init( oDesk , oDesk, {0,0}, {0,0} ,, .F.) ::xbpStatic:type := XBPSTATIC_TYPE_TEXT ::xbpStatic:options := XBPSTATIC_TEXT_LEFT ::xbpStatic:caption := "" ::xbpStatic:Create() ::status := XBP_STAT_CREATE If VALTYPE( nEvent ) = "N" ::nEvent := nEvent IconInit( ::nEvent, self ) Else oE := Error():New() oE:args := {nEvent} oE:canDefault := .F. oE:canRetry := .F. oE:canSubstitute := .F. oE:description := "Invalid parameter nEvent" oE:filename := "" oE:gencode := 0 oE:operation := "" oE:oscode := 0 oE:severity := XPP_ES_FATAL oE:subcode := 1 oE:subsystem := "TaskBarIcon " oE:thread := ThreadId() oE:tries := 0 bE := ErrorBlock() EVAL( bE, oE ) endif If self:nHwnd = NIL ::nHwnd := ::GetHWND() EndIF ::aIcons := {} RETURN self /*************************************************************************************** Create-Methode */ METHOD TaskBarIcon:CREATE( nEvent ) If ::status = NIL ::Init( nEvent ) EndIF RETURN self /*************************************************************************************** ClassName-Methode */ METHOD TaskBarIcon:ClassName RETURN "TaskBarIcon" /*************************************************************************************** Destroy : Destroy-Methode */ METHOD TaskBarIcon:Destroy ::RemAllIcons() ::aIcons := NIL ::nHwnd := NIL ::nEvent := NIL ::status := NIL IconExit(::nHwnd) ::xbpStatic:Destroy() RETURN self /*************************************************************************************** AddIcon : Icon hinzufgen nId = numerische ID des Icons zur Identifikation des Events nResId = Ressourcen-Id des Icons (an EXE gebunden) cToolTip = Text des Tooltips, der angezeigt wird */ METHOD TaskBarIcon:AddIcon( nId, nResId, cToolTip ) LOCAL nOldIcons := LEN( ::aIcons ) If ::nEvent = NIL IconInit( xbeP_User + 1, self ) ::nEvent = xbeP_User + 1 EndIF IF AddIcon( ::nHwnd, nId, nResId , cToolTip ) AADD( ::aIcons, nId ) ENDIF RETURN LEN(::aIcons) > nOldIcons /*************************************************************************************** ChangeIcon : Icon oder Tooltip-Text „ndern Parameter wie AddIcon()-Aufruf */ METHOD TaskBarIcon:ChangeIcon( nId, nResId, cToolTip ) RETURN ChangeIcon( ::nHwnd, nId, nResId , cToolTip ) /*************************************************************************************** RemIcon : Icon entfernen nId = numerische ID des Aufrufs von AddIcon */ METHOD TaskBarIcon:RemIcon( nId ) LOCAL nOldIcons := LEN ( ::aIcons ) IF DelIcon( ::nHwnd, nId ) ADEL( ::aIcons, ASCAN( ::aIcons, nId ) ) ASIZE( ::aIcons, LEN(::aIcons) - 1 ) ENDIF RETURN LEN(::aIcons) < nOldIcons /*************************************************************************************** RemAllIcons : Alle Icons entfernen */ METHOD TaskBarIcon:RemAllIcons DO WHILE LEN( ::aIcons ) > 0 ::RemIcon( ::aIcons[1] ) EndDO RETURN self /*************************************************************************************** IconCount : Access-Methode fr Anzahl der Icons */ METHOD TaskBarIcon:IconCount RETURN LEN( ::aIcons )