FW_SetUnicode mostrar valor GET con FWINLOG

FW_SetUnicode mostrar valor GET con FWINLOG

Postby VictorCasajuana » Thu Jan 14, 2021 2:57 pm

Hola.
Estoy haciendo unas pruebas con FW_SetUnicode(.T.) y he observado un comportamiento extraño, supongo que me estoy dejando algo porque el tema del unicode, utf8, etc... siempre me ha traído de cabeza y ahora quiero unificar conceptos y que me quede claro.

He echo esta prueba:
Code: Select all  Expand view  RUN

#include 'fivewin.ch'

Function Main()

    Local oDlg
    Local cVar := 'ñ Ñ a á à ä â A Á À Ä Â e é è ë ê E É È Ë Ê i í ì ï î I Í Ì Ï Î o ó ò ö ô O Ó Ò Ö Ô u ú ù ü û U Ú Ù Ü Û'
    Local cGet := cVar
    Local oBtnBmp

    FW_SetUnicode( .T. )
   
    FWINLOG cVar

    DEFINE DIALOG oDlg;
           Resource "dialogo2";
           Title cVar

    Redefine Get oGet;
             Var cGet;
             Id 4004;
             Of oDlg

    oGet:cToolTip := cVar            

    Redefine ButtonBmp oBtnBmp ;
             Id 4003 Of oDlg;
             Prompt cVar ;    
             ToolTip cVar

    oBtnBmp:bAction := <||
                            FWINLOG cVar
                            MsgInfo(cVar)
                            Return Nil
                       >

    ACTIVATE DIALOG oDlg CENTER

Return ( Nil )
 


el dialogo2 es el siguiente:
Code: Select all  Expand view  RUN

// RESOURCE SCRIPT generated by "Pelles C for Windows, version 10.00".

#include <windows.h>
#include <commctrl.h>
#include <richedit.h>

LANGUAGE LANG_NEUTRAL,SUBLANG_NEUTRAL

dialogo DIALOG DISCARDABLE 14, 40, 330, 64
STYLE WS_POPUP|DS_MODALFRAME|DS_CONTEXTHELP|WS_THICKFRAME|WS_CAPTION|WS_SYSMENU|WS_MINIMIZEBOX|WS_MAXIMIZEBOX|WS_CLIPSIBLINGS|WS_CLIPCHILDREN|WS_VISIBLE
EXSTYLE WS_EX_TRANSPARENT|WS_EX_CONTEXTHELP
CAPTION "Dialogo"
FONT 10, "Segoe UI Light"
{
  CONTROL "Edit", 4004, "Edit", ES_AUTOHSCROLL|WS_BORDER|WS_TABSTOP, 8, 4, 316, 12
  CONTROL "ñ Ñ a á à ä â A Á À Ä Â e é è ë ê E É È Ë Ê i í ì ï î I Í Ì Ï Î o ó ò ö ô O Ó Ò Ö Ô u ú ù ü û U Ú Ù Ü Û", 4001, "Static", WS_GROUP, 8, 20, 320, 8
  CONTROL "", 4002, "Static", WS_GROUP, 8, 32, 320, 8
  CONTROL "Button", 4003, "Button", WS_TABSTOP, 8, 44, 316, 14
}

dialogo2 DIALOG DISCARDABLE 14, 40, 330, 36
STYLE WS_POPUP|DS_MODALFRAME|DS_CONTEXTHELP|WS_THICKFRAME|WS_CAPTION|WS_SYSMENU|WS_MINIMIZEBOX|WS_MAXIMIZEBOX|WS_CLIPSIBLINGS|WS_CLIPCHILDREN|WS_VISIBLE
EXSTYLE WS_EX_TRANSPARENT|WS_EX_CONTEXTHELP
CAPTION "Dialogo"
FONT 10, "Segoe UI Light"
{
  CONTROL "Edit", 4004, "Edit", ES_AUTOHSCROLL|WS_BORDER|WS_TABSTOP, 8, 4, 316, 12
  CONTROL "Button", 4003, "Button", WS_TABSTOP, 8, 20, 316, 14
}
 


