Una mas de BTNBMP (SOLUCIONADO)

Una mas de BTNBMP (SOLUCIONADO)

Postby Armando » Fri Dec 17, 2021 8:15 pm

Amigos:

Agradezco toda la ayuda hasta ahora recibida gracias a la cual he avanzado mucho en mi proyecto.

Ahora tengo una pregunta más sobre la clase BTNGET

Code: Select all  Expand view  RUN

      DO WHILE ! oRsHab:EOF()
         nVez++
         REDEFINE BTNBMP oBtn[nVez] PROMPT AllTrim(Str(oRsHab:Fields("HAB_NUM"):Value,03,0)) + CRLF + "$" + AllTrim(Str(oRsHab:Fields("TIP_PRE"):Value,07,2)) ;
                                          ID nVez + 100 CENTER FONT oFont OF oDlg UPDATE

         oBtn[nVez]:cargo     := { "HAB_NUM" => oRsHab:Fields("HAB_NUM"):Value,;
                                   "HAB_STS" => oRsHab:Fields("HAB_STS"):Value,;
                                   "HAB_PRE" => oRsHab:Fields("TIP_PRE"):Value}

         oBtn[nVez]:bAction   := {|oBtn| Eventos(oDlg,oBtn) }

         DO CASE
            CASE oRsHab:Fields("HAB_STS"):Value = 0            // Disponible
               oBtn[nVez]:SetColor( CLR_BLACK, CLR_WHITE)
            CASE oRsHab:Fields("HAB_STS"):Value = 1            // Ocupada
               oBtn[nVez]:SetColor( CLR_WHITE, CLR_RED)
            CASE oRsHab:Fields("HAB_STS"):Value = 2            // En aseo
               oBtn[nVez]:SetColor( CLR_BLACK, CLR_YELLOW)
         ENDCASE

         oRsHab:MoveNext()
      ENDDO
 


Con el código anterior defino los botones y les asigno un color en función al campo HAB_STS,
hast ahi todo excelente pero ahora al ir a una función donde cambia el estatus, ¿como puedo
cambiar el color del boton?, lo he intentado así pero me tira error de que no existe el metodo SETCOLOR

Code: Select all  Expand view  RUN

STATIC FUNCTION UpdEve(oDlg,oBtn,aGets)
   MsgInfo(oBtn:Cargo ["HAB_NUM"])

   cCmdSql  := "UPDATE " +;
                  "Habitaciones " +;
               "SET " +;
                  "HAB_STS = 1 " +;
               "WHERE " +;
                  "HAB_NUM = " + Str(oBtn:cargo ["HAB_NUM"],03,0)
   TRY
      oApp:oCon:Execute(cCmdSql)
   CATCH oError
      FW_ShowAdoError(oApp:oCon)
   END

   oBtn[oBtn:Cargo ["HAB_NUM"]]:SetColor( CLR_WHITE, CLR_RED)

   oDlg:Update()
RETURN(.T.)
 


Saludos y muchas gracias
Last edited by Armando on Sat Dec 18, 2021 3:09 pm, edited 1 time in total.
SOI, s.a. de c.v.
estbucarm@gmail.com
http://www.soisa.mex.tl/
http://sqlcmd.blogspot.com/
Tel. (722) 174 44 45
Carpe diem quam minimum credula postero
User avatar
Armando
 
Posts: 3230
Joined: Fri Oct 07, 2005 8:20 pm
Location: Toluca, México

Re: Una mas de BTNBMP

Postby cmsoft » Fri Dec 17, 2021 9:47 pm

Si tiene el boton oBot pasado de la funcion, simplemente
Code: Select all  Expand view  RUN

oBtn:SetColor( CLR_WHITE, CLR_RED)
 
User avatar
cmsoft
 
Posts: 1292
Joined: Wed Nov 16, 2005 9:14 pm
Location: Mercedes - Bs As. Argentina

Re: Una mas de BTNBMP

Postby Armando » Sat Dec 18, 2021 1:31 am

Estimado César:

Pues no doy pie con bola, te muestro mi código a ver si sirve para brindarme tu apoyo
En el siguiente código estoy creando n número de botones cuyo objeto es oBtn con un
índice [nVez] y les defino la función EVENTOS en la clausula ACTION

Code: Select all  Expand view  RUN

      DO WHILE ! oRsHab:EOF()
         nVez++
         REDEFINE BTNBMP oBtn[nVez] PROMPT AllTrim(Str(oRsHab:Fields("HAB_NUM"):Value,03,0)) + CRLF + "$" + AllTrim(Str(oRsHab:Fields("TIP_PRE"):Value,07,2)) ;
                                          ID nVez + 100 CENTER FONT oFont OF oDlg UPDATE

         oBtn[nVez]:cargo     := { "HAB_NUM" => oRsHab:Fields("HAB_NUM"):Value,;
                                   "HAB_STS" => oRsHab:Fields("HAB_STS"):Value,;
                                   "HAB_PRE" => oRsHab:Fields("TIP_PRE"):Value}

         oBtn[nVez]:bAction   := {|oBtn| Eventos(oDlg,oBtn) }

         DO CASE
            CASE oRsHab:Fields("HAB_STS"):Value = 0            // Disponible
               oBtn[nVez]:SetColor( CLR_BLACK, CLR_WHITE)
            CASE oRsHab:Fields("HAB_STS"):Value = 1            // Ocupada
               oBtn[nVez]:SetColor( CLR_WHITE, CLR_RED)
            CASE oRsHab:Fields("HAB_STS"):Value = 2            // En aseo
               oBtn[nVez]:SetColor( CLR_BLACK, CLR_YELLOW)
         ENDCASE

         oRsHab:MoveNext()
      ENDDO
 


