AYUDA URGENTE CON COMBOBOX

Re: AYUDA URGENTE CON COMBOBOX

Postby karinha » Fri Nov 16, 2018 7:38 pm

Compila bién e el botón de salir funciona sin problemas, solo no puedo muestrar los bitmaps, pués no pasa en la compilación.

Mira donde hice comentários con /* */ creo el erro esté en uno de elos.

Image

Saludos.
João Santos - São Paulo - Brasil - Phone: +55(11)95150-7341
User avatar
karinha
 
Posts: 7214
Joined: Tue Dec 20, 2005 7:36 pm
Location: São Paulo - Brasil

Re: AYUDA URGENTE CON COMBOBOX

Postby karinha » Fri Nov 16, 2018 7:38 pm

Code: Select all  Expand view

#include "FiveWin.ch"
#include "xbrowse.ch"

STATIC oWnd

FUNCTION Consu_paci()

   LOCAL oFont1, oFont, oSay1, oFont2, oSay
   LOCAL oDlg1, oSay2
   PUBLIC Fecha_hoy, total_pac := 0
   PRIVATE oCod_pro1, cCod_pro1 := "", nCod_pro1
   PUBLIC aProfe := {}, aPacientes := {}, oPaci

   /*
   SELE 1
   USE Profesio Shared
   Dbgotop()
   IF Eof()
      MsgStop( " NO Existen Profesionales Medicos " )
      dbclosearea()
      RETURN
   ENDIF
   AADD( aProfe, { "", "" } )
   DO WHILE !Eof()
      IF Est_pro = "S" .AND. Tip_esp = "MEDI"
         AADD( aProfe, { a->Cod_pro, a->Nom_pro } )
      ENDIF
      a->( DbSkip() )
   ENDDO
   DbClosearea()
   ASORT( aProfe, , , { |x, y| x[2] < y[2] } )
   */


   Fecha_hoy := date()
   nCod_pro1 = 0

   Define Font oFont1 Name "Curier New" Size 0, 16  BOLD
   Define Font oFont  Name "Courier new" Size 0, 22   BOLD
   Define Font oFont2  Name "Courier new" Size 0, 20  BOLD


   DEFINE DIALOG oDlg1 RESOURCE "#1004"
   REDEFINE SAY oSay  ID 100 PROMPT "PACIENTES EN ATENCION DIA " + dtoc( Date() ) OF oDlg1 FONT oFont  COLORS RGB( 12, 135, 27 )

   REDEFINE SAY oSay1 ID 101 PROMPT "DOCTOR" OF oDlg1 FONT oFont  COLOR RGB( 38, 74, 119 )
   REDEFINE SAY oSay2 ID 120 PROMPT "TOTAL PACIENTES: " + str( total_pac, 3 ) OF oDlg1 FONT oFont2  COLOR rgb( 39, 0, 64 )

   /*
   REDEFINE COMBOBOX oCod_pro1 VAR nCod_pro1 ITEMS ArrTranspose( aProfe )[ 2 ] ID 102 OF oDlg1 COLORS nRGB( 9, 11, 10 ), nRGB( 73, 250, 202 );
      ON CHANGE ( cCod_pro1 := ArrTranspose( aProfe )[ 1 ][oCod_pro1:nAt], Carga_paci( cCod_pro1 ), oPaci:Refresh(), oSay2:Refresh() )
   */


   /*
   REDEFINE XBROWSE oPaci ID 104 OF oDlg1 ;
      COLUMNS 1, 2, 3, 4, 5, 6, 7;
      HEADERS "Nro. ", "Nombre del Paciente" , "Folio Caja", "T. Pago", "Valor ", "Digita", "Hr. Digi";
      COLSIZES 40, 350, 80, 80, 70, 80, 80 ;
      FONT oFont1;
      ARRAY aPacientes ;
      FOOTERS LINES CELL

   oPaci:bClrStd             := {|| { nRGB(  0,  0,  0 ), nRGB( 255,248,220 ) } }
   oPaci:bClrSelFocus        := {|| { nRGB(  0,  0,  0 ), nRGB( 137, 247, 33 ) } }
   oPaci:bClrHeader       := {|| { CLR_BLUE, nRGB( 245, 245, 245 ) } }
   oPaci:bClrSel := {|| { nRGB( 000,000,000 ), nRGB( 128,255,128 ) } }
   oPaci:bClrSelFocus := {|| { nRGB( 0, 0, 0 ), nRGB( 128,255,128 ) } }
   oPaci:bClrStd := {|| { nRGB( 000,000,000 ), nRGB( 255,255,200 ) } }
   oPaci:nStretchCol := STRETCHCOL_WIDEST

   oCol := oPaci:AddCol()
   oCol:AddResource( "#8006" )
   oCol:AddResource( "#8007" )
   oCol:cHeader = "Estado"
   oCol:bBmpData   :=  { || if( aPacientes[oPaci:nArrayAt,8] == "S", 1, 2 ) }
   */



   REDEFINE BTNBMP ID 103 Resource "#8005" OF oDlg1 ;  //         <--------- Boton Para actualiza Array desde la Dbf Actualizada
   ACTION ( Carga_paci( cCod_pro1 ) )


   REDEFINE BTNBMP ID 105 Resource "#8004" OF oDlg1 ;  //        <--------- Boton salir del programa y volver al menu
   ACTION ( Cierra(), oDlg1:END() )

   ACTIVATE DIALOG oDlg1 CENTERED

   RETURN  Nil

