Forzar Ancho de línea en un campo Memo

Post Reply
User avatar
VictorCasajuana
Posts: 268
Joined: Wed Mar 28, 2018 4:38 pm
Location: Vinaròs
Contact:

Forzar Ancho de línea en un campo Memo

Post by VictorCasajuana »

Hola Grupo!

He visto varios posts en el foro que tratan este tema pero no me acaba de funcionar. Necesito poder indicar el ancho de línea de un get de campo memo para que salte automáticamente a la siguiente línea cuando se supera.

He probado el siguiente código:

Code: Select all | Expand

#include 'fivewin.ch'

Function Main()

    Local oDlg
    Local oGet
    Local cVar := Space( 10000 )

    DEFINE DIALOG oDlg;
           SIZE 200,200
    
    @1,1 GET oGet;
         VAR cVar;
         MEMO;
         SIZE 90,70;
         OF oDlg

    oGet:LimitText(10)    

    ACTIVATE DIALOG oDlg CENTERED

Return ( Nil )
 
Pero el resultado es este:
Image

I me gustaría conseguir este resultado ( sin tener que pulsar enter )
Image

Es como si el método limitText() no me hiciese caso, o igual es que no sirve para lo que yo necesito.

Algún consejo?

Gracias de antemano y salud!
--------
¿ Y porque no ?
¿ And why not ?
User avatar
cmsoft
Posts: 1293
Joined: Wed Nov 16, 2005 9:14 pm
Location: Mercedes - Bs As. Argentina

Re: Forzar Ancho de línea en un campo Memo

Post by cmsoft »

Victor:
El efecto del LimitText se logra asi:

Code: Select all | Expand

#include 'fivewin.ch'

Function Main()

    Local oDlg
    Local oGet
    Local cVar := Space( 10000 )

    DEFINE DIALOG oDlg;
           SIZE 200,200
   
    @1,1 GET oGet;
         VAR cVar;
         MEMO;
         SIZE 90,70;
         OF oDlg  

    ACTIVATE DIALOG oDlg CENTERED ON INIT oGet:LimitText(10)

Return ( Nil )
Pero claramente no es lo que buscas
Podría ser algo asi

Code: Select all | Expand

#include 'fivewin.ch'

Function Main()

    Local oDlg
    Local oGet
    Local cVar := Space( 1 )

    DEFINE DIALOG oDlg;
           SIZE 200,200
   
    @1,1 GET oGet;
         VAR cVar;
         MEMO;
         SIZE 90,70;
         OF oDlg 

    oGet:bChange := { |nKey, nFlags| IF(oGet:GetCol() = 10, oGet:Append(chr(13)+chr(10), 2 ),nil ) }

    //oGet:LimitText(10)    

    ACTIVATE DIALOG oDlg CENTERED ON INIT oGet:LimitText(-1)

Return ( Nil )
User avatar
karinha
Posts: 7885
Joined: Tue Dec 20, 2005 7:36 pm
Location: São Paulo - Brasil
Contact:

Re: Forzar Ancho de línea en un campo Memo

Post by karinha »

João Santos - São Paulo - Brasil - Phone: +55(11)95150-7341
User avatar
VictorCasajuana
Posts: 268
Joined: Wed Mar 28, 2018 4:38 pm
Location: Vinaròs
Contact:

Re: Forzar Ancho de línea en un campo Memo

Post by VictorCasajuana »

cmsoft wrote:Victor:
El efecto del LimitText se logra asi:

Code: Select all | Expand

#include 'fivewin.ch'

Function Main()

    Local oDlg
    Local oGet
    Local cVar := Space( 10000 )

    DEFINE DIALOG oDlg;
           SIZE 200,200
   
    @1,1 GET oGet;
         VAR cVar;
         MEMO;
         SIZE 90,70;
         OF oDlg  

    ACTIVATE DIALOG oDlg CENTERED ON INIT oGet:LimitText(10)

Return ( Nil )
Pero claramente no es lo que buscas
Podría ser algo asi

Code: Select all | Expand

#include 'fivewin.ch'