Este es el código de la función EVENTOS en la que recibe dos parametros oDlg y el objeto array oBtn
que como puedes ver en esta función hay un dialogo con tres btnbmp y sus
respectivas clausulas ACTION
Code: Select all  Expand view  RUN

STATIC FUNCTION Eventos(oDlg,oBtn)
    LOCAL oDlgEve,oIcono,oFont
   LOCAL oBtns := Array(04)
   LOCAL oEntrada,oConsumo
   LOCAL oAseo,oSalida

   IF oBtn:Cargo ["HAB_STS"] == 0
      Entrada(oDlg,oBtn)
   ELSE
      DEFINE FONT oFont NAME "MS Sans Serif" SIZE 0,-14 BOLD
      DEFINE ICON oIcono RESOURCE "AppLogo"
      DEFINE DIALOG oDlgEve RESOURCE "UpdEve" OF oWnd ICON oIcono FONT oFont COLOR CLR_BLACK,CLR_BLUE

         REDEFINE BUTTON oConsumo ID 901 OF oDlgEve UPDATE;
            WHEN oBtn:Cargo ["HAB_STS"] == 1;
            ACTION Consumo(oBtn);
            MESSAGE "Registar consumos adicionales"

         REDEFINE BUTTON oAseo ID 902 OF oDlgEve UPDATE;
            WHEN oBtn:Cargo ["HAB_STS"] == 2;
            ACTION IIF(Aseo(oBtn),oDlgEve:END(),);
            MESSAGE "Registar el aseo de la habitación"

         REDEFINE BUTTON oSalida ID 903 OF oDlgEve UPDATE;
            WHEN oBtn:Cargo ["HAB_STS"] == 1;
            ACTION IIF(Salida(oBtn,oBtn:Cargo["HAB_NUM"]),oDlgEve:END(),);
            MESSAGE "Registar la salida"

      ACTIVATE DIALOG oDlgEve CENTERED
      oFont:End()
      oIcono:End()
   ENDIF
RETURN(.T.)
 


Tomemos como ejemplo la función SALIDA a la que le estoy pasando dos parametros
el objeto oBtn y el cargo HAB_NUM (Número de habitación)
Code: Select all  Expand view  RUN

STATIC FUNCTION Salida(oBtn,oBoton)
   cCmdSql  := "UPDATE " +;
                  "Habitaciones " +;
               "SET " +;
                  "HAB_STS = 2 " +;
               "WHERE " +;
                  "HAB_NUM = " + Str(oBtn:cargo ["HAB_NUM"],03,0)
   TRY
      oApp:oCon:Execute(cCmdSql)
   CATCH oError
      FW_ShowAdoError(oApp:oCon)
   END

   oBoton:SetColor( CLR_WHITE, CLR_BLUE)
RETURN(.T.)
 


Aquí es donde me tira error al asignar color oBoton:SetColor( CLR_WHITE, CLR_BLUE)

Gracias por tu apoyo
SOI, s.a. de c.v.
estbucarm@gmail.com
http://www.soisa.mex.tl/
http://sqlcmd.blogspot.com/
Tel. (722) 174 44 45
Carpe diem quam minimum credula postero
User avatar
Armando
 
Posts: 3230
Joined: Fri Oct 07, 2005 8:20 pm
Location: Toluca, México

Re: Una mas de BTNBMP

Postby Antonio Linares » Sat Dec 18, 2021 8:30 am

Qué error te da ?
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 42122
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Re: Una mas de BTNBMP

Postby cmsoft » Sat Dec 18, 2021 10:49 am

Prueba Asi:
Code: Select all  Expand view  RUN

STATIC FUNCTION Salida(oBtn,oBoton)
   cCmdSql  := "UPDATE " +;
                  "Habitaciones " +;
               "SET " +;
                  "HAB_STS = 2 " +;
               "WHERE " +;
                  "HAB_NUM = " + Str(oBtn:cargo ["HAB_NUM"],03,0)
   TRY
      oApp:oCon:Execute(cCmdSql)
   CATCH oError
      FW_ShowAdoError(oApp:oCon)
   END

   oBtn:SetColor( CLR_WHITE, CLR_BLUE) // Cambia aca oBoton por oBtn
RETURN(.T.)
User avatar
cmsoft
 
Posts: 1292
Joined: Wed Nov 16, 2005 9:14 pm
Location: Mercedes - Bs As. Argentina

Re: Una mas de BTNBMP

Postby Armando » Sat Dec 18, 2021 3:08 pm

Antonio y César, César y Antonio:

Prueba superada, mi error, estaba pasando mal los parámetros.

Muchas gracias por su apoyo.

Saludos
SOI, s.a. de c.v.
estbucarm@gmail.com
http://www.soisa.mex.tl/
http://sqlcmd.blogspot.com/
Tel. (722) 174 44 45
Carpe diem quam minimum credula postero
User avatar
Armando
 
Posts: 3230
Joined: Fri Oct 07, 2005 8:20 pm
Location: Toluca, México


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: Google [Bot] and 47 guests