GET sin longitud con espacios blancos

GET sin longitud con espacios blancos

Postby Xevi » Sun Dec 17, 2017 11:10 pm

El tema que me ocupa ahora... el GET.

Resulta que de antaño, Clipper a la hora de solicitar los datos, se comportó de una forma que con la evolución informática no se corresponde.
Las DBFs se definian los campos Caracter con anchura máxima que íbamos a preveer y eso al guardar los datos de registros ocupaba un espacio innecesario.
Con los cambios (SQL por ejemplo) las bases de datos se definen los campos casi igual, pero al guardar los registros SOLO se guarda el espacio que ocupan los datos introducidos, no el ancho total definido.
Creo que es así, sinó que alguine me corrija.

Bien, la pregunta... FW veo que sigue arrastrando la forma de introducción de datos del antigui GET.
Pero, hay alguna forma de que se comporte de manera que solo se vean los datos que ocupa ese campo???
Por ejemplo...
Si tenemos una variable/campo tipo caracter contenido "Maria"
al hacer un GET, de esa variable me deja cambiar esos datos, si, pero SOLO me va a dejar introducir 5 carácteres. Así pues no puedo cambiar ese valor por "Maria de las Mercedes", ni tan siquiera que el campo de la tabla permita una longitud de 25 caracteres.
Por contra, si la variable la defino con valor "Maria"+Space(20), me dejará escribir i cambiar el contenido hasta los 25 caracteres, hasta ahí correcto... PERO si hago clic en una zona "vacia" a partir del caracter 6, se ve que hay espacios en blanco formando parte de su contenido... y ese efecto es "feo", muy feo.

Image

Cuando veo que después de lo escrito, hay espacios en blanco, pienso en MSDOS y como se trabajava en Clipper. Los programas "modernos" la captura de datos son sin espaciados a la derecha. Cualquier programa en entorno Windows/Mac, incluso los formularios web, al introducir los datos no tienes un campo en blanco de longitud fija que vas rellenando, sinó que a medida que vas escribiendo se va rellenando el contenido, hasta llegar a un límite, o no.

Hay alguna variante, propiedad, clase que se haya desarrollado o que alguien esté utilizando para salvar este comportamiento del GET actual de FW???

Alguna Clase desarrollada por algun tercero, como un TEdit() ???
No se si se podria con el GET MEMO, solo de una línea, con una propiedad de longitud maxima (nMaxLenght)...


Un Saludo,
Xevi.
Un Saludo,
Xevi.

Aprendiz de la vida!!!
User avatar
Xevi
 
Posts: 174
Joined: Wed Nov 29, 2017 11:42 am
Location: Girona

Re: GET sin longitud con espacios blancos

Postby nageswaragunupudi » Mon Dec 18, 2017 7:40 am

TEdit is FWH class. Not 3rd party.

For your requirements, you may use command EDIT instead of GET.

@ row, col EDIT cVar SIZE w,h PIXEL OF oDlg
Regards

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

Re: GET sin longitud con espacios blancos

Postby Xevi » Mon Dec 18, 2017 10:21 am

Guay!!!

Ahora... información para EDIT ???
Estoy buscando en la wiki, y no veo la clase TEdit()

propiedades como longidut máxima (nMaxLenght)
Posicionar el cursor en un caracter determinado SetPos()
Seleccionar parte, nada o todo...

Seguro que está, pero no veo la documentación.

Saludos,
Xevi.
Un Saludo,
Xevi.

Aprendiz de la vida!!!
User avatar
Xevi
 
Posts: 174
Joined: Wed Nov 29, 2017 11:42 am
Location: Girona

Re: GET sin longitud con espacios blancos

Postby Xevi » Mon Dec 18, 2017 10:57 am

He mirado el prg edit.prg de la clase TEdit()...
SetLimitText(n) para limitar la longitud.

@ 300,40 EDIT oEdit VAR cVar SIZE 280,22 PIXEL OF oWnd
oEdit:SetLimitText(30)

Metodos SelectAll()
y otros como SetSel() que deben heredar de TControl.

Iré investigando!!!


