No se actualizan, los SAY.

Post Reply
JMFS-D
Posts: 40
Joined: Thu Jan 12, 2006 5:10 pm

No se actualizan, los SAY.

Post by JMFS-D »

Necesito ayuda, os reproduzco, un poco del codigo que no me funciona:

Code: Select all | Expand

FUNCTION CrearIndic( cContab )   *- Vectores y Matrices: Locales.      LOCAL axFicheros := {}      LOCAL anVal        := ARRAY( 4 )      LOCAL oDlg1      LOCAL oDlg2   *- Vectores Objeto: Locales.            LOCAL aoSay        := ARRAY( 4 )      LOCAL aoMeterInd := ARRAY( 4 )   *- Borramos los Indices antiguos.      axFicheros := DIRECTORY( "*.NTX" )      IF LEN( axFicheros ) > 0         AEVAL( axFicheros, { | fichero | FERASE( fichero[ F_NAME ] ) } )         axFicheros := {}      ENDIF   DEFINE DIALOG oDlg1 RESOURCE "Indices_Creacion"      REDEFINE SAY PROMPT OemToAnsi( "CREACIÓN DE LOS INDICES DEL AÑO: "  + cContab )      ID 101 OF oDlg1   ACTIVATE DIALOG oDlg1 CENTERED NOWAIT      *- Creación de los Indices de la Base de Datos: CLIENTES.DBF         AEVAL( anVal, { | elemento, n | anVal[ n ] := 0 } )         DEFINE DIALOG oDlg2 RESOURCE "Indices_Base_de_Datos"            REDEFINE SAY    aoSay[ 1 ]                                         ;                     PROMPT "BASE DE DATOS: CLIENTES.DBF"  ID 101 OF      oDlg2 UPDATE            REDEFINE SAY    aoSay[ 2 ]                                         ;                     PROMPT "POR: EL CODIGO DEL CLIENTE"   ID 102 OF oDlg2 UPDATE            REDEFINE SAY    aoSay[ 3 ]                                         ;                     PROMPT "POR: EL NOMBRE DEL CLIENTE"   ID 104 OF oDlg2 UPDATE            REDEFINE SAY    aoSay[ 4 ]                                         ;                     PROMPT "POR: EL TELEFONO DEL CLIENTE" ID 106 OF oDlg2 UPDATE            REDEFINE METER aoMeterInd[ 1 ] VAR anVal[ 1 ] ID 103 OF oDlg2            REDEFINE METER aoMeterInd[ 2 ] VAR anVal[ 2 ] ID 105 OF oDlg2            REDEFINE METER aoMeterInd[ 3 ] VAR anVal[ 3 ] ID 107 OF oDlg2            REDEFINE METER aoMeterInd[ 4 ] VAR anVal[ 4 ] ID 109 OF oDlg2         ACTIVATE DIALOG oDlg2 CENTERED NOWAIT..   Me genera los indices, y realizo una pausa, para ver que muestra el DIALOG. Hasta aquí todo correcto..           MsgInfo( "Pausa..." )*- Tras la Pausa, pasamos a otra DBF. Por lo que cambio, los SAY del DIALOG. Pero no los cambia, se queda como, cuando se activo el DIALOG. Le pogo la pausa, para verlo, pero nada.            AEVAL( anVal, { | elemento, n | anVal[ n ] := 0 } )            aoSay[ 1 ]:SetText( OemToAnsi( "BASE DE DATOS: PRESUPUE.DBF" ) )            aoSay[ 1 ]:Refresh()            aoSay[ 2 ]:SetText( OemToAnsi( "POR EL CODIGO DEL CLIENTE" ) )            aoSay[ 2 ]:Refresh()            aoSay[ 3 ]:SetText( OemToAnsi( "POR: EL NÚMERO DE PRESUPUESTO" ) )            aoSay[ 3 ]:Refresh()            aoSay[ 4 ]:SetText( OemToAnsi( "POR: EL NÚMERO DE PRESUPUESTO"   + ;                                           " SIN REPETIR"                 ) )            aoSay[ 4 ]:Refresh()            oDlg2:UpDate()            SysReFresh()*- Y así con una tercera DBF. Tampoco cambía


