Color en concatenacion

1,225 views
Skip to first unread message

Rubén Dario Lezcano Salinas

unread,
Mar 27, 2015, 9:16:15 AM3/27/15
to publice...@googlegroups.com
Buenos Días 

tengo cargado en un texbox esto:

thisform.pageframe1.page2.text5.Value= "EL PEDIDO :"+ "  " + per +CHR(13)+ CHR(13)+"DEBE PREPARARSE EL DIA DE HOY"

Como puedo poner en rojo la variable per

saludos

Fernando D. Bozzo

unread,
Mar 27, 2015, 11:54:29 AM3/27/15
to publice...@googlegroups.com
No podés, los controles de Fox no admiten múltiples colores a la vez. Para eso tendrías que usar el OCX Richtext, pero sería demasiada carga y dependencia para un solo campo.

Víctor Hugo Espínola Domínguez

unread,
Mar 27, 2015, 12:02:56 PM3/27/15
to publice...@googlegroups.com
Como dice Fernando este caso no amerita el uso de dicho control.

Adjunto un ejemplo que obtiene el efecto mediante el truco de encimar dos controles textbox. Debes convertir a scx con el programa de Fernando "foxbin2prg.prg".

Saludos,
Víctor.
Lambaré - Paraguay.

txtbicolor.sc2

Rubén Dario Lezcano Salinas

unread,
Mar 27, 2015, 12:56:18 PM3/27/15
to publice...@googlegroups.com
Lo mas facil entonces sería poner un Label con un color con visible y punto no?

saludos y muchas gracias
--

Rubén Lezcano

Víctor Hugo Espínola Domínguez

unread,
Mar 27, 2015, 1:52:31 PM3/27/15
to publice...@googlegroups.com
Hola Rubén

El truco sería el mismo: Encimar los controles.

Saludos,
Víctor.
Lambaré - Paraguay.

Ultraton500

unread,
Mar 27, 2015, 4:14:37 PM3/27/15
to publice...@googlegroups.com
Se me ocurrió un truquito con un solo control. En lugar de usar un textbox se puede usar un editbox y utilizar las propiedades SelStart y  SelLenght de esta forma:

per="texto con color"
thisform.edit1.Value = "EL PEDIDO :"+ "  " + per +CHR(13)+ CHR(13)+"DEBE PREPARARSE EL DIA DE HOY"
THISFORM.edit1.SelStart = 13 && también podría ser LEN("EL PEDIDO :"+ "  ")
THISFORM.edit1.SelLength = LEN(per)

Para lograr bien el efecto además se deberá establecer, en el editbox, la propiedad HideSelection a .F.,  la propiedad SelectedBackColor igual a su color de fondo y la propiedad SelectedForeColor igual al color con el que se quiera colorear el texto.
Lo probé y funciona bien.

Saludos,
Javier.

Víctor Hugo Espínola Domínguez

unread,
Mar 27, 2015, 5:27:28 PM3/27/15
to publice...@googlegroups.com
Hola Javier

Muy bueno el truco, para que no se pierda el efecto la hacer click retornar .F. en el evento WHEN.

Saludos,
Víctor.
Lambaré - Paraguay.

Ultraton500

unread,
Mar 28, 2015, 1:05:56 AM3/28/15
to publice...@googlegroups.com
Así es Víctor, hay que agregar RETURN .F. en el evento WHEN para evitar este inconveniente del que ni me había percatado. Gracias por el dato.

Saludos,
Javier.

José Luis Carranza

unread,
Nov 23, 2015, 10:37:13 AM11/23/15
to publice...@googlegroups.com

Estimados buenos días, recurro a ustedes solicitando ayuda para convertir un archivo TXT que género y por defecto lo genera con CODE PAGE UTF-8 y me solicitan que sea ANSI

Buscando en google encontré algunos ejemplos que he aplicado como:

loConvertir=FILETOSTR(ALLTRIM(lcRuta)+'.TXT')    && almaceno el archivo con origen UTF-8

loTexto= STRCONV(loConvertir,12)    && lo convierto a ANSI

 

loDestino = ALLTRIM(lcRuta)+'VVV__.TXT'

STRTOFILE(loTexto, loDestino)

Pero igual no logro que sea ANSI.

También probé creando el archivo con FOPEN() y haciendo un trace al crearlo si lo pone como ANSI, pero a medida que agrego la primera línea con FWRITE() lo cambia a UTF-8, si cambio la línea con STRCONV() tampoco funciona.

