PICTURE "@!"

PICTURE "@!"

Postby Andrés González » Sun Mar 02, 2008 7:56 am

Alguien sabe a que se debe que cuando utilizo la sentencia picture en un get del tipo PICTURE "@!" osea que me tome en mayusculas cuando coge una ñ me la pone en minusculas y tengo que pulsar el Shift para que la ponga en Ñ.
Problema del Harbour o Fivewin... todo el resto de letras me lo toma correcto, todas en mayusculas pero no en este caso.

Alguien conoce una solucion...
Saludos

Andrés González desde Mallorca
User avatar
Andrés González
 
Posts: 629
Joined: Thu Jan 19, 2006 10:45 am
Location: Mallorca

Postby Kleyber » Sun Mar 02, 2008 12:16 pm

Hola Andres,


Realmente es muy extraño este comportamiento, pero lo que hago es en Resource Workshop, en la propriedad del get, lo pongo como UPPER CASE y listo.

Si alguna persona pueda darnos la solución desde codigo, seria buenissimo.

Saludos,
Kleyber Derick

FWH / xHb / xDevStudio / SQLLIB
User avatar
Kleyber
 
Posts: 581
Joined: Tue Oct 11, 2005 11:28 am
Location: São Luiz, Brasil

Postby ARCC » Sun Mar 02, 2008 9:29 pm

Buen día para todos...

Prueba colocando el siguiente código en la clase TGet en el método KeyChar despues de declaraciones LOCAL y antes de cualquier otra linea de código. Ejemplo

KeyChar( nKey, nFlags ) CLASS TGet

LOCAL .........
LOCAL .........

if !Empty( ::cPicture ) .and. '@!' $ ::cPicture
nKey := Asc( UpperCase( Chr( nKey ) ) )
endif

...............
...............
Resto de código del método.

Nota: Deberás compilar y enlazar la clase TGet con los cambio mencionados en tu aplicación para que tome el cambio. Esta modificacion tambien toma los signos de puntuación en mayúsculas. Ej. Á É Í Ó Ú
Saludos,

Antonio Castro
Maracaibo - Venezuela
ant_cas@yahoo.com
ARCC
 
Posts: 86
Joined: Sat Jun 24, 2006 4:27 pm
Location: Maracaibo - Zulia - Venezuela

Postby Andrés González » Mon Mar 03, 2008 9:33 am

La sentencia que indicas ya viene incluida en la clase y justamente en el lugar que indicas, por lo que me temo que no es eso la solucion....

Gracias
Saludos

Andrés González desde Mallorca
User avatar
Andrés González
 
Posts: 629
Joined: Thu Jan 19, 2006 10:45 am
Location: Mallorca

Postby Andrés González » Mon Mar 03, 2008 9:59 am

Un poco basto pero funciona, el problema es que realizas una comparacion mas por cada pulsacion. Supongo que el error debe de estar en la funcion Upper que no realiza el trabajo bien.

Code: Select all  Expand view  RUN
if ! Empty( ::cPicture ) .and. '@!' $ ::cPicture
        if chr( nKey ) = "ñ"
            nKey = 209    //Ñ en mayusculas
        else
              nKey = Asc( Upper( Chr( nKey ) ) )
        end
   endif
Saludos

Andrés González desde Mallorca
User avatar
Andrés González
 
Posts: 629
Joined: Thu Jan 19, 2006 10:45 am
Location: Mallorca

Postby Antonio Linares » Mon Mar 03, 2008 10:20 am

Andrés,

Incluido para el próximo build, gracias!
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 42118
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Postby FiveWiDi » Mon Mar 03, 2008 11:02 am

Andrés González wrote:Un poco basto pero funciona, el problema es que realizas una comparacion mas por cada pulsacion. Supongo que el error debe de estar en la funcion Upper que no realiza el trabajo bien.

Code: Select all  Expand view  RUN
if ! Empty( ::cPicture ) .and. '@!' $ ::cPicture
        if chr( nKey ) = "ñ"
            nKey = 209    //Ñ en mayusculas
        else
              nKey = Asc( Upper( Chr( nKey ) ) )
        end
   endif


Ya puestos a hacer:

If ! Empty( ::cPicture ) .and. '@!' $ ::cPicture
If chr( nKey ) $ "ñç"
if chr( nKey ) = "ñ"
nKey = 209 //Ñ en mayusculas
elseif chr( nKey ) = "ç"
nKey = ??? //Ç en mayusculas ¿Alguién sabe este código?
EndIf
EndIf
Else
nKey = Asc( Upper( Chr( nKey ) ) )
Endif


Saludos
Carlos G.
FiveWiDi
 
Posts: 1190
Joined: Mon Oct 10, 2005 2:38 pm

Postby Manuel Valdenebro » Mon Mar 03, 2008 11:38 am

Creo que debe ser otra cosa. Yo uso la clase Tget sin modificar esa parte y me funciona sin problemas.
Un saludo

Manuel
User avatar
Manuel Valdenebro
 
Posts: 706
Joined: Thu Oct 06, 2005 9:57 pm
Location: Málaga-España

Postby Andrés González » Mon Mar 03, 2008 1:01 pm

