FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour GET sin longitud con espacios blancos
Posts: 174
Joined: Wed Nov 29, 2017 11:42 AM
GET sin longitud con espacios blancos
Posted: 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.



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!!!
Posts: 10733
Joined: Sun Nov 19, 2006 05:22 AM
Re: GET sin longitud con espacios blancos
Posted: Mon Dec 18, 2017 07: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
Posts: 174
Joined: Wed Nov 29, 2017 11:42 AM
Re: GET sin longitud con espacios blancos
Posted: 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!!!
Posts: 174
Joined: Wed Nov 29, 2017 11:42 AM
Re: GET sin longitud con espacios blancos
Posted: 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!!!
Posts: 44162
Joined: Thu Oct 06, 2005 05:47 PM
Re: GET sin longitud con espacios blancos
Posted: Mon Dec 18, 2017 06:47 PM
regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 174
Joined: Wed Nov 29, 2017 11:42 AM
Re: GET sin longitud con espacios blancos
Posted: 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!!!
Posts: 44162
Joined: Thu Oct 06, 2005 05:47 PM
Re: GET sin longitud con espacios blancos
Posted: Tue Dec 19, 2017 04: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
Posts: 174
Joined: Wed Nov 29, 2017 11:42 AM
Re: GET sin longitud con espacios blancos
Posted: 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 (fw): Select all Collapse
   @ 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!!!
Posts: 10733
Joined: Sun Nov 19, 2006 05:22 AM
Re: GET sin longitud con espacios blancos
Posted: Tue Dec 19, 2017 01:33 PM
Code (fw): Select all Collapse
@ 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
Posts: 174
Joined: Wed Nov 29, 2017 11:42 AM
Re: GET sin longitud con espacios blancos
Posted: Tue Dec 19, 2017 02: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!!!
Posts: 44162
Joined: Thu Oct 06, 2005 05:47 PM
Re: GET sin longitud con espacios blancos
Posted: Tue Dec 19, 2017 02: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
Posts: 10733
Joined: Sun Nov 19, 2006 05:22 AM
Re: GET sin longitud con espacios blancos
Posted: Tue Dec 19, 2017 02:21 PM
Code (fw): Select all Collapse
oEdit:bKeyChar   := { |k| If( k == VK_RETURN, ( oEdit:oWnd:GoNextCtrl( oEdit:hWnd ), 0 ), nil ) }
Regards



G. N. Rao.

Hyderabad, India
Posts: 174
Joined: Wed Nov 29, 2017 11:42 AM
Re: GET sin longitud con espacios blancos
Posted: 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 (fw): Select all Collapse
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!!!
Posts: 174
Joined: Wed Nov 29, 2017 11:42 AM
Re: GET sin longitud con espacios blancos
Posted: Tue Dec 19, 2017 11:26 PM
Una cosa a comentar, por si alguien se puede encontrar en una situaci贸n similar.

Code (fw): Select all Collapse
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!!!
Posts: 174
Joined: Wed Nov 29, 2017 11:42 AM
Re: GET sin longitud con espacios blancos
Posted: 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!!!