En principio todo se muestra bien, pero cuando pulso el botón para ver el contenido de la variable, el MsgInfo() me lo muestra correctamente, pero FWINLOG no, y justamente el comportamiento que me hace FWINLOG es lo que me está ocurriendo en algunos apartados de mi aplicación.

Image

He probado lo mismo con \samples\unicode.prg y ahí funciona bien, pero revisando el código lo único que se aplica es FW_SetUnicode( .T. ) igual que yo.

Alguna idea de lo que puede estar pasando?

Gracias y Salud!
--------
¿ Y porque no ?
¿ And why not ?
User avatar
VictorCasajuana
 
Posts: 265
Joined: Wed Mar 28, 2018 4:38 pm
Location: Vinaròs

Re: FW_SetUnicode mostrar valor GET con FWINLOG

Postby cnavarro » Mon Jan 18, 2021 5:22 am

Victor, prueba poniéndole un FONT adecuado al Dialog ( no es perfecto pero casi )
Prueba varias veces a pulsar sobre el boton
Code: Select all  Expand view  RUN

    DEFINE FONT oFont NAME "Calibri" SIZE 0, -12

    cVar := 'ñ Ñ a á à ä â A Á À Ä Â e é è ë ê E É È Ë Ê i í ì ï î I Í Ì Ï Î o ó ò ö ô O Ó Ò Ö Ô u ú ù ü û U Ú Ù Ü Û'  
    cGet := cVar
    FWINLOG cVar

    DEFINE DIALOG oDlg;
           Resource "dialogo2";
           Title cVar FONT oFont

.../...
 
Cristobal Navarro
Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noción del tiempo
El secreto de la felicidad no está en hacer lo que te gusta, sino en que te guste lo que haces
User avatar
cnavarro
 
Posts: 6549
Joined: Wed Feb 15, 2012 8:25 pm
Location: España

Re: FW_SetUnicode mostrar valor GET con FWINLOG

Postby VictorCasajuana » Thu Jan 21, 2021 9:51 pm

Gracias Cristóbal.

El comportamiento es el mismo añadiendo un FONT al diálogo, ya que el diálogo y el MsgInfo() posterior se muestran bien, lo que se muestra mal es la salida al FWINLOG. Lo más curioso es que solamente se muestra mal la primera vez que se muestra la salida en el FWINLOG, el resto de veces que pulso el botón se muestra bien, y es exactamente los mismo...
Estoy intentando hacer una prueba para introducir y ver correctamente los caracteres con acentos y Ñ, y posteriormente guardarlo y leerlo todo en MySql ya que siempre ha sido un caballo de batalla para mí. Por este motivo quiero hacer una pequeña prueba que lo haga todo correcto, mostrar e introducir textos con acentos y Ñ, grabarlos y leerlos a MySql y que no se convierta ninguna letra a símbolos extraños pero de momento me he parado aquí con el FWNILOG, ya que este comportamiento es el que me hace justamente "a veces" cuando guardo/leo los datos en MySql.
Si ejecutas este ejemplo el comportamiento de FWINLOG te hace lo mismo?
Image
--------
¿ Y porque no ?
¿ And why not ?
User avatar
VictorCasajuana
 
Posts: 265
Joined: Wed Mar 28, 2018 4:38 pm
Location: Vinaròs

Re: FW_SetUnicode mostrar valor GET con FWINLOG

Postby cnavarro » Thu Jan 21, 2021 10:39 pm

Lo raro es que la primera vez sale mal pero las siguientes veces aparece correctamente. Le echaré un vistazo a ver si veo por qué
Image
Cristobal Navarro
Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noción del tiempo
El secreto de la felicidad no está en hacer lo que te gusta, sino en que te guste lo que haces
User avatar
cnavarro
 
Posts: 6549
Joined: Wed Feb 15, 2012 8:25 pm
Location: España

Re: FW_SetUnicode mostrar valor GET con FWINLOG

Postby VictorCasajuana » Fri Jan 22, 2021 12:51 pm

Gracias Cristobal.