Si alguno de ustedes me puede dar un indicio de cómo generarlo en ANSI.

Adjunto el archivo que está en UTF-8.

Quedo atento a sus respuestas. Gracias.

Saludos cordiales,


José Luis Carranza Palomares
Lima-Perú

B00100000015_151118VVV__.TXT

Víctor Hugo Espínola Domínguez

unread,
Nov 23, 2015, 10:50:13 AM11/23/15
to publice...@googlegroups.com
Hola José Luís

Convertir Utf-8 a Single byte requiere dos pasos:

lcUtf_8 = Filetostr("ArchivoUtf_8")

lcDB    = Strconv(m.lcUtf_8, 11)
lcW1252 = Strconv(m.lcDB, 2)


Saludos,
Víctor.
Lambaré - Paraguay.


José Luis Carranza

unread,
Nov 23, 2015, 3:00:15 PM11/23/15
to publice...@googlegroups.com
Hola Víctor, acabo de realizar las pruebas siguiendo los pasos que me indicaste y no consigo que el archivo Txt cambie de Utf-8 a Unicode.
El archivo de nombre mas corto es el que se genera por default con TEXTMERGE y el de nombre mas largo lo genere siguiendo los pasos que me indicas en tu correo.
Gracias por tu tiempo.

 
José Luis Carranza Palomares
Lima-Perú

B00100000018_151122.TXT
B00100000018_151122VVV__.TXT

Víctor Hugo Espínola Domínguez

unread,
Nov 23, 2015, 7:27:01 PM11/23/15
to publice...@googlegroups.com
Hola José Luís

Estoy perdido, no entiendo si tú debes generar o recibir el archivo en Utf-8.


Saludos,
Víctor.
Lambaré - Paraguay.


José Luis Carranza

unread,
Nov 23, 2015, 8:43:30 PM11/23/15
to publice...@googlegroups.com
Hola Víctor, yo genero el archivo TXT pero se genera en UTF-8 y me piden que el archivo TXT este en ANSI.

Saludos,


José Luis Carranza Palomares
Lima-Perú


Víctor Hugo Espínola Domínguez

unread,
Nov 23, 2015, 9:23:10 PM11/23/15
to publice...@googlegroups.com
Muestra por favor el código que genera el archivo Utf-8


Saludos,
Víctor.
Lambaré - Paraguay.


José Luis Carranza

unread,
Nov 24, 2015, 9:49:29 AM11/24/15
to publice...@googlegroups.com
Hola Víctor, adjunto el PRG que utilizo, básicamente tengo 2 cursores cabecera y detalle. En base a la información de los cursores armo el TXT usando TEXMERGE.

CREATE CURSOR cCabecera (Nrodocumento     c(12),;
                         RUCEmpresa     c(11),;
                         Cdmoneda        c(1),;
                         MtoTotal        n(12,2),;
                         MtoImpuesto    n(12,2))
APPEND BLANK
Replace Nrodocumento     WITH 'F00100000010';
        RUCEmpresa         WITH '20512875975';
        Cdmoneda        WITH 'S';
        MtoTotal        WITH 17.00;
        MtoImpuesto        WITH 2.59


CREATE CURSOR cDetalle (Cantidad         n(5),;
                        Cdarticulo        c(20),;
                        DsArticulo        c(60),;
                        MtoSubtotal        n(12,2))
APPEND BLANK    

Replace Cantidad         WITH 2;
        Cdarticulo        with '5555555';
        DsArticulo        with 'PRODUCTO1';
        MtoSubtotal        with 10.00
       
APPEND BLANK    

Replace Cantidad         WITH 5;
        Cdarticulo        with '8888888';
        DsArticulo        with 'PRODUCTO2';
        MtoSubtotal        with 7.00       


lcNom    =        'F00100000010_20151124'


lcNomDef  = CURDIR()+UPPER(lcNom)

lcRuta      = CURDIR()
***lcRuta = PUTFILE('Nombre',lcNomDef,'TXT')

IF EMPTY(lcRuta)
    =MESSAGEBOX('Seleccione un directorio por favor...',48,'.::Facturación Electrónica')
    RETURN .F.