Un Saludo,
Xevi.
Un Saludo,
Xevi.

Aprendiz de la vida!!!
User avatar
Xevi
 
Posts: 174
Joined: Wed Nov 29, 2017 11:42 am
Location: Girona

Re: GET sin longitud con espacios blancos

Postby Antonio Linares » Mon Dec 18, 2017 6:47 pm

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

Re: GET sin longitud con espacios blancos

Postby Xevi » Mon Dec 18, 2017 10:29 pm

Gracias, Antonio.

En la lista de Clases no sale y no la encontraba.
http://wiki.fivetechsoft.com/doku.php?i ... eticamente
Ni en el listado de la columna derecha, ni en el de Clase a Clase.
Un Saludo,
Xevi.

Aprendiz de la vida!!!
User avatar
Xevi
 
Posts: 174
Joined: Wed Nov 29, 2017 11:42 am
Location: Girona

Re: GET sin longitud con espacios blancos

Postby Antonio Linares » Tue Dec 19, 2017 4:54 am

Xevi,

La lista no estaba actualizada en el wiki, la acabo de actualizar, gracias :-)

La documentación en el wiki no siempre está actualizada y por eso lo mejor es revisar el código fuente
de la clase como tu muy bien has hecho :-)
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

Re: GET sin longitud con espacios blancos

Postby Xevi » Tue Dec 19, 2017 11:07 am

Estoy buscando y no encuentro como cambiar el color del borde, del fondo... al recibir o dejar el foco

Code: Select all  Expand view  RUN

   @ 340,40 EDIT oEdit VAR cVarEdit SIZE 280,22 PIXEL OF oWnd
   oEdit:SetLimitText(30)
   oEdit:bGotFocus  := {|o| o:SetColor( 255 ) }
   oEdit:bLostFocus := {|o| o:SetColor( 0 ) }
 


Con esto cambio el color de la fuente, pero... como establezco color del Fondo y del borde ???
Un Saludo,
Xevi.

Aprendiz de la vida!!!
User avatar
Xevi
 
Posts: 174
Joined: Wed Nov 29, 2017 11:42 am
Location: Girona

Re: GET sin longitud con espacios blancos

Postby nageswaragunupudi » Tue Dec 19, 2017 1:33 pm

Code: Select all  Expand view  RUN
@ 340 , 40 EDIT oEdit VAR cVarEdit SIZE 280 , 22 PIXEL OF oWnd ;
   LIMITTEXT BY 30 CHARS

oEdit: bGotFocus  : = { | o | o: SetColor ( CLR_HRED, CLR_YELLOW ) }
oEdit: bLostFocus : = { | o | o: SetColor ( CLR_BLACK, CLR_WHITE ) }
 

Can not chanage border color. The boder is managed by Windows
Regards

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

Re: GET sin longitud con espacios blancos

Postby Xevi » Tue Dec 19, 2017 2:10 pm

bGotFocus, hace el cambio de fuente correctamente

oEdit: bGotFocus : = { | o | o: SetColor ( CLR_HRED, CLR_YELLOW ) }

Ahora bien, bLostFocus bien si se sale del Edit con teclado <Tab>, pero no surte efecto si se hace con raton
oEdit: bLostFocus : = { | o | o: SetColor ( CLR_BLACK, CLR_WHITE ) }

He añadido o:Refresh(), y ya funciona correcto.
oEdit: bLostFocus : = { | o | o: SetColor ( CLR_BLACK, CLR_WHITE ), o:Refresh() }


Por cierto, para salir del Edit o Get con Enter ???


Gracias.
Un Saludo,
Xevi.

Aprendiz de la vida!!!
User avatar
Xevi
 
Posts: 174
Joined: Wed Nov 29, 2017 11:42 am
Location: Girona

Re: GET sin longitud con espacios blancos

Postby Antonio Linares » Tue Dec 19, 2017 2:17 pm

Xevi,

Revisa en source\classes\tget.prg la implementación en el método KeyChar() de VK_RETURN

Habría que implementar ese código en source\classes\edit.prg

Ten en cuenta que ese comportamiento no es standard de Windows, por eso no se ha implementado en la Clase TEdit
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