Es lo que me ha extrañado a mí, si algo funciona mal tendría que ser siempre, yo continúo trabajando en esta prueba para coordinar bien el tema del codepage en todos los aspectos del programa. Si llego a buen puerto la publicaré en este post también.

Por cierto, vaya log chulo, este tiene muchas más opciones. Lo has echo tú o viene en la última versión de FW?

Salud!
--------
¿ Y porque no ?
¿ And why not ?
User avatar
VictorCasajuana
 
Posts: 265
Joined: Wed Mar 28, 2018 4:38 pm
Location: Vinaròs

Re: FW_SetUnicode mostrar valor GET con FWINLOG

Postby cnavarro » Fri Jan 22, 2021 1:12 pm

Grax
Si, este es el mismo que hice y que has mostrado tú pero con algunas mejoras, a ver si incluyo en Fw estas mejoras también.
Cristobal Navarro
Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noción del tiempo
El secreto de la felicidad no está en hacer lo que te gusta, sino en que te guste lo que haces
User avatar
cnavarro
 
Posts: 6549
Joined: Wed Feb 15, 2012 8:25 pm
Location: España

Re: FW_SetUnicode mostrar valor GET con FWINLOG

Postby VictorCasajuana » Fri Jan 22, 2021 3:38 pm

Continuando con mi periplo

He extendido la prueba que estoy haciendo para cerrar el círculo de los caracteres especiales, ahora creo un fichero y lo leo posteriormente, todo bien. Pero cuando creo una BD en SQL tiene el mismo comportamiento que se ve en la primera pulsación del log, lo guarda todo mal; comentarios de la tabla, de los campos y contenido de la tabla. En cambio si lo leo se muestra bien por pantalla.
Estoy utilizando FW_SetUnicode(), lo he probado en .T. y .F. y el comportamiento es el mismo, bueno en .F. se muestra todo mal hasta por pantalla.

Supongo que será "algo" que me estoy dejando de configurar en el lenguaje que utilizo, pero no se dar en la tecla.

Alguna idea por donde tirar?

pongo aquí el código, recurso que utilizo y resultado que me muestra.

Gracias y Salud!

Code: Select all  Expand view  RUN

#include 'fivewin.ch'

#DEFINE NOMBRE_FICHERO 'fichero.txt'
#DEFINE COLLATION 'utf8_spanish_ci'

Function Main()

    Local oDlg
    Local cVar := 'ñ Ñ a á à ä â A Á À Ä Â e é è ë ê E É È Ë Ê i í ì ï î I Í Ì Ï Î o ó ò ö ô O Ó Ò Ö Ô u ú ù ü û U Ú Ù Ü Û'
    Local cGet := cVar
    Local oBtnBmp
    Local oBtnCrearFichero
    Local oBtnMsgFichero
    Local oBtnEditFichero
    Local cTexto := ''
    Local oBtnCreaSql

    FW_SetUnicode( .T. )
   
    FWINLOG cVar

    DEFINE DIALOG oDlg;
           Resource "dialogo2";
           Title cVar


    Redefine Get oGet;
             Var cGet;
             Id 4004;
             Of oDlg
    oGet:cToolTip := cVar            



    Redefine ButtonBmp oBtnBmp ;
             Id 4003 Of oDlg;
             Prompt cVar ;    
             ToolTip cVar
    oBtnBmp:bAction := <||
                            FWINLOG cVar
                            MsgInfo(cVar)
                            Return Nil
                       >



    Redefine ButtonBmp oBtnCrearFichero ;
             Id 4002 Of oDlg
    oBtnCrearFichero:bAction := <||
                            GuardaFichero( cVar )
                            Return Nil
                           >



    Redefine ButtonBmp oBtnMsgFichero ;
             Id 4001 Of oDlg
    oBtnMsgFichero:bAction := <||
                            MsgInfo( hb_Memoread( NOMBRE_FICHERO ) )
                            Return Nil
                           >



    Redefine ButtonBmp oBtnEditFichero ;
             Id 4005 Of oDlg
    oBtnEditFichero:bAction := <||
                            cTexto := hb_Memoread( NOMBRE_FICHERO )
                            If MemoEdit( @cTexto, NOMBRE_FICHERO )
                                GuardaFichero( cTexto )
                            Endif
                            Return Nil
                           >



    Redefine ButtonBmp oBtnCreaSql ;
             Id 4006 Of oDlg
    oBtnCreaSql:bAction := <||
                            CreaSQL( cVar )
                            Return Nil
                           >



    Redefine ButtonBmp oBtnLeeSql ;
             Id 4007 Of oDlg
    oBtnLeeSql:bAction := <||
                            LeeSQL( )
                            Return Nil
                           >
   
   
                           

    ACTIVATE DIALOG oDlg CENTER