STATIC FUNCTION  Carga_paci( cCod_pro1 )

   asize( aPacientes, 0 )

   IF Len( cCod_pro1 ) = 0
      MsgStop( "No ha Seleccionado Profesional Medico" )
      RETURN .F.
   ENDIF

   carchi := 'PACI' + trim( cCod_pro1 )
   IF !file( '&carchi..dbf' )
      MsgStop( "MEDICO SELECCIONADO NO TIENE INGRESOS DE PACIENTES" )
      RETURN .F.
   ENDIF
   SELE 2
   Use &carchi Shared
   IF !file( '&carchi..ntx' )
      INDE ON Cod_pro + dtos( ctod( fec_ate ) ) + Str( Cor_pac, 4 ) to &carchi
   ENDIF
   SET INDE to &carchi
//seek cCod_pro1+dtos(date())
   DbGotop()
   IF eof()
      MsgStop( "MEDICO SELECCIONADO NO TIENE PACIENTES EN ESPERA" )
      DbClosearea()
      RETURN .F.
   ENDIF


   STOR 0 TO total_pac
   DO WHILE !Eof()
      // If (ctod(fec_ate)=Fecha_hoy)
      AADD( aPacientes, { b->Cor_pac, b->Nom_pac, b->Fol_caj, b->Tip_pag, b->Val_bon, b->Cod_dig, b->Hor_dig, b->Con_pac } )
      total_pac = total_pac + 1
      // Endif
      DbSkip()
   ENDDO
   DbClosearea()
   oPaci:SetArray( aPacientes )
   oPaci:GoTop()
   oPaci:Refresh()

   RETURN  oPaci

STATIC FUNCTION Cierra()

   SET RELATION TO
   CLOS DATA

   sysrefresh()

   RETURN nil
 
João Santos - São Paulo - Brasil - Phone: +55(11)95150-7341
User avatar
karinha
 
Posts: 7214
Joined: Tue Dec 20, 2005 7:36 pm
Location: São Paulo - Brasil

Re: AYUDA URGENTE CON COMBOBOX

Postby Carlos Mora » Fri Nov 16, 2018 7:42 pm

Antonio,
te importaria indicar que dice la linea 1667 de la clese tget en el codigo fuente de tu copia de fivewin? \fivewin\source\classes\tget.prg Linea 1667. Si puedes copia el metodo lostfocus completo y marca cual es la linea 1667
Alogo esta fallando al cerrar la ventana, el control que tiene el foco debe tener algun problema cuando lo pierde. Puede que sea un valid o algo, ver esa linea del TGet nos puede dar una pista
Saludos
Carlos Mora
http://harbouradvisor.blogspot.com/
StackOverflow http://stackoverflow.com/users/549761/carlos-mora
“If you think education is expensive, try ignorance"
Carlos Mora
 