El DIALOG, tiene definidos los SAY, de manera que no sean de solo escritura, pues pensando que influía, desactive en el WORKSOP, READ ONLY. Pero nada, activado, o no. No me funciona.

¿Que debo hacer?

Saludos, José Mª
Last edited by JMFS-D on Tue Feb 21, 2006 5:15 pm, edited 3 times in total.
JMFS-D
Posts: 40
Joined: Thu Jan 12, 2006 5:10 pm

Sigo haciendo pruebas.

Post by JMFS-D »

No, se que sucede. Sigo haciendo pruebas, y no hay forma.

Los SAY, continuan si actualizarse.

¿Me podeís dar, una pequeña orientación?

Gracias anticipadas. Saludos, José Mª
User avatar
Antonio Linares
Site Admin
Posts: 42848
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Has thanked: 181 times
Been thanked: 124 times
Contact:

Post by Antonio Linares »

José Mª,

Este ejemplo funciona correctamente. Quizá te sirva de orientación:

Code: Select all | Expand

#include "FiveWin.ch"function Main()   local oDlg1, oDlg2, oTimer      DEFINE DIALOG oDlg1 TITLE "First"      @ 2, 2 SAY oSay PROMPT Time()      ACTIVATE DIALOG oDlg1 NOMODAL CENTERED               DEFINE TIMER oTimer ACTION oSay:SetText( Time() )      ACTIVATE TIMER oTimer      DEFINE DIALOG oDlg2 TITLE "Second"       ACTIVATE DIALOG oDlg2            return nil
regards, saludos

Antonio Linares
www.fivetechsoft.com
JMFS-D
Posts: 40
Joined: Thu Jan 12, 2006 5:10 pm

Gracias Antonio.

Post by JMFS-D »

Parece, que ya va en camino.

Espero no molestar, en algún tiempo.

Pero ya se sabe, basta que digas algo, para que ocurra lo contrario.

Saludos, José Mª
User avatar
leandro
Posts: 1779
Joined: Wed Oct 26, 2005 2:49 pm
Location: Colombia
Has thanked: 53 times
Been thanked: 16 times
Contact:

Quita update

Post by leandro »

Amigo, a mi en alguna oportunidad me sucedio lo mismo y se debia a la clausula UPDATE, intenta quitarla, creo que esto te solucionara el problema.
Saludos
LEANDRO AREVALO
Bogotá (Colombia)
https://hymlyma.com
https://hymplus.com/
leandroalfonso111@gmail.com
leandroalfonso111@hotmail.com

[ Turbo Incremental Link64 6.98 Embarcadero 7.70 ] [ FiveWin 24.09 ] [ xHarbour 64 bits) ]
JMFS-D
Posts: 40
Joined: Thu Jan 12, 2006 5:10 pm

Lo que decía.

Post by JMFS-D »

Antes de nada, ¡Gracias!, por la respuesta Leandro.

Con lo que me respondio Antonio, ¡Gracias! de nuevo, por ello. Y lo que Vd. me contesto, se soluciono el problema.

Pero, "siempre hay un pero", ahora surgio uno nuevo.

La función funciona, hasta que llega el momento de salir, y en vez de seguir a la línea siguiente a la llamada, hace un RETURN a la función que la llamo.

Lo extraño es que si, le pongo un MsgInfo( "Pausa, antes de salir..." ). Antes del RETURN, este no se muestra, y entonces si funciona:

Code: Select all | Expand

