PICTURE "@!"

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

PICTURE "@!"

Post by Andrés González »

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
Kleyber
Posts: 581
Joined: Tue Oct 11, 2005 11:28 am
Location: São Luiz, Brasil

Post by Kleyber »

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
ARCC
Posts: 86
Joined: Sat Jun 24, 2006 4:27 pm
Location: Maracaibo - Zulia - Venezuela
Contact:

Post by ARCC »

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 _ 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
User avatar
Andrés González
Posts: 625
Joined: Thu Jan 19, 2006 10:45 am
Location: Mallorca

Post by Andrés González »

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: 625
Joined: Thu Jan 19, 2006 10:45 am
Location: Mallorca

Post by Andrés González »

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

 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
Antonio Linares
Site Admin
Posts: 37481
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Contact:

Post by Antonio Linares »

Andrés,

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

Antonio Linares
www.fivetechsoft.com
FiveWiDi
Posts: 910
Joined: Mon Oct 10, 2005 2:38 pm

Post by FiveWiDi »

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

 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.
User avatar
Manuel Valdenebro
Posts: 706
Joined: Thu Oct 06, 2005 9:57 pm
Location: Málaga-España

Post by Manuel Valdenebro »

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
Andrés González
Posts: 625
Joined: Thu Jan 19, 2006 10:45 am
Location: Mallorca

Post by Andrés González »

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
ARCC
Posts: 86
Joined: Sat Jun 24, 2006 4:27 pm
Location: Maracaibo - Zulia - Venezuela
Contact:

Post by ARCC »

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
FiveWiDi
Posts: 910
Joined: Mon Oct 10, 2005 2:38 pm

Post by FiveWiDi »

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.
User avatar
Antonio Linares
Site Admin
Posts: 37481
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Contact:

Post by Antonio Linares »

Así funciona correctamente:

Code: Select all

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: 37481
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Contact:

Post by Antonio Linares »

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

Antonio Linares
www.fivetechsoft.com
ARCC
Posts: 86
Joined: Sat Jun 24, 2006 4:27 pm
Location: Maracaibo - Zulia - Venezuela
Contact:

Post by ARCC »

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
User avatar
Antonio Linares
Site Admin
Posts: 37481
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Contact:

Post by Antonio Linares »

Antonio,

Totalmente de acuerdo. _ 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
Post Reply