Posts: 988
Joined: Thu Nov 24, 2005 3:01 pm
Location: Madrid, España

Re: AYUDA URGENTE CON COMBOBOX

Postby remtec » Fri Nov 16, 2018 7:54 pm

Hola Carlos Mora.

Este el metodo que me pides.

Saludos
Code: Select all  Expand view

//---------------------------------------------------------------------------//
METHOD LostFocus( hCtlFocus ) CLASS TGet

   ::Super:LostFocus( hCtlFocus )

#ifdef UTFREVN
   if ::lWideChar
      ::Assign()
   else
      if ! ::lPassword
         if ::oGet:buffer != GetWindowText( ::hWnd )  // right click popup action       LINEA 1667
            ::oGet:buffer  = GetWindowText( ::hWnd )
            ::oGet:Assign()
         endif
      endif
   endif
#else
   if ! ::lPassword
      if ::oGet:buffer != GetWindowText( ::hWnd )  // right click popup action
         ::oGet:buffer  = GetWindowText( ::hWnd )
         ::oGet:Assign()
      endif
   endif
#endif

   if ! Empty( ::cPicture ) .and. ::oGet:Type == "N"
      ::oGet:Assign()
      ::oGet:Picture := ::cPicture
      ::oGet:UpdateBuffer()
      ::oGet:KillFocus()
   endif

   ::oGet:SetFocus()   // to avoid oGet:buffer be nil

   if ! ::oGet:BadDate .and. ! ::lReadOnly .and. ;
      ( ::oGet:changed .or. ::oGet:unTransform() <> ::oGet:original )
      ::oGet:Assign()     // for adjust numbers
      // ::oGet:UpdateBuffer()
   endif

   if ::bColor == nil
      if ::lClrFocus
         if ::nOldClrPane != nil
            ::SetColor( ::nClrText, ::nOldClrPane )
         endif
      endif
   else
      tmp      := Eval( ::bColor, Self )
      ::SetColor( tmp[ 1 ], tmp[ 2 ] )
   endif

   if ::oGet:Type == "D"
      ::oGet:KillFocus()
      ::oGet:SetFocus()
   endif
   ::DispText()

   if ! ::oGet:BadDate
      ::oGet:KillFocus()
   else
      ::oGet:Pos = 1
      ::nPos = 1
   endif

   if ! Empty( ::oBtn )
      ::oBtn:lCancel := .F.
   endif

return nil



 
FWH 22.10 - HARBOUR - PELLES C
remtec
 
Posts: 717
Joined: Fri May 12, 2017 2:50 pm

Re: AYUDA URGENTE CON COMBOBOX

Postby remtec » Fri Nov 16, 2018 8:03 pm

Hola Karinha

Mira te dejo este codigo para llenar el array del COMBOBOX, al seleccionar un profesional ira a Carga_paci(cCod_pro1), donde no existira el archivo del profesional y volvera al Combobox, despues das el boton Salir.

En mi caso, anule los botones con recursos y lo hice con boton normal y arroja el mismo error al no encontrar datos o la dbf para el profesional seleccionado.


Codigo:
Code: Select all  Expand view

     AADD( aProfe,{ "",""})
 */
  //   Do While !Eof()
   //         If Est_pro="S".and.Tip_esp="MEDI"
   //          AADD( aProfe,{ a->Cod_pro,a->Nom_pro})
   //         Endif
   //     a->(DbSkip())
   //  Enddo
  //   DbClosearea()
*/

        aProfe:= {{"BUST","ARTURO BUSTIOS"},{"AREL","ARNALDO ARELLANO"},{"OLMO","JORGE OLMO"}}

     // Ordenar Arreglo por Nombre
     ASORT( aProfe,,, { |x,y| x[2] < y[2] } )


 
]
FWH 22.10 - HARBOUR - PELLES C
remtec
 
Posts: 717
Joined: Fri May 12, 2017 2:50 pm

Re: AYUDA URGENTE CON COMBOBOX

Postby remtec » Sat Nov 17, 2018 11:33 pm

