Forzar Ancho de línea en un campo Memo

Forzar Ancho de línea en un campo Memo

Postby VictorCasajuana » Fri Apr 07, 2023 5:18 pm

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 view  RUN

#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
VictorCasajuana
 
Posts: 265
Joined: Wed Mar 28, 2018 4:38 pm
Location: Vinaròs

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

Postby cmsoft » Fri Apr 07, 2023 11:11 pm

Victor:
El efecto del LimitText se logra asi:
Code: Select all  Expand view  RUN

#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 view  RUN

#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
cmsoft
 
Posts: 1290
Joined: Wed Nov 16, 2005 9:14 pm
Location: Mercedes - Bs As. Argentina

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

Postby karinha » Sat Apr 08, 2023 2:15 am

João Santos - São Paulo - Brasil - Phone: +55(11)95150-7341
User avatar
karinha
 
Posts: 7828
Joined: Tue Dec 20, 2005 7:36 pm
Location: São Paulo - Brasil

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

Postby VictorCasajuana » Sat Apr 08, 2023 3:47 pm

cmsoft wrote:Victor:
El efecto del LimitText se logra asi:
Code: Select all  Expand view  RUN

#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 view  RUN

#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: 265
Joined: Wed Mar 28, 2018 4:38 pm
Location: Vinaròs

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

Postby VictorCasajuana » Sat Apr 08, 2023 3:53 pm



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
VictorCasajuana
 
Posts: 265
Joined: Wed Mar 28, 2018 4:38 pm
Location: Vinaròs

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

Postby cmsoft » Sat Apr 08, 2023 4:51 pm

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
cmsoft
 
Posts: 1290
Joined: Wed Nov 16, 2005 9:14 pm
Location: Mercedes - Bs As. Argentina

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

Postby VictorCasajuana » Tue Apr 11, 2023 8:09 am

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
VictorCasajuana
 
Posts: 265
Joined: Wed Mar 28, 2018 4:38 pm
Location: Vinaròs

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

Postby nageswaragunupudi » Wed Apr 12, 2023 1:45 am

Code: Select all  Expand view  RUN
oWnd:GetWidth( ctext, oFont ) --> nWidth
Regards

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

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

Postby VictorCasajuana » Wed Apr 19, 2023 3:59 pm

nageswaragunupudi wrote:
Code: Select all  Expand view  RUN
oWnd:GetWidth( ctext, oFont ) --> nWidth

Thanks!
--------
¿ Y porque no ?
¿ And why not ?
User avatar
VictorCasajuana
 
Posts: 265
Joined: Wed Mar 28, 2018 4:38 pm
Location: Vinaròs


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: No registered users and 37 guests