Return ( Nil )

Static Function GuardaFichero( cContenido )

    If hb_MemoWrit( NOMBRE_FICHERO, cContenido )
        MsgInfo( NOMBRE_FICHERO + ' Creado')
    Else
        MsgStop('No se ha creado ' + NOMBRE_FICHERO)
    Endif

Return ( Nil )


Static Function CreaSql( cVar )

    Local oSql
    Local cQuery := ''

    oSQL := TMySQLServer():New( 'localhost', 'root', , 3306 )
    MuestraErrorSql( oSql )

    oSql:Query( 'DROP DATABASE IF EXISTS test' )
    MuestraErrorSql( oSql )

    oSql:Query( 'CREATE DATABASE test COLLATE ' + COLLATION )
    MuestraErrorSql( oSql )

    TEXT INTO cQuery
    CREATE TABLE `test`.`tabla` (
        `codigo` VARCHAR( 10) NOT NULL DEFAULT '' COMMENT 'Código',
        `texto`  VARCHAR(255) NOT NULL DEFAULT '' COMMENT 'Texto con eñes y acentos'
        )
        COMMENT='Test con caracteres especiales: {{cvar}}'
        COLLATE={{collate}}
        ENGINE=InnoDB;
    ENDTEXT
    cQuery := StrTran( cQuery, '{{collate}}', COLLATION )
    cQuery := StrTran( cQuery, '{{cvar}}', cVar )
    oSql:Query( cQuery )
    MuestraErrorSql( oSql )

    TEXT INTO cQuery
    INSERT INTO `test`.`tabla` (`codigo`, `texto`)
    VALUES ('1', '{{cvar}}');
    ENDTEXT
    cQuery := StrTran( cQuery, '{{cvar}}', cVar )
    oSql:Query( cQuery )
    MuestraErrorSql( oSql )

    oSql:End()

Return Nil


Static Function LeeSql()

    Local oSql
    Local cQuery := ''
    Local oSelect
    Local aResultado := {}

    oSQL := TMySQLServer():New( 'localhost', 'root', , 3306 )
    MuestraErrorSql( oSql )

    oSelect := oSQL:Query('SELECT * FROM `test`.`tabla`')
    MuestraErrorSql( oSql )
    oSelect:Bof()
    While !oSelect:Eof()

        aAdD( aResultado, oSelect:GetRow():aRow )

        oSelect:Skip()

    Enddo
    oSql:End()

    xBrowse( aResultado )

Return ( Nil )

Static Function MuestraErrorSql( oSql )

    If oSql:NetErr()
        FWINLOG oSql:error()
    Endif

Return Nil
 


Code: Select all  Expand view  RUN

// RESOURCE SCRIPT generated by "Pelles C for Windows, version 10.00".

#include <windows.h>
#include <commctrl.h>
#include <richedit.h>

LANGUAGE LANG_NEUTRAL,SUBLANG_NEUTRAL