ENDIF
lcRuta      = CURDIR()+ALLTRIM(UPPER(lcNom))

                         
MiAnno         =    '2015'
MiMes        =    '11'
MiDia        =    '24'
MiImpresora =    ''
SET TEXTMERGE ON TO (lcRuta)  NOSHOW    
   
Scan
    \\A;Serie;;<<ALLTRIM(substr(cCABECERA.NroDocumento,1,4))>>
    \A;Correlativo;;<<ALLTRIM(substr(cCABECERA.NroDocumento,5,8))>>
    \A;CODI_EMPR;;2
   
    \A;RUTEmis;;<<ALLTRIM(cCabecera.RucEmpresa)>>
   
   
    \A;TipoMoneda;;<<IIF(cCabecera.Cdmoneda='S','PEN','USD')>>
   
   
    \A;MntTotal;;<<ALLTRIM(STR(cCabecera.MtoTotal,12,2))>>
    \A;MntTotGrat;;<<0.00>>
    \A;FchEmis;;<<miAnno>>-<<miMes>>-<<MiDia>>
    \A;ImprDest;;<<miImpresora>>
   
    \A2;CodigoImpuesto;1;1000
    \A2;MontoImpuesto;1;<<ALLTRIM(STR(cCabecera.MtoImpuesto,12,2))>>
ENDSCAN
   
   
SELECT CDETALLE
GO top
miNroItem    =    0
Scan
    miNroItem    =    miNroItem    +    1
    \B;NroLinDet;<<ALLTRIM(STR(miNroItem,4))>>;<<ALLTRIM(STR(miNroItem,4))>>
    \B;QtyItem;<<ALLTRIM(STR(miNroItem,4))>>;<<ALLTRIM(STR(cDetalle.Cantidad,12))>>
    \B;UnmdItem;<<ALLTRIM(STR(miNroItem,4))>>;NIU
    \B;VlrCodigo;<<ALLTRIM(STR(miNroItem,4))>>;<<ALLTRIM(cDetalle.Cdarticulo)>>
    \B;NmbItem;<<ALLTRIM(STR(miNroItem,4))>>;<<ALLTRIM(cDetalle.DsArticulo)>>
    \B;MontoItem;<<ALLTRIM(STR(miNroItem,4))>>;<<ALLTRIM(STR(cDetalle.MtoSubtotal,12,2))>>   
    \B;IndExe;<<ALLTRIM(STR(miNroItem,4))>>;10
    \B;CodigoTipoIgv;<<ALLTRIM(STR(miNroItem,4))>>;1000
ENDSCAN
SELECT cCABECERA
GO top
\C;NroLinDR;1;1
\C;TpoMov;1;D
\E;TipoAdicSunat;1;01
\E;NmrLineasDetalle;1;01            
\E;NmrLineasAdicSunat;1;01
\E;TipoAdicSunat;2;01
\E;NmrLineasDetalle;2;02
\E;NmrLineasAdicSunat;2;02
\E;TipoAdicSunat;5;01
\E;NmrLineasDetalle;5;05
\E;NmrLineasAdicSunat;5;05

SET TEXTMERGE TO
*-------------

loConvertir=FILETOSTR(ALLTRIM(lcRuta)+'.TXT')    && almaceno el archivo con origen UTF-8
loDestino = ALLTRIM(lcRuta)+'VVV__.TXT'

lcUtf_8 = Filetostr(ALLTRIM(lcRuta)+'.TXT')

lcDB    = Strconv(m.lcUtf_8, 11)
lcW1252 = Strconv(m.lcDB, 2)
STRTOFILE(lcW1252, loDestino)

*-------------
WAIT CLEAR


Saludos cordiales,

José Luis
Lima-Perú
genera_txt.prg

Antonio Meza

unread,
Nov 24, 2015, 10:10:13 AM11/24/15
to Comunidad de Visual Foxpro en Español
Hola!!

Ya probaste guardando el archivo sin convertirlo? recuerdo que por default VFP los guarda como ANSI, esto lo puedes checar abriendo el archivo guardado con el Bloc de Notas de windows, es decir lo abres y le das guardar y en la parte de abajo te indica como fue guardado si UTF-8 o ANSI.

Donde tienes estas lineas
lcUtf_8 = Filetostr(ALLTRIM(lcRuta)+'.TXT')
lcDB    = Strconv(m.lcUtf_8, 11)
lcW1252 = Strconv(m.lcDB, 2)
STRTOFILE(lcW1252, loDestino)

