FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour Utilidades para la Barra de Tareas de Window
Posts: 2365
Joined: Wed Nov 02, 2005 11:46 PM
Utilidades para la Barra de Tareas de Window
Posted: Wed Nov 26, 2008 07:51 AM
Espero sea de utilidad para alguien...

#include "fivewin.ch"

function MainTest()

   local oWnd, oBar
   local oTB := TaskBar()
   local n := 0

   DEFINE WINDOW oWnd TITLE "Test Task Bar"

   DEFINE BUTTONBAR oBar _3D OF oWnd

   DEFINE BUTTON OF oBar  ;
      ACTION  oTB:HideShowTaskBar() ;
      MESSAGE "Muestra/Oculta TaskBar"

   DEFINE BUTTON OF oBar ;
      ACTION oTB:HideShowClock();
      MESSAGE "Muestra/Oculta Reloj"

	 DEFINE BUTTON OF oBar ;
      ACTION oTB:HideShowStartButton();
      MESSAGE "Muestra Oculta StartButton"


 	 DEFINE BUTTON OF oBar ;
      ACTION ( oTB:EnaDisTaskBar( ) ) ;
      MESSAGE "Enable/ Disable TaskBar"

 	 DEFINE BUTTON OF oBar ;
      ACTION ( oTB:EnaDisStartButton( ) ) ;
      MESSAGE "Enable/ Disable StartButton"

 	 DEFINE BUTTON OF oBar ;
      ACTION ( oTB:HideShowSysTray() ) ;
      MESSAGE "Enable/ Disable StartButton"

 	 DEFINE BUTTON OF oBar ;
      ACTION ( oTB:HideShowIcons() ) ;
      MESSAGE "Enable/ Disable Icons"

 	 DEFINE BUTTON OF oBar ;
      ACTION ( oTB:HideShowQuickStar() ) ;
      MESSAGE "Enable/ Disable QuickStar"

 	 DEFINE BUTTON OF oBar ;
      ACTION ( oTB:HideShowTask() ) ;
      MESSAGE "Enable/ Disable Task"
      
   DEFINE BUTTON OF oBar ;
      ACTION ( oTB:TransTaskBar( n+=10 ) ) ;
      MESSAGE "Enable/ Disable Task"

   DEFINE BUTTON OF oBar ;
      ACTION ( oTB:Default() ) ;
      MESSAGE "Enable/ Disable Task"


  
   SET MESSAGE OF oWnd TO "Class TaskBar" CENTERED

   ACTIVATE WINDOW oWnd


//////////////////////////////////////////////////////////////////////////////
// CLASS TaskBar
// Clase que permite ocultar y desaparecer elementos de la barra de tareas de windows
// la variable lForce se usa para obligar la accion en cada metodo
// si se desea mostrar/ocultar forzosamente un elemnto usar lForce := .t. / .f.
// segun la nesecidad, pero cada metodo lo hace automaticamente dependiendo del estado
// nLevel en el methodo TransTaskBar indica el nivel porcentual de transparencia
// methodo default, restaura los valores forzando todos los elementos a .t. y 0 % transparecia
///////////////////////////////////////////////////////////////////////////////

#define SW_HIDE                      0  
#define SW_NORMAL                 1  
#define GW_HWNDNEXT            2
#define GW_CHILD                   5
#define GWL_EXSTYLE              -20
#define N_STATUS_ED              1
#define N_STATUS_VI               2
#define WS_EX_LAYERED          524288
#define LWA_ALPHA                  2



class TaskBar


method HideShowTaskBar( lForce ) 			
method HideShowStartButton( lForce ) 
method HideShowClock( lForce )
method EnaDisTaskBar( lForce )
method EnaDisStartButton( lForce )
method HideShowSysTray( lForce )
method HideShowIcons( lForce )
method HideShowQuickStar( lForce )
method HideShowTask( lForce )
method TransTaskBar( nLevel )
method Default()

endclass