DIALOGO2 DIALOG DISCARDABLE 14, 40, 330, 68
STYLE WS_POPUP|DS_MODALFRAME|DS_CONTEXTHELP|WS_THICKFRAME|WS_CAPTION|WS_SYSMENU|WS_MINIMIZEBOX|WS_MAXIMIZEBOX|WS_CLIPSIBLINGS|WS_CLIPCHILDREN|WS_VISIBLE
EXSTYLE WS_EX_TRANSPARENT|WS_EX_CONTEXTHELP
CAPTION "Dialogo"
FONT 10, "Segoe UI Light"
{
  CONTROL "Edit", 4004, "Edit", ES_AUTOHSCROLL|WS_BORDER|WS_TABSTOP, 8, 4, 316, 12
  CONTROL "Button", 4003, "Button", WS_TABSTOP, 8, 20, 316, 14
  CONTROL "Ver fichero .txt", 4001, "Button", WS_TABSTOP, 100, 36, 88, 14
  CONTROL "Crear fichero .txt", 4002, "Button", WS_TABSTOP, 8, 36, 88, 14
  CONTROL "Editar fichero .txt", 4005, "Button", WS_TABSTOP, 192, 36, 88, 14
  CONTROL "Crea SQL", 4006, "Button", WS_TABSTOP, 8, 52, 88, 14
  CONTROL "Lee SQL", 4007, "Button", WS_TABSTOP, 100, 52, 88, 14
}
 


Image
--------
¿ Y porque no ?
¿ And why not ?
User avatar
VictorCasajuana
 
Posts: 265
Joined: Wed Mar 28, 2018 4:38 pm
Location: Vinaròs

Re: FW_SetUnicode mostrar valor GET con FWINLOG

Postby nageswaragunupudi » Fri Jan 22, 2021 6:45 pm

I am not sure if I understood the issue correctly.

This is what I understood: The issue seems to be that while MsgInfo() displays Unicode text correctly, FWLOG does not write Unicode text correctly to the log file.

If this is the issue, I would like to assure that FWH displays Unicode text correctly and also the command FWLOG writes the Unicode text correctly. Please make sure that the application used to view the log file supports Unicode.

In this example, I used complex Unicode (utf8) text using three different languages, Telugu, Hindi and Chinese and this text is displayed correctly as well as written to log file correctly. This log file text is viewed both by FW_MEMOEDIT and also NOTEPAD.EXE.

Code: Select all  Expand view  RUN
#include "fivewin.ch"

function Main()

   local cVar     := Space( 120 )
   local cLogFile := cFileSetExt( ExeName(), "log" )
   local cLogText := ""
   local oDlg, oGet, oBtn, oFont

   FW_SetUnicode( .t. )
   FErase( cLogFile )

   DEFINE FONT oFont NAME "TAHOMA" SIZE 0,-16
   DEFINE DIALOG oDlg SIZE 600,600 PIXEL TRUEPIXEL FONT oFont

   @  20,20 GET cVar SIZE 560,28 PIXEL OF oDlg
   @  80,20 BUTTON oBtn PROMPT "SHOW" SIZE 150,40 PIXEL OF oDlg
   oBtn:bAction := <||
      FWLOG Trim( cVar )
      cLogText := MEMOREAD( cLogFile )
      oGet:Refresh()
      MsgInfo( Trm( cVar ) )
      return nil
      >

   @ 140,20 GET oGet VAR cLogText MEMO SIZE 560,400 PIXEL OF oDlg

   ACTIVATE DIALOG oDlg CENTERED
   RELEASE FONT oFont

   if File( cLogFile )
      WinExec(  "notepad.exe " + cLogFile )
   endif

return nil
 


Image

FWH library works perfectly with Unicode in all respects and there is no need for any modifications.

In my next post I will address the issue of writing to MySql database.
Regards

G. N. Rao.
Hyderabad, India
User avatar
nageswaragunupudi
 
Posts: 10662
Joined: Sun Nov 19, 2006 5:22 am
Location: India

Re: FW_SetUnicode mostrar valor GET con FWINLOG

Postby cnavarro » Fri Jan 22, 2021 7:08 pm

Look this sample
Image
Cristobal Navarro
Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noción del tiempo
El secreto de la felicidad no está en hacer lo que te gusta, sino en que te guste lo que haces
User avatar
cnavarro
 
Posts: 6549
Joined: Wed Feb 15, 2012 8:25 pm
Location: España

Re: FW_SetUnicode mostrar valor GET con FWINLOG

Postby nageswaragunupudi » Sat Jan 23, 2021 2:42 am

"Type" command in DOS window does not show Unicode characters.
Please use notepad.exe.
Please use any application that supports Unicode to view the logfile.
Regards

