Page 1 of 2

FW_SetUnicode mostrar valor GET con FWINLOG

Posted: Thu Jan 14, 2021 2:57 pm
by VictorCasajuana
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

#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

// 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!

Re: FW_SetUnicode mostrar valor GET con FWINLOG

Posted: Mon Jan 18, 2021 5:22 am
by cnavarro
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

    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

.../...
 

Re: FW_SetUnicode mostrar valor GET con FWINLOG

Posted: Thu Jan 21, 2021 9:51 pm
by VictorCasajuana
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 _ 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

Re: FW_SetUnicode mostrar valor GET con FWINLOG

Posted: Thu Jan 21, 2021 10:39 pm
by cnavarro
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

Re: FW_SetUnicode mostrar valor GET con FWINLOG

Posted: Fri Jan 22, 2021 12:51 pm
by VictorCasajuana
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!

Re: FW_SetUnicode mostrar valor GET con FWINLOG

Posted: Fri Jan 22, 2021 1:12 pm
by cnavarro
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.

Re: FW_SetUnicode mostrar valor GET con FWINLOG

Posted: Fri Jan 22, 2021 3:38 pm
by VictorCasajuana
Continuando con mi periplo

He extendido la prueba que estoy haciendo para cerrar el círculo de _ 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 _ 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

#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

// 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

Re: FW_SetUnicode mostrar valor GET con FWINLOG

Posted: Fri Jan 22, 2021 6:45 pm
by nageswaragunupudi
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

#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.

Re: FW_SetUnicode mostrar valor GET con FWINLOG

Posted: Fri Jan 22, 2021 7:08 pm
by cnavarro
Look this sample
Image

Re: FW_SetUnicode mostrar valor GET con FWINLOG

Posted: Sat Jan 23, 2021 2:42 am
by nageswaragunupudi
"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.

Re: FW_SetUnicode mostrar valor GET con FWINLOG

Posted: Sat Jan 23, 2021 7:04 am
by VictorCasajuana
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"

Re: FW_SetUnicode mostrar valor GET con FWINLOG

Posted: Sat Jan 23, 2021 9:25 am
by nageswaragunupudi
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.

Re: FW_SetUnicode mostrar valor GET con FWINLOG

Posted: Sat Jan 23, 2021 11:19 am
by cnavarro
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

http://forums.fivetechsupport.com/viewt ... OG#p209856

Please, look windows.prg and fivewin.ch

Re: FW_SetUnicode mostrar valor GET con FWINLOG

Posted: Sat Jan 23, 2021 11:39 am
by cnavarro
Look
Image

Re: FW_SetUnicode mostrar valor GET con FWINLOG

Posted: Sat Jan 23, 2021 2:57 pm
by nageswaragunupudi
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

http://forums.fivetechsupport.com/viewt ... OG#p209856

Please, look windows.prg and fivewin.ch
My apologies to both of you for not remembering this.
Let me have a relook.