method Default()	class TaskBar
	::HideShowTaskBar( .t. )
	::HideShowStartButton( .t. )
	::HideShowClock( .t. )
	::EnaDisTaskBar( .t. )
	::EnaDisStartButton( .t. )
	::HideShowSysTray( .t. )
	::HideShowIcons( .t. )
	::HideShowQuickStar( .t. )
	::HideShowTask( .t. )
	::TransTaskBar( 0 )
return


Method HideShowStartButton( lForce ) class TaskBar
Local hChild

default lForce := NIL
 
    If ( hChild:=fhStartButton() ) != 0
    	ShowHide( hChild, lForce )
    endif
hChild := NIL
return nil


Method HideShowClock( lForce ) class TaskBar
local hChild

default lForce := NIL

    If ( hChild := fhClock() ) != 0
    	ShowHide( hChild, lForce )
    endif
    
hChild = NIL
return NIL

Method HideShowTaskBar( lForce ) class TaskBar
local hTrayWnd

default lForce := NIL

    If ( hTrayWnd := fhTaskBar() )  != 0
    	ShowHide( hTrayWnd, lForce )
    endif
hTrayWnd = NIL

return NIL

Method HideShowSystray( lForce ) class TaskBar
Local hNotifyWnd

default lForce := NIL

    If ( hNotifyWnd := fhTrayNotify() ) != 0
      ShowHide( hNotifyWnd, lForce )
    Endif
    
hTrayNotifyWnd = NIL    
return


method HideShowIcons( lForce ) class TaskBar
local hSysPager
default lForce := NIL

    If ( hSysPager := fhSysPager() ) != 0
      ShowHide( hSysPager, lForce )
    Endif
    
hSysPager = NIL    

return			

method HideShowQuickStar( lForce ) class TaskBar
local hQuickStar
default lForce := NIL

    If ( hQuickStar := fhQuickStar() ) != 0
    	ShowHide( hQuickStar, lForce )  
    Endif
    
hQuickStar = NIL    

return			


method HideShowTask( lForce ) class TaskBar
local hTask
default lForce := NIL

    If ( hTask := fhTask() ) != 0
    	ShowHide( hTask, lForce )  
    Endif
    
hTask = NIL    

return			


method  EnaDisTaskBar( lForce ) class TaskBar
Local hTrayWnd
default lForce := NIL
    hTrayWnd = fhTaskBar()
    If hTrayWnd != 0
    	if lForce == NIL
      	EnableWindow(hTrayWnd, if ( IsWindowEnabled( hTrayWnd ),.f.,.t.) )
      else
      	if lForce
      		EnableWindow(hTrayWnd, .t.) 
      	else
      		EnableWindow(hTrayWnd, .f.) 
      	Endif
      endif
    Endif
hTrayWnd = NIL    
return

method  EnaDisStartButton( lForce ) class TaskBar
Local hStartB
default lForce := NIL

    If ( hStartB := fhStartButton()) != 0
    	if lForce == NIL
      	EnableWindow(hStartB, if ( IsWindowEnabled( hStartB ),.f.,.t.) )
      else
      	if lForce
      		EnableWindow(hStartB, .t. )
      	else
      		EnableWindow(hStartB, .f. )
      	Endif
      endif
    Endif
hStartB = NIL
return


method TransTaskBar( nLevel ) class TaskBar
Local nTrans, nOldStyle, hTrayWnd

    nTrans = 255 - Max(0, Min( Int( nLevel*255/100),255 ) )
    
    If ( hTrayWnd := fhTaskBar() ) != 0
      nOldStyle = GetWindowLong(hTrayWnd, GWL_EXSTYLE)
      SetWindowLong(hTrayWnd, GWL_EXSTYLE, nOr(nOldStyle, WS_EX_LAYERED))
      SetLayeredWindowAttributes(hTrayWnd, 0, nTrans, LWA_ALPHA)
    Endif

return


static function fhClock
Local hChild

 		hChild 		:= GetWindow( fhTrayNotify(), GW_CHILD )
    do while upper( GetClassName ( hChild ) ) != "TRAYCLOCKWCLASS"
    	hChild := GetWindow (hChild, GW_HWNDNEXT)
    enddo

