Cambiar el color de fondo de un item de la barra de mensajes

Post Reply
User avatar
Andrés González
Posts: 625
Joined: Thu Jan 19, 2006 10:45 am
Location: Mallorca

Cambiar el color de fondo de un item de la barra de mensajes

Post by Andrés González »

En el menu principal tengo definido una barra de mensajes con dos items, uno para saber si tengo o no puesto un filtro y otro para ver si tengo puesta una selección (mediante scope), como hago para cambiar el color de fondo desde una función, a modo de ejemplo quiero cambiar el color de fondo desde la función filter, pero no encuentro como hacer referencia al oMsgFilter:

Code: Select all

SET MESSAGE OF oWndEdit TO "Mantenimiento de gestión operativa" CENTERED // 2007;
       //KEYBOARD CLOCK DATE

       DEFINE MSGITEM oMsgFilter OF oWndEdit:oMsgBar ;
           PROMPT "Filtro..." SIZE 100 ;       
           TOOLTIP "< ROJO > Filtro establecido";   //Quiero cambiarlo a rojo cuando ejecute la función filtro y a normal cuando la cancele
           ACTION filter()

        DEFINE MSGITEM oMsgOrden OF oWndEdit:oMsgBar ;
           PROMPT "Orden: "+ x_nind[indexord()] SIZE 120 ; 
           TOOLTIP "Orden de Visualización";
           COLOR CLR_WHITE, CLR_BLUE ; 
           ACTION orden()

.....


function filter ()

Local oDlg ,oNom, x_nom := "                                "
Local lOk := .F. //Defino una variable para el paso al proceso siguiente en el dialogo


   //Cuadro de petición de datos.
   DEFINE DIALOG oDlg FROM 12, 12 TO 24, 65 TITLE "Filtrar..."


      @ 2, 2 SAY "Filtro: " OF oDlg
      @ 2, 9 GET oNom VAR x_nom OF oDlg PICTURE "@!" SIZE 100,12

      @ 4, 10  BUTTON "&Ok" OF oDlg SIZE 40, 12  ;
              ACTION  ( lOk := .T. , oDlg:End() )

      @ 4, 18 BUTTON "&Cancelar filtro" OF oDlg SIZE 40, 12 ;
              ACTION  ( lOk := .F. , oDlg:End() )

    ACTIVATE DIALOG oDlg CENTERED



     if lOk = .T.
        oWndEdit:oMsgBar:oMsgFiltrer:SetColor("N", "R" ) //Me da error
    
       x_nom = alltrim(x_nom)

       Set Filter To lEncuentra(x_nom)
   else
      set filter to              //Cancelo el filtro.
     endif

     oBrw:gotop()
     oBrw:refresh()


 return nil
Saludos

Andrés González desde Mallorca
User avatar
Andrés González
Posts: 625
Joined: Thu Jan 19, 2006 10:45 am
Location: Mallorca

Re: Cambiar el color de fondo de un item de la barra de mensajes

Post by Andrés González »

Como hago para que solo me modifique el color de fonto de oMsgFilter:

Code: Select all

            //Esto lo puedo hacer pero me cambia todo el color de la barra en general.
            oWndEdit:oMsgBar:SetColor( CLR_WHITE, CLR_HRED )
        oWndEdit:oMsgBar:Refresh()
Saludos

Andrés González desde Mallorca
User avatar
Andrés González
Posts: 625
Joined: Thu Jan 19, 2006 10:45 am
Location: Mallorca

Re: Cambiar el color de fondo de un item de la barra de mensajes

Post by Andrés González »

He podido hacer algo que funcione pero sin ser lo que toca, aun no se cómo modificar el item. Sabe alguien cómo? He borrado el item y lo vuelvo a crear cada vez, consigo que funcione pero no es lo que toca.

Code: Select all

function filter ()

Local oDlg ,oNom, x_nom := "                                "
Local lOk := .F. //Defino una variable para el paso al proceso siguiente en el dialogo


   //Cuadro de petición de datos.
   DEFINE DIALOG oDlg FROM 12, 12 TO 24, 65 TITLE "Filtrar..."


      @ 2, 2 SAY "Filtro: " OF oDlg
      @ 2, 9 GET oNom VAR x_nom OF oDlg PICTURE "@!" SIZE 100,12

      @ 4, 10  BUTTON "&Ok" OF oDlg SIZE 40, 12  ;
              ACTION  ( lOk := .T. , oDlg:End() )

      @ 4, 18 BUTTON "&Cancelar filtro" OF oDlg SIZE 40, 12 ;
              ACTION  ( lOk := .F. , oDlg:End() )

    ACTIVATE DIALOG oDlg CENTERED



     if lOk = .T.
         oWndEdit:oMsgBar:DelItem( oMsgFilter )

         DEFINE MSGITEM oMsgFilter OF oWndEdit:oMsgBar ;
                      PROMPT "Filtro:" + x_nom ;
                      SIZE 160;
                      TOOLTIP "Filtro activo lento, pulsa en el box para cambiar el filtro";
                      COLOR CLR_BLACK, CLR_HRED ;
                      ACTION filter()

         //oWndEdit:oMsgBar:InsItem( oMsgFilter )
         //oWndEdit:oMsgBar:Refresh()


       x_nom = alltrim(x_nom)

       Set Filter To lEncuentra(x_nom)
   else
    
         oWndEdit:oMsgBar:DelItem( oMsgFilter )
         oWndEdit:oMsgBar:Refresh()
         set filter to
     endif

     oBrw:gotop()
     oBrw:refresh()


 return nil
Saludos

Andrés González desde Mallorca
User avatar
jll-fwh
Posts: 385
Joined: Fri Jan 29, 2010 8:14 pm
Location: Meliana - Valencia
Contact:

Re: Cambiar el color de fondo de un item de la barra de mensajes

Post by jll-fwh »

Hola Andres:

Si tienes declarado una barra así:

Code: Select all

          SET MESSAGE OF oWnd TO cMsg CENTER NOINSET

          DEFINE MSGITEM OF oWnd:oMsgBar SIZE 250;
                 TOOLTIP "Web:";
                 PROMPT "Mi Web";
                 ACTION ( IrWeb( cURL ) )

                 oWnd:oMsgBar:DateOn()
                 oWnd:oMsgBar:ClockOn()
 
Para hacer referencia al color del item donde estaría en mi ejemplo la dirección web sin cambiar el color de los demás:

Prueba así:

Code: Select all

                 oWnd:oMsgBar:aItem[1]:nClrPane := CLR_RED
                oWnd:oMsgBar:aItem[1]:nClrText := CLR_WHITE
 

Un saludo
JLL
Libreria: FWH/FWH1109 + Harbour 3.1.1 + Borland C++ 5.8.2
Editor de Recursos: PellecC
ADA + OURXDBU -
S.O: XP / Win 7
Blog: http://javierlloris.blogspot.com.es/
e-mail: jllorispersonal@gmail.com
User avatar
Andrés González
Posts: 625
Joined: Thu Jan 19, 2006 10:45 am
Location: Mallorca

Re: Cambiar el color de fondo de un item de la barra de mensajes

Post by Andrés González »

Gracias Javier, lo había dejado como lo había puesto, pero claro de la manera que yo lo hacía simpre me lo colocaba al final de la barra y lo que pretendia hacer es cambiar a rojo cuanto esta con un filtro y a verde con un scope, ahora así lo podré hacer en el mismo item, gracias.
Saludos

Andrés González desde Mallorca
Post Reply