Function Main()

    Local oDlg
    Local oGet
    Local cVar := Space( 1 )

    DEFINE DIALOG oDlg;
           SIZE 200,200
   
    @1,1 GET oGet;
         VAR cVar;
         MEMO;
         SIZE 90,70;
         OF oDlg 

    oGet:bChange := { |nKey, nFlags| IF(oGet:GetCol() = 10, oGet:Append(chr(13)+chr(10), 2 ),nil ) }

    //oGet:LimitText(10)    

    ACTIVATE DIALOG oDlg CENTERED ON INIT oGet:LimitText(-1)

Return ( Nil )
Cesar gracias por la respuesta, funciona bien hasta que intentas modificar algo, ya que entonces no lo respeta ( normal ). Me has dado una idea para utilizar el bchange e ir analizando la cadena y modificando el contenido del get ajustando cada línea en cada cambio, pero me da la sensación de que ya debe estar echo de alguna forma en fivewin y estoy reinventado la rueda, pero no doy con la tecla.
Image
--------
¿ Y porque no ?
¿ And why not ?
User avatar
VictorCasajuana
Posts: 268
Joined: Wed Mar 28, 2018 4:38 pm
Location: Vinaròs
Contact:

Re: Forzar Ancho de línea en un campo Memo

Post by VictorCasajuana »

Karinha en los enlaces que me pasas veo la función SB_LimitText, pero lo único que hace es limitar el total del texto no cada línea.
--------
¿ Y porque no ?
¿ And why not ?
User avatar
cmsoft
Posts: 1293
Joined: Wed Nov 16, 2005 9:14 pm
Location: Mercedes - Bs As. Argentina

Re: Forzar Ancho de línea en un campo Memo

Post by cmsoft »

funciona bien hasta que intentas modificar algo, ya que entonces no lo respeta ( normal )
Si, tal cual lo dices, no funciona cuando modificas, lo había visto.
Creo que, como dices, debes ir analizando la cadena y haciendo de forma manual que cumpla el requerimiento.
A mi humilde entender, no es una caracteristica que tenga la clase TMultiGet. Así que si lo logras, sería muy bueno...
User avatar
VictorCasajuana
Posts: 268
Joined: Wed Mar 28, 2018 4:38 pm
Location: Vinaròs
Contact:

Re: Forzar Ancho de línea en un campo Memo

Post by VictorCasajuana »

cmsoft wrote:
funciona bien hasta que intentas modificar algo, ya que entonces no lo respeta ( normal )
Si, tal cual lo dices, no funciona cuando modificas, lo había visto.
Creo que, como dices, debes ir analizando la cadena y haciendo de forma manual que cumpla el requerimiento.
A mi humilde entender, no es una caracteristica que tenga la clase TMultiGet. Así que si lo logras, sería muy bueno...
Lo he intentado pero tiro la toalla, en el método bchange meto la lógica para revisar el contenido del get y ajustar cada línea a 10 de ancho, hasta ahí todo bien, pero pierdo el control de la posición del cursor, al modificar el contenido del get, si intento reposicionar el cursor, no me funciona del todo bien y tengo que controlar cosas como el borrado por selección, el pegado de portapapeles, etc... creo que estoy reinventando la rueda y que puede que haya algo que ya lo haga y no lo sepa.

Voy a intentar ir por otro camino, cambiar el tipo de letra del get a un ancho fijo como el COURIER NEW y crear el control del get con el ancho justo.

Hay alguna forma de saber el ancho de un caracter según el fuente elegido ( ancho fijo ) para poder calcular el ancho que me hará falta en el get?
--------
¿ Y porque no ?
¿ And why not ?
User avatar
nageswaragunupudi
Posts: 10691
Joined: Sun Nov 19, 2006 5:22 am
Location: India
Contact:

Re: Forzar Ancho de línea en un campo Memo

Post by nageswaragunupudi »

Code: Select all | Expand

oWnd:GetWidth( ctext, oFont ) --> nWidth
Regards

G. N. Rao.
Hyderabad, India
User avatar
VictorCasajuana
Posts: 268
Joined: Wed Mar 28, 2018 4:38 pm
Location: Vinaròs
Contact:

Re: Forzar Ancho de línea en un campo Memo

Post by VictorCasajuana »

nageswaragunupudi wrote:

Code: Select all | Expand

oWnd:GetWidth( ctext, oFont ) --> nWidth
Thanks!
--------
¿ Y porque no ?
¿ And why not ?
Post Reply