return hChild


static function fhStartButton
local hTrayWnd, hChild

    hTrayWnd 	:= fhTaskBar()
    hChild 		:= GetWindow ( hTrayWnd, GW_CHILD )
    do while upper( GetClassName ( hChild ) ) != "BUTTON"
    	hChild := GetWindow(hChild, GW_HWNDNEXT)
    enddo

return hChild

static Function fhTrayNotify()
local hChild

    hChild 		:= GetWindow ( fhTaskBar(), GW_CHILD )
    do while upper( GetClassName ( hChild ) ) != "TRAYNOTIFYWND"
    	hChild := GetWindow(hChild, GW_HWNDNEXT)
    enddo

return hChild

static Function fhSysPager()

 		hChild 		:= GetWindow( fhTrayNotify(), GW_CHILD )
    do while upper( GetClassName ( hChild ) ) != "SYSPAGER"
    	hChild := GetWindow (hChild, GW_HWNDNEXT)
    enddo
    
return hChild

static Function fhQuickStar()
local hChild 

    hChild 		:= GetWindow ( fhTaskBar(), GW_CHILD )
    do while upper( GetClassName ( hChild ) ) != "REBARWINDOW32"
    	hChild := GetWindow(hChild, GW_HWNDNEXT)
    enddo
    hChild 		:= GetWindow ( hChild, GW_CHILD )
    do while upper( GetClassName ( hChild ) ) != "TOOLBARWINDOW32"
    	hChild := GetWindow(hChild, GW_HWNDNEXT)
    enddo
		
    
return hChild

static Function fhTask()
local hChild 

    hChild 		:= GetWindow ( fhTaskBar(), GW_CHILD )
    do while upper( GetClassName ( hChild ) ) != "REBARWINDOW32"
    	hChild := GetWindow(hChild, GW_HWNDNEXT)
    enddo
    hChild 		:= GetWindow ( hChild, GW_CHILD )
    do while upper( GetClassName ( hChild ) ) != "MSTASKSWWCLASS"
    	hChild := GetWindow(hChild, GW_HWNDNEXT)
    enddo
		
    
return hChild


static function fhTaskBar
return FindWindow("Shell_TrayWnd", 0)

static procedure ShowHide( hWnd, lForce )

   	if lForce == NIL
     	ShowWindow(hWnd, if( IsWindowVisible( hWnd ), SW_HIDE, SW_NORMAL ) )
    else
     	if lForce
     		ShowWindow(hWnd, SW_NORMAL )
     	else
     		ShowWindow(hWnd, SW_HIDE  )
     	endif
    endif
    
return
Posts: 1286
Joined: Mon Feb 25, 2008 02:54 PM
Utilidades para la Barra de Tareas de Window
Posted: Wed Nov 26, 2008 10:12 AM

Parabéns!!!

:)

ubiratanmga@gmail.com

FWH24.04
BCC7.3
HARBOUR3.2
xMate
Pelles´C
TDolphin
Posts: 44158
Joined: Thu Oct 06, 2005 05:47 PM
Utilidades para la Barra de Tareas de Window
Posted: Wed Nov 26, 2008 10:13 AM

Daniel,

Gracias! :-)

regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 682
Joined: Tue Feb 14, 2006 09:48 AM
Utilidades para la Barra de Tareas de Window
Posted: Wed Nov 26, 2008 11:50 AM

Gracias Daniel, esta muy chulo.

Saludos desde Mallorca
Biel Maimó
http://bielsys.blogspot.com/
Posts: 711
Joined: Thu Oct 06, 2005 09:57 PM
Utilidades para la Barra de Tareas de Window
Posted: Wed Nov 26, 2008 01:14 PM

¡¡¡ IMPRESIONANTE ¡¡¡

Quizás sería conveniente que lo publicitaras en la página en inglés, porque seguro hay muchos FWneros interesados.

Muchas gracias por tu aportación.

Un saludo



Manuel

Continue the discussion