Sí Manuel tienes razón, seguro que corresponde a otro procedimiento el asignar el tema de las mayúsculas por eso he hecho la refexión que el tema esta a la hora de transformar los códigos en el procedimiento UPPER no se si el tema va de la tabla ascii o que, pero bueno con esto se soluciona desde fivewin. Supongo que el tema del upper viene del harbour y que debe ser ahí donde se solucione.

Efectivamente también hace falta la ç, sobre todo aquellos que como yo vivimos en regiones de dominio del catalán. No usan la ñ (ny) pero si la ç.
Saludos

Andrés González desde Mallorca
User avatar
Andrés González
 
Posts: 629
Joined: Thu Jan 19, 2006 10:45 am
Location: Mallorca

Postby ARCC » Mon Mar 03, 2008 3:00 pm

Buen día para todos...

Andrés González wrote:La sentencia que indicas ya viene incluida en la clase y justamente en el lugar que indicas, por lo que me temo que no es eso la solucion....

Gracias


Fe de errata, el problema es la funcion Upper y se resuelve con este código que se me olvidó colocar en mi post anterior. fijate lo que coloque antes y veras la función UpperCase(), lo que se me olvidó es este código colocalo al final de la clase y listo. Disculpa que pasé por alto esto.

DLL32 STATIC Function UpperCase(cStr AS STRING) AS STRING PASCAL;
FROM "CharUpperA" LIB "user32.dll"

Nota: Por favor utilizalo y me comentas.
Saludos,

Antonio Castro
Maracaibo - Venezuela
ant_cas@yahoo.com
ARCC
 
Posts: 86
Joined: Sat Jun 24, 2006 4:27 pm
Location: Maracaibo - Zulia - Venezuela

Postby FiveWiDi » Mon Mar 03, 2008 6:56 pm

ARCC wrote:Buen día para todos...

Andrés González wrote:La sentencia que indicas ya viene incluida en la clase y justamente en el lugar que indicas, por lo que me temo que no es eso la solucion....

Gracias


Fe de errata, el problema es la funcion Upper y se resuelve con este código que se me olvidó colocar en mi post anterior. fijate lo que coloque antes y veras la función UpperCase(), lo que se me olvidó es este código colocalo al final de la clase y listo. Disculpa que pasé por alto esto.

DLL32 STATIC Function UpperCase(cStr AS STRING) AS STRING PASCAL;
FROM "CharUpperA" LIB "user32.dll"

Nota: Por favor utilizalo y me comentas.


A mi me da en los huesos que debe ser cosa de Harbour.
El error se da también en FiveLinux y/o FWPPC? Si es así la solución sólo vale para nuestro FiveWin y entonces se pierde la compatibilidad con los otros entornos.

Cierto? Cómo lo ven?

Saludos
Carlos G.
FiveWiDi
 
Posts: 1190
Joined: Mon Oct 10, 2005 2:38 pm

Postby Antonio Linares » Mon Mar 03, 2008 7:03 pm

Así funciona correctamente:
Code: Select all  Expand view  RUN
REQUEST HB_Lang_ES
REQUEST HB_CODEPAGE_ESWIN

function Main()

   HB_LangSelect("ES") // Para mensajes, fechas, etc..
   HB_SetCodePage("ESWIN") // Para ordenación, requiere CodePage.lib

   MsgInfo( Upper( "ñ" ) )

return nil
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 42118
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Postby Antonio Linares » Mon Mar 03, 2008 7:06 pm

Ojo, aqui funciona bien con Harbour pero NO con xHarbour
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 42118
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Postby ARCC » Mon Mar 03, 2008 8:50 pm

Buen día para todos...

Antonio Linares wrote:Ojo, aqui funciona bien con Harbour pero NO con xHarbour


Antonio:

Si tienes razón en xHarbour no funciona y el problema con la clase tGet es muy viejo, yo saqué esa función UpperCase la cual uso desde FWH 2.4, por favor prueba tu mismo ejemplo con la función UpperCase en FWH y FWxH funciona de maravilla.

#include "FiveWin.ch"

REQUEST HB_Lang_ES
REQUEST HB_CODEPAGE_ESWIN

function Main()

HB_LangSelect("ES") // Para mensajes, fechas, etc..
HB_SetCodePage("ESWIN") // Para ordenación, requiere CodePage.lib

MsgInfo( Upper( "ñ" ) )
MsgInfo( UpperCase( "ñ" ) )

return nil

DLL32 STATIC Function UpperCase(cStr AS STRING) AS STRING PASCAL;
FROM "CharUpperA" LIB "user32.dll"
Saludos,

Antonio Castro
Maracaibo - Venezuela
ant_cas@yahoo.com
ARCC
 
Posts: 86
Joined: Sat Jun 24, 2006 4:27 pm
Location: Maracaibo - Zulia - Venezuela

Postby Antonio Linares » Mon Mar 03, 2008 11:10 pm

Antonio,

Totalmente de acuerdo. Hemos cambiado Upper() por UpperCase(). Gracias!

Visto que xHarbour no lo hace bien, y que además hay diferencia con Harbour, lo idóneo es usar la propia función del API de Windows.
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 42118
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Next

Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: lubin and 94 guests