*- Ficheros de cabecera:       #INCLUDE "DIRECTRY.CH"       #INCLUDE "FiveWin.CH"       #INCLUDE "MESDBF.CH"   // Clase: TDbf       #INCLUDE "..\..\Include\Comunes.CH"*- Variables: Estaticas.   *- Utilizada por la función: PorcentInd.      STATIC lPrimerVez := TRUEFUNCTION CrearIndic( cContab )   *- Vectores: Locales.      LOCAL axFicheros := {}      LOCAL anVal      := ARRAY( 5 )   *- Constantes Objeto: Locales.      LOCAL oDlg1      LOCAL oDlg2   *- Vectores Objeto: Locales.            LOCAL aoSay      := ARRAY( 5 )      LOCAL aoMeter    := ARRAY( 5 )   *- Borramos los Indices antiguos.      axFicheros := DIRECTORY( "*.NTX" )      IF LEN( axFicheros ) > 0         AEVAL( axFicheros, ;                  { | fichero | FERASE( fichero[ F_NAME ] ) } )         axFicheros := {}      ENDIF   DEFINE DIALOG oDlg1 RESOURCE "Indices_Creacion"      REDEFINE SAY PROMPT OemToAnsi( "CREACIÓN DE LOS INDI" + ;                "CES DEL AÑO: " + cContab ) ID 101 OF oDlg1   ACTIVATE DIALOG oDlg1 CENTERED NOWAIT      DEFINE DIALOG oDlg2 RESOURCE "Indices_Base_de_Datos"         REDEFINE SAY aoSay[ 1 ] ID 101 OF oDlg2         REDEFINE SAY aoSay[ 2 ] ID 102 OF oDlg2         REDEFINE SAY aoSay[ 3 ] ID 104 OF oDlg2         REDEFINE SAY aoSay[ 4 ] ID 106 OF oDlg2         REDEFINE SAY aoSay[ 5 ] ID 110 OF oDlg2         REDEFINE METER aoMeter[ 1 ] VAR anVal[ 1 ] ;                        ID       103 OF oDlg2         REDEFINE METER aoMeter[ 2 ] VAR anVal[ 2 ] :                         ID 105 OF oDlg2         REDEFINE METER aoMeter[ 3 ] VAR anVal[ 3 ] ;                        ID 107 OF oDlg2         REDEFINE METER aoMeter[ 4 ] VAR anVal[ 4 ] ;                        ID 109 OF oDlg2         REDEFINE METER aoMeter[ 5 ] VAR anVal[ 5 ] ;                        ID 111 OF oDlg2      ACTIVATE DIALOG   oDlg2                               ;               CENTERED                                  ;               ON PAINT ( Indexar( aoSay, aoMeter, ;                           anVal ), oDlg2:End(), oDlg1:End() )   MsgInfo( "Antes de Salir..." ) // Si lo quito, no funcionaRETURN NILFUNCTION Indexar( aoSay, aoMeter, anVal )   *- Vectores: Locales.      LOCAL acMensajes := ARRAY( 4 )   *- Constantes Objeto: Locales.      LOCAL oDbfClient  // Para: CLIENTES.DBF      LOCAL oDbfPresup // Para: PRESUPUE.DBF      LOCAL oDbfFactC  // Para: FACTCLIE.DBF      LOCAL oDbfProv   // Para: PROVEEDO.DBF      LOCAL oDbfFactP  // Para: FACTPROV.DBF      LOCAL oDbfDevoP  // Para: DEVOPROV.DBF        // Codigo OOP para la generación         // del fichero: CLIENTES.DBF          DEFINE DATABASE oDbfClient FILE "CLIENTES.DBF"   ;                                            ALIAS "CLIENTES"            FIELD NAME "CODIGO" TYPE "C" LEN 7 DEC 0 OF oDbfClient            FIELD NAME "NOMBRE"     TYPE "C" LEN 20  DEC 0 OF oDbfClient            FIELD NAME "APELLIDO1" TYPE "C" LEN  30 DEC 0 OF oDbfClient            FIELD NAME "APELLIDO2" TYPE "C" LEN  30 DEC 0 OF DbfClient            FIELD NAME "DOMICILIO" TYPE "C" LEN  40 DEC 0 OF oDbfClient            FIELD NAME "COD_POSTAL" TYPE "N" LEN 5 DEC 0 OF oDbfClient            FIELD NAME "POBLACION" TYPE "C" LEN  30 DEC 0 OF oDbfClient            FIELD NAME "PROVINCIA" TYPE "C" LEN 30  DEC 0 OF oDbfClient            FIELD NAME "NIF"          TYPE "C" LEN 12 DEC 0 OF oDbfClient            FIELD NAME "TELEFONO1" TYPE "N" LEN 9 DEC 0 OF oDbfClient            FIELD NAME "TELEFONO2" TYPE "N" LEN 9 DEC 0 OF oDbfClient         // Indices del objeto TDbf oDbfClient             acMensajes := { "BASE DE DATOS: CLIENTES.DBF" , ;                           "POR: EL CÓDIGO DEL CLIENTE" , ;                           "POR: EL NOMBRE DEL CLIENTE" , ;                           "POR: EL TELÉFONO DEL CLIENTE" }            *- Indice: ClieCod = Clientes Codigo del Cliente.               INDEX FILE ClieCod ;                TAG  Codigo ;                ON    codigo ;                EVAL ( lPrimerVez := TRUE  , ;                  PorcentInd( oDbfClient, aoMeter[ 1 ], ;                       anVal, acMensajes, aoSay ) )  ;                OF       oDbfClient            *- Indice: ClieNomb = Clientes Nombre del Cliente.               INDEX FILE ClieNomb                 ;               TAG Nombre                        ;               ON   apellido1 + apellido2 + ;                       nombre + codigo         ;               EVAL ( lPrimerVez := TRUE   , ;                   PorcentInd( oDbfClient, aoMeter[ 2 ] ) )  ;               OF     oDbfClient            /* Indice: ClieTele = Clientes                                        Teléfono del Cliente. */               INDEX FILE ClieTele ;               TAG  Telefono ;               ON PADL( telefono1, 9, "0" ) + ;                    PADL( telefono2, 9, "0" ) + ;                    PADL( movil, 9, "0" ) + ;                    PADL( fax, 9, "0" ) + ;                   codigo ;               EVAL ( lPrimerVez := TRUE, ;                PorcentInd( oDbfClient, aoMeter[ 3 ] ) ) ;               OF   oDbfClient           END DATABASE oDbfClient      ACTIVATE DATABASE oDbfClient // NORECYCLE      oDbfClient:Close()       // Codigo OOP para la generación del fichero: PRESUPUE.DBF     DEFINE DATABASE oDbfPresup FILE "PRESUPUE.DBF" ;                                 ALIAS "PRESUPUE"        FIELD NAME "TIPO"            TYPE "N" LEN   1 DEC 0   OF oDbfPresup        FIELD NAME "ESTADO"        TYPE "N" LEN   1 DEC 0   OF oDbfPresup        FIELD NAME "CODIGO"        TYPE "C" LEN  7 DEC 0  OF oDbfPresup        FIELD NAME "NUMPRESUPU" TYPE "C" LEN  5 DEC 0  OF oDbfPresup        FIELD NAME "FECHAPRESU" TYPE "D" LEN   8 DEC 0 OF oDbfPresup        FIELD NAME "DESCRIPCIO" TYPE "C" LEN 200 DEC 0 OF oDbfPresup        FIELD NAME "CANTIDAD"    TYPE "N" LEN   3 DEC 0 OF oDbfPresup        FIELD NAME "PRECIO"         TYPE "N" LEN   8 DEC 3  OF oDbfPresup                // Indices del objeto TDbf oDbfPresup            acMensajes := { "BASE DE DATOS: PRESUPUE.DBF" , ;                "POR: EL CÓDIGO DEL CLIENTE"      , ;                "POR: EL NÚMERO DE PRESUPUESTO" , ;                "POR: EL NÚMERO DE PRESUPUESTO, SIN REPETIR" }            *- Indice: CPCodCli = Clientes Presupuestos Codigo del Cliente.               INDEX FILE CPCodCli ;               TAG  Codigo        ;               ON   codigo          ;               EVAL ( lPrimerVez := TRUE, ;                   PorcentInd( oDbfPresup, aoMeter[ 1 ] , ;                        anVal, acMensajes, aoSay ) )  ;               OF   oDbfPresup            /* Indice: CPPresup = Clientes Presupuestos                                Codigo del Cliente                               y Número de Presupuesto                      */               INDEX FILE CPPresup ;               TAG  Presupu      ;               ON   codigo + numpresupu   ;               EVAL ( lPrimerVez := TRUE   , ;                  PorcentInd( oDbfPresup, aoMeter[ 2 ] ) )  ;               OF   oDbfPresup            /* Indice: CPPresuU = Clientes Presupuestos                                  Codigo del Cliente                                 y Número de Presupuesto                                  SIN REPETIR.     */               INDEX FILE CPPresuU ;               TAG  PresupuU ;               ON   codigo + numpresupu UNIQUE ;               EVAL ( lPrimerVez := TRUE, ;                   PorcentInd( oDbfPresup, aoMeter[ 3 ] ) )  ;               OF   oDbfPresup             END DATABASE oDbfPresup     ACTIVATE DATABASE oDbfPresup // NORECYCLE     oDbfPresup:Close() RETURN NIL//-----------------------------------------------------------//*- Función: PorcentInd.STATIC FUNCTION PorcentInd( oDbf, oMeter, anVal, acMensajes, aoSay )   *- Variables: Locales.      LOCAL nRegistro := 0   IF lPrimerVez      lPrimerVez    := FALSE      oMeter:nTotal := oDbf:LastRec()      IF VALTYPE( acMensajes ) = "A"         IF LEN( acMensajes ) = 4            ASIZE( acMensajes, 5 )            acMensajes[ 5 ] := ""         ENDIF         AEVAL( anVal, { | elemento, n | anVal[ n ] := 0 } )         AEVAL( aoSay, { | elemento, n |                                                 ;                       aoSay[ n ]:SetText( OemToAnsi( acMensajes[ n ] ) )    , ;                       aoSay[ n ]:Refresh()                               } )      ENDIF   ENDIF   nRegistro := oDbf:RecNo()   oMeter:Set( nRegistro )   SysRefresh()   SI nRegistro = oMeter:nTotal ENTONCES lPrimerVez := TRUERETURN TRUE