Amigos

La tengo dificil, le he dado muchas vueltas y no logro solucionar el problema.

En la Function Carga_paci(cCod_pro1), tengo varias validaciones al no cumplirlas, emito un mensaje de aviso como el siguiente:

Code: Select all  Expand view

             If eof()
                MsgStop("MEDICO SELECCIONADO NO TIENE PACIENTES EN ESPERA")
                   
                Return .f.
             Endif
 


En cada caso, se produce el error al dar boton Salir.

Pero si no emito el mensaje de aviso, no se produce el Error, por lo que solo se produce al usar cualquier forma de aviso.

Saludos
Antonio
FWH 22.10 - HARBOUR - PELLES C
remtec
 
Posts: 717
Joined: Fri May 12, 2017 2:50 pm

Re: AYUDA URGENTE CON COMBOBOX

Postby remtec » Mon Nov 19, 2018 3:55 pm

Amigos.

Estoy complicado, algun Amigo que se le ocurra alguna idea por donde corregir el error.

Saludos.
Antonio
FWH 22.10 - HARBOUR - PELLES C
remtec
 
Posts: 717
Joined: Fri May 12, 2017 2:50 pm

Re: AYUDA URGENTE CON COMBOBOX

Postby cmsoft » Wed Nov 21, 2018 11:19 am

Code: Select all  Expand view

#include "FiveWin.ch"
#include "xbrowse.ch"

static oWnd

Function Consu_paci()
     Local oFont1,oFont,oSay1,oFont2,oSay
     Local oDlg1,oSay2
     Public Fecha_hoy,total_pac:=0
     Private oCod_pro1,cCod_pro1:="",nCod_pro1
     Public aProfe:= {},aPacientes:={},oPaci
     Sele 1
     Use Profesio Shared
     Dbgotop()
     If Eof()
          MsgStop(" NO Existen Profesionales Medicos ")
            dbclosearea()
            Return
     Endif
     AADD( aProfe,{ "",""})
     Do While !Eof()
            If Est_pro="S".and.Tip_esp="MEDI"
             AADD( aProfe,{ a->Cod_pro,a->Nom_pro})
            Endif
        a->(DbSkip())
     Enddo
     DbClosearea()
     ASORT( aProfe,,, { |x,y| x[2] < y[2] } )

     Fecha_hoy:=date()
     nCod_pro1=0

     Define Font oFont1 Name "Curier New" Size 0,16  BOLD
     Define Font oFont  Name "Courier new" Size 0,22   BOLD
     Define Font oFont2  Name "Courier new" Size 0,20  BOLD


   DEFINE DIALOG oDlg1 RESOURCE "#1004"
     REDEFINE SAY oSay  ID 100 PROMPT "PACIENTES EN ATENCION DIA "+dtoc(Date()) OF oDlg1 FONT oFont  COLORS RGB(12, 135, 27)

     REDEFINE SAY oSay1 ID 101 PROMPT "DOCTOR" OF oDlg1 FONT oFont  COLOR RGB(38, 74, 119)
     REDEFINE SAY oSay2 ID 120 PROMPT "TOTAL PACIENTES: "+str(total_pac,3) OF oDlg1 FONT oFont2  COLOR rgb(39, 0, 64)

     REDEFINE COMBOBOX oCod_pro1 VAR nCod_pro1 ITEMS ArrTranspose( aProfe )[ 2 ] ID 102 OF oDlg1 COLORS nRGB(9, 11, 10), nRGB(73, 250, 202);
                    ON CHANGE (Carga_paci(oCod_pro1,aProfe),oPaci:Refresh(),oSay2:Refresh())   //<--- Cambiar aca

     REDEFINE XBROWSE oPaci ID 104 OF oDlg1 ;
          COLUMNS 1,2,3,4,5,6,7;
            HEADERS "Nro. ","Nombre del Paciente" ,"Folio Caja","T. Pago","Valor ","Digita","Hr. Digi";
            COLSIZES 40, 350, 80, 80,70,80,80 ;
                FONT oFont1;
                ARRAY aPacientes ;
                FOOTERS LINES CELL

                oPaci:bClrStd             := {|| { nRGB(  0,  0,  0), nRGB(255,248,220) } }
                oPaci:bClrSelFocus        := {|| { nRGB(  0,  0,  0), nRGB(137, 247, 33) } }
                oPaci:bClrHeader       := {|| { CLR_BLUE, nRGB( 245, 245, 245 ) } }
                oPaci:bClrSel := {|| { nRGB(000,000,000), nRGB(128,255,128) } }
                oPaci:bClrSelFocus := {|| { nRGB( 0, 0, 0), nRGB(128,255,128) } }
                oPaci:bClrStd := {|| { nRGB(000,000,000), nRGB(255,255,200) } }
                oPaci:nStretchCol := STRETCHCOL_WIDEST

            oCol := oPaci:AddCol()
            oCol:AddResource("#8006")
            oCol:AddResource("#8007")
                oCol:cHeader = "Estado"
                oCol:bBmpData   :=  { || if(aPacientes[oPaci:nArrayAt,8]=="S",1,2)}




     REDEFINE BTNBMP ID 103 Resource "#8005" OF oDlg1 ;             <--------- Boton Para actualiza Array desde la Dbf Actualizada
            ACTION (Carga_paci(cCod_pro1))


     REDEFINE BTNBMP ID 105 Resource "#8004" OF oDlg1 ;            <--------- Boton salir del programa y volver al menu
            ACTION (Cierra(),oDlg1:END())

   ACTIVATE DIALOG oDlg1 CENTERED

