Page 1 of 1
Forzar Ancho de línea en un campo Memo
Posted: Fri Apr 07, 2023 5:18 pm
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:
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!
Re: Forzar Ancho de línea en un campo Memo
Posted: Fri Apr 07, 2023 11:11 pm
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 )
Re: Forzar Ancho de línea en un campo Memo
Posted: Sat Apr 08, 2023 2:15 am
by karinha
Re: Forzar Ancho de línea en un campo Memo
Posted: Sat Apr 08, 2023 3:47 pm
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.
Re: Forzar Ancho de línea en un campo Memo
Posted: Sat Apr 08, 2023 3:53 pm
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.
Re: Forzar Ancho de línea en un campo Memo
Posted: Sat Apr 08, 2023 4:51 pm
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...
Re: Forzar Ancho de línea en un campo Memo
Posted: Tue Apr 11, 2023 8:09 am
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?
Re: Forzar Ancho de línea en un campo Memo
Posted: Wed Apr 12, 2023 1:45 am
by nageswaragunupudi
Re: Forzar Ancho de línea en un campo Memo
Posted: Wed Apr 19, 2023 3:59 pm
by VictorCasajuana