Como mostrar un cuadro de mensajes ??

90 views
Skip to first unread message

Saul Piña Hernandez

unread,
Nov 22, 2015, 10:55:24 AM11/22/15
to Comunidad de Visual Foxpro en Español
Buenos dias, existe una pantalla que realiza diferentes cálculos de datos, entonces para que el usuario pueda observar los calculos que se han realizado y los que no, se me ha ocurrido que en la pantalla se muestren mensajes de dichas actividades.

Por lo que he visto, creo que se utiliza para estos casos un EditBox ya que éste objeto cuenta con Scroll, en fin.  he intentado de la siguiente manera, pero a veces muestra correcto y a veces salta una linea y la deja vacia y en la siguiente linea muestra 2do mensaje.

Ejemplo:

if Calculo1>0
else
Thisform.mensajes.Value="No existe efectivo inicial"
endif

if calculo2>0
else
Thisform.mensajes.Value=Thisform.mensajes.Value+chr(13)+"No existen gastos en esta fecha"
endif

El problema que veo en esto, es que cuando Calculo si es mayor a 0 salta el primer mensaje y queda una linea "vacia" y me muestra el mensaje de la linea 2.

La idea es tener un cuadro de mensajes y todos los mensajes se vayan mostrando por linea.

muchas gracias.


Víctor Hugo Espínola Domínguez

unread,
Nov 22, 2015, 11:07:06 AM11/22/15
to publice...@googlegroups.com
>Thisform.mensajes.Value+chr(13)

Thisform.mensajes.Value + Iif(Empty(Thisform.mensajes.Value), "", chr(13))


Saludos,
Víctor.
Lambaré - Paraguay.

Message has been deleted

Saul Piña Hernandez

unread,
Nov 22, 2015, 11:27:21 AM11/22/15
to Comunidad de Visual Foxpro en Español
En mi caso el nombre del EditBox es "Mensajes" , entonces me marca error de sintaxis

            Thisform.mensajes.Value + Iif(Empty(Thisform.mensajes.Value), "No existe Inicial con este Usuario", chr(13))


********

Fidel Charny

unread,
Nov 22, 2015, 11:33:00 AM11/22/15
to Comunidad de Visual Foxpro en Español
El mensajero que uso tiene un textbox para títulos y un Editbox para desarrollo de la info. El código que sigue es el que permite que la info se vaya mostrando adecuadamen en el Editbox (lo del textbox que hace de header lo puedes dejar de lado [tnHeader_Flag] ).

Nota: Es importante la observación de Fernando D. Bozzo sobre no mostrar información que para el usuario es absolutamente irrelevante, e incluso, confusa. Más bien, los datos que quieres guardarte para ver la evolución de algún punto del programa los pones en archivos log que tu puedas interpretar pero que el ususario no lo hará.

* Method: AddLine
LPARAMETERS tcAddMessage
, tnHeader_flag , tnTabs
*!*    Tags within the text
*!*    <L>    El mensaje va en la misma línea. May be LOWER()
*!* <C/> Limpia edtMensajero (.edtMensajero.value=""). May be LOWER()
*!* <E/> Crea una línea Vacía

*!*    tnHeader_flag = 0    edtMensaje
*!*    tnHeader_flag = 1    Header + edtMensaje
*!*    tnHeader_flag = 2    Header

#DEFINE _TAB_    CHR(9)
#DEFINE _SPA_    CHR(32)
#DEFINE _SYM_    CHR(155)
#DEFINE _CR_    CHR(13)

tcAddMessage
=EVL(m.tcAddMessage,"")
tnHeader_flag
=IIF(VARTYPE(tnHeader_flag)="L",IIF(tnHeader_flag,1,0),EVL(tnHeader_flag,0))
tnTabs
= IIF(VARTYPE(tnTabs)="L",IIF(tnTAbs,1,0),EVL(tnTabs,0))

LOCAL lcAdd
,lcEdt_Value

WITH
this
    lcEdt_Value
=TRIM(.edtMensajero.Text)
    IF m
.tnHeader_Flag > 0
       