Return  Nil


Static Function  Carga_paci(oCod_pro1,aProfe)  // <--- Cambiar aca
LOCAL cCod_Pro1 := aProfe [1,oCod_pro1:nAt]  // <--- Cambiar aca
             asize( aPacientes, 0 )

             If Len(cCod_pro1)=0
                MsgStop("No ha Seleccionado Profesional Medico")
                    Return .f.
             Endif

             carchi:='PACI'+trim(cCod_pro1)
             If !file('&carchi..dbf')
                MsgStop("MEDICO SELECCIONADO NO TIENE INGRESOS DE PACIENTES")
                    Return .f.
             Endif
             Sele 2
             Use &carchi Shared
             If !file('&carchi..ntx')
                    Inde on Cod_pro+dtos(ctod(fec_ate))+Str(Cor_pac,4) to &carchi
             Endif
             Set Inde to &carchi
             //seek cCod_pro1+dtos(date())
             DbGotop()
             If eof()
                MsgStop("MEDICO SELECCIONADO NO TIENE PACIENTES EN ESPERA")
                    DbClosearea()
                Return .f.
             Endif


             Stor 0 to total_pac
             Do While !Eof()
                 // If (ctod(fec_ate)=Fecha_hoy)
                         AADD( aPacientes,{ b->Cor_pac,b->Nom_pac,b->Fol_caj,b->Tip_pag,b->Val_bon,b->Cod_dig,b->Hor_dig,b->Con_pac})
                         total_pac=total_pac+1
                 // Endif
                    DbSkip()
             Enddo
             DbClosearea()
             oPaci:SetArray( aPacientes )
         oPaci:GoTop()
         oPaci:Refresh()
             Return  oPaci

Static FUNCTION Cierra()
    Set relation to
    Clos data
  sysrefresh()
return nil

 

Fijate si persiste el error
User avatar
cmsoft
 
Posts: 1189
Joined: Wed Nov 16, 2005 9:14 pm
Location: Mercedes - Bs As. Argentina

Re: AYUDA URGENTE CON COMBOBOX

Postby remtec » Wed Nov 21, 2018 2:58 pm

Hola Cesar.

Hice la prueba, pero tengo el problema que los datos no llegan a la Function "CARGA_PACI():

REDEFINE COMBOBOX oCod_pro1 VAR nCod_pro1 ITEMS ArrTranspose( aProfe )[ 2 ] ID 102 OF oDlg COLORS nRGB(9, 11, 10), nRGB(73, 250, 202);
ON CHANGE (Carga_paci(oCod_pro1,aProfe),oPaci:Refresh(),oSay2:Refresh()) //<--- Cambiar aca



