FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour Forzar Ancho de línea en un campo Memo
Posts: 309
Joined: Wed Mar 28, 2018 04:38 PM
Forzar Ancho de línea en un campo Memo
Posted: Fri Apr 07, 2023 05: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 (fw): Select all Collapse
#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:


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


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 ?
Posts: 1344
Joined: Wed Nov 16, 2005 09:14 PM
Re: Forzar Ancho de línea en un campo Memo
Posted: Fri Apr 07, 2023 11:11 PM
Victor:
El efecto del LimitText se logra asi:
Code (fw): Select all Collapse
#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 (fw): Select all Collapse
#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 )
Posts: 8515
Joined: Tue Dec 20, 2005 07:36 PM
Re: Forzar Ancho de línea en un campo Memo
Posted: Sat Apr 08, 2023 02:15 AM
João Santos - São Paulo - Brasil - Phone: +55(11)95150-7341
Posts: 309
Joined: Wed Mar 28, 2018 04:38 PM
Re: Forzar Ancho de línea en un campo Memo
Posted: Sat Apr 08, 2023 03:47 PM
cmsoft wrote:Victor:
El efecto del LimitText se logra asi:
Code (fw): Select all Collapse
#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 (fw): Select all Collapse
#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.
--------

¿ Y porque no ?

¿ And why not ?
Posts: 309
Joined: Wed Mar 28, 2018 04:38 PM
Re: Forzar Ancho de línea en un campo Memo
Posted: Sat Apr 08, 2023 03:53 PM
karinha wrote:https://forums.fivetechsupport.com/viewtopic.php?f=3&t=42569&sid=69d117ede39f4731baa91e08b8dd8f79

https://forums.fivetechsupport.com/viewtopic.php?f=3&t=42971&sid=69d117ede39f4731baa91e08b8dd8f79

Regards.
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 ?
Posts: 1344
Joined: Wed Nov 16, 2005 09:14 PM
Re: Forzar Ancho de línea en un campo Memo
Posted: Sat Apr 08, 2023 04: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...
Posts: 309
Joined: Wed Mar 28, 2018 04:38 PM
Re: Forzar Ancho de línea en un campo Memo
Posted: Tue Apr 11, 2023 08: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 ?
Posts: 10733
Joined: Sun Nov 19, 2006 05:22 AM
Re: Forzar Ancho de línea en un campo Memo
Posted: Wed Apr 12, 2023 01:45 AM
Code (fw): Select all Collapse
oWnd:GetWidth( ctext, oFont ) --> nWidth
Regards



G. N. Rao.

Hyderabad, India
Posts: 309
Joined: Wed Mar 28, 2018 04:38 PM
Re: Forzar Ancho de línea en un campo Memo
Posted: Wed Apr 19, 2023 03:59 PM
nageswaragunupudi wrote:
Code (fw): Select all Collapse
oWnd:GetWidth( ctext, oFont ) --> nWidth
Thanks!
--------

¿ Y porque no ?

¿ And why not ?

Continue the discussion