.txt_Header.Value="» "+m.tcAddMessage
    ENDIF
   

    IF m
.tnHeader_Flag < 2
        DO CASE
            CASE UPPER
(ALLTRIM(m.tcAddMessage))=="<C/>"    && clean
               
.EDTMensajero.Value=""
            CASE UPPER
(ALLTRIM(m.tcAddMessage))=="<E/>" && agrega línea vacía
               
.edtMensajero.Value = TRIM(m.lcEdt_Value) + _CR_
            CASE AT
("<L>",m.tcAddMessage)>0                && mensaje en la misma línea
               
.edtMensajero.Value=SUBSTR(m.lcEdt_Value,1,RAT(_SYM_,m.lcEdt_Value)) ;
                   
+REPLICATE(_TAB_,m.tnTabs)+_SPA_+ALLTRIM(STRTRAN(m.tcAddMessage,"<L>","")) + _CR_
            CASE AT
("<l>",m.tcAddMessage)>0                && mensje en la misma línea
               
.edtMensajero.Value=SUBSTR(m.lcEdt_Value,1,RAT(_SYM_,m.lcEdt_Value)) ;
                   
+REPLICATE(_TAB_,m.tnTabs)+_SPA_+ALLTRIM(STRTRAN(m.tcAddMessage,"<l>","")) + _CR_                    
            OTHERWISE                                    
&& nueva línea de mensaje
               
.edtMensajero.Value = TRIM(m.lcEdt_Value) ;
                   
+REPLICATE(_TAB_,m.tnTabs)+_SYM_+_SPA_+ALLTRIM(m.tcAddMessage) + _CR_
        ENDCASE
       
.edtMensajero.SelStart=LEN(TRIM(.edtMensajero.Text))+1
    ENDIF
   
ENDWITH

Víctor Hugo Espínola Domínguez

unread,
Nov 22, 2015, 11:46:43 AM11/22/15
to publice...@googlegroups.com
En vez de:
>Thisform.mensajes.Value+chr(13)

Escribe lo siguiente TAL CUAL
Thisform.mensajes.Value + Iif(Empty(Thisform.mensajes.Value), "", chr(13))

Saludos,
Víctor.
Lambaré - Paraguay.


Víctor Hugo Espínola Domínguez

unread,
Nov 22, 2015, 11:50:11 AM11/22/15
to publice...@googlegroups.com
El truco es reemplazar chr(13) por Iif(Empty(Thisform.mensajes.Value), "", chr(13))




Saludos,
Víctor.
Lambaré - Paraguay.


Saul Piña Hernandez

unread,
Nov 22, 2015, 11:50:59 AM11/22/15
to Comunidad de Visual Foxpro en Español
Me funcionó de la siguiente manera:

Thisform.mensajes.Value= ;
            Thisform.mensajes.Value + Iif(Empty(Thisform.mensajes.Value), "", chr(13)) ;
            +"No Existe Ingreso de Efectivo con este Usuario"


Seguiré proando y claro, a tomar en cuenta el comentario de Fidel, que es muy acertado.. trataré de no mostrar algo irrelevante.

Gracias.

Víctor Hugo Espínola Domínguez

unread,
Nov 22, 2015, 2:34:44 PM11/22/15
to publice...@googlegroups.com
Ese es un algoritmo básico de programación: Armar una cadena con valores y separadores de tal forma que no hayan separadores en los extremos.

Solución 1) lcCadena = lcCadena + Iif(Empty(lcCadena, "", lcSeparador) + lcValor

Solución 2) lcCadena = lcCadena + lcValor + lcSeparador
y al final:    lcCadena = Left(lcCadena, Len(lcCadena) - Len(lcSeparador)



Saludos,
Víctor.
Lambaré - Paraguay.


integral

unread,
Nov 23, 2015, 4:25:13 PM11/23/15
to Comunidad de Visual Foxpro en Español
Estimado amigo :

Con relación a tu consulta te muestro una imagen donde mediante el MessageBox muestro los mensajes que corresponden a una validación...

Saludos,

INTEGRAL
Color en Contenedor.jpg
Reply all
Reply to author
Forward
0 new messages