¿Por que?. ¿Le ha ocurrido alguien lo mismo?

Saludos, José M
Last edited by JMFS-D on Thu Feb 23, 2006 9:41 pm, edited 30 times in total.
User avatar
leandro
Posts: 1779
Joined: Wed Oct 26, 2005 2:49 pm
Location: Colombia
Has thanked: 53 times
Been thanked: 16 times
Contact:

No entendi?

Post by leandro »

Amigo, la verdad no entendi, lo que quieres si mandas algun pedazo de codigo?
Saludos
LEANDRO AREVALO
Bogotá (Colombia)
https://hymlyma.com
https://hymplus.com/
leandroalfonso111@gmail.com
leandroalfonso111@hotmail.com

[ Turbo Incremental Link64 6.98 Embarcadero 7.70 ] [ FiveWin 24.09 ] [ xHarbour 64 bits) ]
User avatar
Antonio Linares
Site Admin
Posts: 42848
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Has thanked: 181 times
Been thanked: 124 times
Contact:

Post by Antonio Linares »

Jose Mª,

>
Lo extraño es que si, le pongo un MsgInfo( "Pausa, antes de salir..." ). Antes del RETURN, este no se muestra, y entonces si funciona:
>

Llama a SysRefresh() en vez de a MsgInfo()
regards, saludos

Antonio Linares
www.fivetechsoft.com
JMFS-D
Posts: 40
Joined: Thu Jan 12, 2006 5:10 pm

Gracias Antonio.

Post by JMFS-D »

Lo acabo de probar, efectivamente, de momento funciona.

¡Gracias!, de nuevo. José Mª
Post Reply