Static Function Carga_paci(oCod_pro1,aProfe) // <--- Cambiar aca
LOCAL cCod_Pro1 := aProfe [1,oCod_pro1:nAt] // <--- Cambiar aca <------ Linea 89

?cCod_pro1 <------- cCod_pro1 no tiene dato.

Saludos.

Antonio

Detallle de Error:
Code: Select all  Expand view

  Time from start: 0 hours 0 mins 8 secs
   Error occurred at: 21/11/2018, 11:48:05
   Error description: Error BASE/1132  Bound error: array access
   Args:
     [   1] = A   { ... } length: 2
     [   2] = N   3

Stack Calls
===========
   Called from: .\Consulta.PRG => CARGA_PACI( 89 )
   Called from: .\Consulta.PRG => (b)CONSU_PACI( 47 )
   Called from: .\source\classes\COMBOBOX.PRG => TCOMBOBOX:CHANGE( 482 )
   Called from: .\source\classes\CONTROL.PRG => TCONTROL:HANDLEEVENT( 1702 )
   Called from: .\source\classes\COMBOBOX.PRG => TCOMBOBOX:HANDLEEVENT( 820 )
   Called from: .\source\classes\WINDOW.PRG => _FWH( 3544 )
   Called from:  => SENDMESSAGE( 0 )
   Called from: .\source\classes\DIALOG.PRG => TDIALOG:COMMAND( 427 )
   Called from:  => TWINDOW:HANDLEEVENT( 0 )
   Called from: .\source\classes\DIALOG.PRG => TDIALOG:HANDLEEVENT( 916 )
   Called from:  => DIALOGBOX( 0 )
   Called from: .\source\classes\DIALOG.PRG => TDIALOG:ACTIVATE( 289 )
   Called from: .\Consulta.PRG => CONSU_PACI( 83 )
   Called from: .\MenuCon.PRG => (b)MAIN( 46 )
   Called from: .\source\classes\BTNBMP.PRG => TBTNBMP:CLICK( 638 )
   Called from: .\source\classes\BTNBMP.PRG => TBTNBMP:LBUTTONUP( 872 )
   Called from: .\source\classes\CONTROL.PRG => TCONTROL:HANDLEEVENT( 1723 )
   Called from: .\source\classes\BTNBMP.PRG => TBTNBMP:HANDLEEVENT( 1705 )
   Called from: .\source\classes\WINDOW.PRG => _FWH( 3544 )
   Called from:  => WINRUN( 0 )
   Called from: .\source\classes\WINDOW.PRG => TWINDOW:ACTIVATE( 1062 )
   Called from: .\MenuCon.PRG => MAIN( 58 )


 
FWH 22.10 - HARBOUR - PELLES C
remtec
 
Posts: 717
Joined: Fri May 12, 2017 2:50 pm

Re: AYUDA URGENTE CON COMBOBOX

Postby remtec » Wed Nov 21, 2018 3:55 pm

Hola Cesar

Extraño por decir lo menos.

Agregue Arrtranspose y obtengo el cCod_pro1, pero al emitir el MsgStop se cae.

Creo que si esto tiene esta limitacion a estas alturas, nada que hacer.

Simplemente no entiendo nada.

Saludos
Antonio.


Code: Select all  Expand view

Static Function  Carga_paci(oCod_pro1,aProfe)  // <--- Cambiar aca
LOCAL cCod_Pro1 := ArrTranspose( aProfe )[ 1 ][oCod_pro1:nAt]  // <--- Cambiar aca
             ?cCod_pro1
             aPacentes := {}
             asize( aPacientes, 0 )


             carchi:='PACI'+trim(cCod_pro1)
             If !file('&carchi..dbf')
                MsgStop("MEDICO SELECCIONADO NO TIENE INGRESOS DE PACIENTES")   <====  Aqui se cae el prog.
                Return  nil
             Endif

 
FWH 22.10 - HARBOUR - PELLES C
remtec
 
Posts: 717
Joined: Fri May 12, 2017 2:50 pm

Previous

Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: No registered users and 81 guests