G. N. Rao.
Hyderabad, India
User avatar
nageswaragunupudi
 
Posts: 10662
Joined: Sun Nov 19, 2006 5:22 am
Location: India

Re: FW_SetUnicode mostrar valor GET con FWINLOG

Postby VictorCasajuana » Sat Jan 23, 2021 7:04 am

nageswaragunupudi wrote:I am not sure if I understood the issue correctly.

This is what I understood: The issue seems to be that while MsgInfo() displays Unicode text correctly, FWLOG does not write Unicode text correctly to the log file.

If this is the issue, I would like to assure that FWH displays Unicode text correctly and also the command FWLOG writes the Unicode text correctly. Please make sure that the application used to view the log file supports Unicode.

In this example, I used complex Unicode (utf8) text using three different languages, Telugu, Hindi and Chinese and this text is displayed correctly as well as written to log file correctly. This log file text is viewed both by FW_MEMOEDIT and also NOTEPAD.EXE.

FWH library works perfectly with Unicode in all respects and there is no need for any modifications.

In my next post I will address the issue of writing to MySql database.


Thanks for the response.

Yes, FWH works fine with Unicode, but I see in FWINLOG command that the first output shows wrong characters but the next show good... In my second test, I write to SQL table but it don't write correctly

cnavarro wrote:Look this sample


Thanks Cristobal, I think that Type shows it in "raw"
--------
¿ Y porque no ?
¿ And why not ?
User avatar
VictorCasajuana
 
Posts: 265
Joined: Wed Mar 28, 2018 4:38 pm
Location: Vinaròs

Re: FW_SetUnicode mostrar valor GET con FWINLOG

Postby nageswaragunupudi » Sat Jan 23, 2021 9:25 am

I do not know the command FWINLOG.
FWH provides the command FWLOG, which works the first time and all the times, as you can test with my sample.
Regards

G. N. Rao.
Hyderabad, India
User avatar
nageswaragunupudi
 
Posts: 10662
Joined: Sun Nov 19, 2006 5:22 am
Location: India

Re: FW_SetUnicode mostrar valor GET con FWINLOG

Postby cnavarro » Sat Jan 23, 2021 11:19 am

nageswaragunupudi wrote:I do not know the command FWINLOG.
FWH provides the command FWLOG, which works the first time and all the times, as you can test with my sample.


Esta function la desarrollé y la incluí en Fivewin en 2017
This function was developed and included in Fivewin in 2017

viewtopic.php?f=16&t=35267&p=209856&hilit=FWINLOG#p209856

Please, look windows.prg and fivewin.ch
Cristobal Navarro
Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noción del tiempo
El secreto de la felicidad no está en hacer lo que te gusta, sino en que te guste lo que haces
User avatar
cnavarro
 
Posts: 6549
Joined: Wed Feb 15, 2012 8:25 pm
Location: España

Re: FW_SetUnicode mostrar valor GET con FWINLOG

Postby cnavarro » Sat Jan 23, 2021 11:39 am

Look
Image
Cristobal Navarro
Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noción del tiempo
El secreto de la felicidad no está en hacer lo que te gusta, sino en que te guste lo que haces
User avatar
cnavarro
 
Posts: 6549
Joined: Wed Feb 15, 2012 8:25 pm
Location: España

Re: FW_SetUnicode mostrar valor GET con FWINLOG

Postby nageswaragunupudi » Sat Jan 23, 2021 2:57 pm

cnavarro wrote:
nageswaragunupudi wrote:I do not know the command FWINLOG.
FWH provides the command FWLOG, which works the first time and all the times, as you can test with my sample.


Esta function la desarrollé y la incluí en Fivewin en 2017
This function was developed and included in Fivewin in 2017

viewtopic.php?f=16&t=35267&p=209856&hilit=FWINLOG#p209856

Please, look windows.prg and fivewin.ch


My apologies to both of you for not remembering this.
Let me have a relook.
Regards

G. N. Rao.
Hyderabad, India
User avatar
nageswaragunupudi
 
Posts: 10662
Joined: Sun Nov 19, 2006 5:22 am
Location: India

Next

Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: No registered users and 76 guests