Re: GET sin longitud con espacios blancos

Postby nageswaragunupudi » Tue Dec 19, 2017 2:21 pm

Code: Select all  Expand view  RUN
oEdit:bKeyChar   := { |k| If( k == VK_RETURN, ( oEdit:oWnd:GoNextCtrl( oEdit:hWnd ), 0 ), nil ) }
 
Regards

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

Re: GET sin longitud con espacios blancos

Postby Xevi » Tue Dec 19, 2017 10:47 pm

Lo mejor de trabajar con Clases... la herencia!!!

Así que he creado una clase a partir de la TEdit...
Code: Select all  Expand view  RUN

CLASS TxEdit FROM TEdit

   METHOD KeyDown( nKey, nFlags )

ENDCLASS

METHOD KeyDown( nKey, nFlags ) CLASS TxEdit

   IF nKey == VK_UP
      ::oWnd:GoPrevCtrl( ::hWnd )
      return 0    // We don't want API default behavior

   ELSEIF nKey == VK_RETURN .or. nKey == VK_DOWN
      ::oWnd:GoNextCtrl( ::hWnd )
      return 0    // We don't want API default behavior
   ENDIF
return ::Super:KeyDown( nKey, nFlags )

 


Funciona de lujo!!!

Donde se puede llegar??? Hay límites???
Creo que los límites estan en la imaginación!!!

Como me gusta aprender!!!

Ahora, pero... necesito un empujón. TEdit al recoger el foco no se "pinta" el recuadro del color como lo hace un Get.
Es un error de la Clase???
Hay algun arreglo/apaño???
No se donde mirar en la Clase Get.

Gracias.
Un Saludo,
Xevi.

Aprendiz de la vida!!!
User avatar
Xevi
 
Posts: 174
Joined: Wed Nov 29, 2017 11:42 am
Location: Girona

Re: GET sin longitud con espacios blancos

Postby Xevi » Tue Dec 19, 2017 11:26 pm

Una cosa a comentar, por si alguien se puede encontrar en una situación similar.

Code: Select all  Expand view  RUN

function Main()
 
   local oDlg, cFirst := "Hello", cLast := "World"
 
*   DEFINE DIALOG oDlg SIZE 500, 250
   DEFINE WINDOW oDlg FROM 1, 1 TO 30, 100
 
   @ 1, 1 EDIT cFirst OF oDlg SIZE 80, 10
 
   @ 2, 1 GET cLast OF oDlg SIZE 80, 10
 
   @ 5, 11 BUTTON "Ok" ACTION MsgInfo( cFirst + ", " + cLast )
 
   @ 5, 21 BUTTON "Cancel" ACTION oDlg:End()
 
*   ACTIVATE DIALOG oDlg CENTERED
    ACTIVATE WINDOW oDlg

return nil
 
//----------------------------------------------------------------------------//
 


Sin la modificación de la clase, tal como he expuesto anteriormente, cuando conviven GETs y EDITs en una misma WINDOW, no salta de control del EDIT con return, flecha arriba, flecha abajo...
En cambio, si el contenedor es un DIALOG si que se comporta igualmente un EDIT que un GET.

Es para tomar nota!!!

Gracias.
Un Saludo,
Xevi.

Aprendiz de la vida!!!
User avatar
Xevi
 
Posts: 174
Joined: Wed Nov 29, 2017 11:42 am
Location: Girona

Re: GET sin longitud con espacios blancos

Postby Xevi » Wed Dec 20, 2017 10:05 am

Otra cosa que NO FUNCIONA EN UNA WINDOW

Los Edits no se remarca el borde cuando obtiene el Foco en una WINDOW, en un DIALOG si lo hace correctamente. De ahí que expusiera el como cambiar el color del borde de un TEdit.

Es un error o fallo de la clase, como el expuesto en el anterior post.

Gracias.
Un Saludo,
Xevi.

Aprendiz de la vida!!!
User avatar
Xevi
 
Posts: 174
Joined: Wed Nov 29, 2017 11:42 am
Location: Girona

Next

Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: No registered users and 41 guests