Solo comenta las lineas donde usas strconv() y prueba

lcUtf_8 = Filetostr(ALLTRIM(lcRuta)+'.TXT')
* lcDB    = Strconv(m.lcUtf_8, 11)
* lcW1252 = Strconv(m.lcDB, 2)
STRTOFILE
(lcW1252, loDestino)

Saludos
Antonio Meza

José Luis Carranza

unread,
Nov 24, 2015, 10:29:20 AM11/24/15
to publice...@googlegroups.com
Hola Antonio, acabo de realizar la prueba que me indicaste y el archivo lo sigue generando en UTF-8, para validar con que formato esta el TXT utilizo el NOTEPAD ++

Saludos,

José Luis
Lima-Perú

Víctor Hugo Espínola Domínguez

unread,
Nov 24, 2015, 10:52:52 AM11/24/15
to publice...@googlegroups.com
*-------------
>loConvertir=FILETOSTR(ALLTRIM(lcRuta)+'.TXT')    && almaceno el archivo con origen UTF-8
>loDestino = ALLTRIM(lcRuta)+'VVV__.TXT'
>
>lcUtf_8 = Filetostr(ALLTRIM(lcRuta)+'.TXT')
>lcDB    = Strconv(m.lcUtf_8, 11)
>lcW1252 = Strconv(m.lcDB, 2)
>STRTOFILE(lcW1252, loDestino)

*-------------

Reemplaza el código anterior por:
lcDestino = Alltrim(lcRuta)+'VVV__.TXT'

lcSingleByte = Filetostr(Alltrim(lcRuta)+'.TXT')
lcDBCS       = Strconv(m.lcSingleByte, 1)
lcUtf_8      = Strconv(m.lcDBCS, 9) && No usado, solo p/ver dif. entre SingleByte y UTF-8
lcUniCode    = Strconv(m.lcDBCS, 5)

Strtofile(m.lcUtf_8, "Utf_8_JL.txt") && No usado. Abre con Block de Notas y luego Guardar como...
                                        && Ahí te muestra la codificación
Strtofile(m.lcUniCode, m.lcDestino)


Saludos,
Víctor.
Lambaré - Paraguay.


José Luis Carranza

unread,
Nov 24, 2015, 11:17:32 AM11/24/15
to publice...@googlegroups.com
Hola Victor, el archivo cambio de codificación a UCS-2Little Indian


Después de eso, cambie el Strconv(m.lcDBCS, 5)  as Strconv(m.lcDBCS, 6) y el archivo lo genera en ANSI pero el contenido lo cambia a puros signos de interrogación.



Saludos,

José Luis
Lima-Perú

Antonio Meza

unread,
Nov 24, 2015, 11:47:24 AM11/24/15
to Comunidad de Visual Foxpro en Español
De la variable que obtienes con en 
SET TEXTMERGE ON TO (lcRuta)  NOSHOW     

Mándala directo a guardar no hagas otra cosa y checas de nuevo, pero abre el archivo en el Bloc de notas le das "guardar como" y hasta abajo te indica en que codificación esta.

STRTOFILE(lcRuta, loDestino)

saludos

Víctor Hugo Espínola Domínguez

unread,
Nov 24, 2015, 11:51:08 AM11/24/15
to publice...@googlegroups.com
>el archivo cambio de codificación a UCS-2Little Indian


Todavía no sé si quieres generar el archivo en ANSI o UNICODE o UTF-8 :-(


Saludos,
Víctor.
Lambaré - Paraguay.


José Luis Carranza

unread,
Nov 25, 2015, 9:42:57 AM11/25/15
to publice...@googlegroups.com
Hola Víctor y Antonio, en realidad debo generar el archivo en ANSI o Windows 1256.
Hice los siguientes cambios:
antes del TEXTMERGE

SET ANSI ON
SYS(3101,1252)


SET TEXTMERGE ON TO (lcRuta)  NOSHOW

SET TEXTMERGE TO

El archivo resultado con el NOTEPAD ++ lo sigo viendo como UTF-8, pero descargue otro programa para leer archivos planos EditPad Lite 7 y en este si me muestra como WINDOS 1256

NOTE PAD ++


Con EditPad Lite 7



Por el momento estoy trabajando con estos cambios.

Gracias a todos por su ayuda.

Saludos cordiales,

José Luis
LIMA-PERU
Reply all
Reply to author
Forward
0 new messages