Problemas con campos memo

Problemas con campos memo

Postby Andrés G. » Wed May 21, 2008 5:08 pm

Hola a todos,

Tengo necesidad de editar un campo memo y el programa falla, cuando era ms-dos iba perfecto pero ahora no me funciona, me sale el siguiente error:

Error description: Error FiveWin/3 Cannot create Dialog Box:
Title: Observacions

Para editar el campo uso la siguiente función:

FUNCTION OBSERVAC(NC)

LOCAL ANT:=NC
DEFINE DIALOG FINESTRA2 FROM 1,1 TO 200,500 TITLE "Observacions" FONT TLLETRA PIXEL
@ 10,10 GET NC SIZE 230,60 PIXEL MULTILINE OF FINESTRA2
@ 80,70 BUTTON "&D'acord" SIZE 50,12 ACTION FINESTRA2:END() PIXEL OF FINESTRA2
@ 80,130 BUTTON "Ca&ncel·lar" SIZE 50,12 ACTION (NC:=ANT, FINESTRA2:END()) PIXEL OF FINESTRA2
ACTIVATE DIALOG FINESTRA2 CENTERED
RETURN NIL

¿Es posible que sea demasiado grande le campo para hacerlo con un get?
Si es así, ¿como deberia hacerlo? Yo seimpre he usado esta funcion cuanod programaba en ms-dos y funcionaba, de hecho la base de datos proviene de la migración de la aplicación y alla iba perfectamente. De hecho con registros que tienen menos texto funciona bien.

Espero que me posais ayudar. Gracias.

Recuerdos,

Andrés
User avatar
Andrés G.
 
Posts: 33
Joined: Fri Jun 29, 2007 7:38 am
Location: Tarragona, Catalunya

Postby Armando » Wed May 21, 2008 6:17 pm

Andrés:

No hay limitaciones para usar campos MEMO con FW.

El tipo de error me hace suponer que no tienes bien definido el GET del campo memo, de hecho no es un GET "normal", en tus recursos lo debes definir como MULTI-LINEA y activarle el scroll vertical, ah, y te recomiendo que lo hagas más alto que un get "normal"

Saludos
SOI, s.a. de c.v.
estbucarm@gmail.com
http://www.soisa.mex.tl/
http://sqlcmd.blogspot.com/
Tel. (722) 174 44 45
Carpe diem quam minimum credula postero
User avatar
Armando
 
Posts: 3228
Joined: Fri Oct 07, 2005 8:20 pm
Location: Toluca, México

Postby Andrés G. » Thu May 22, 2008 6:22 am

Armando,

Gracias por contestar, paso a responder a tus cuestiones:

1. Yo leo la base da datos y pongo la información del registro en una tabla que uso para editar, por tanto la variable que estoy usando (NC) proviene de un campo memo de una base de datos.

2. Yo no uso recursos, lo hago directamente en el programa, da mas trabajo pero me permite controlar mejor los campos y si esta definida la condición multilinea con lo cual el scroll vertical sale solo y ya tiene un tamaño mas grande que un get normal.

@ 10,10 GET NC SIZE 230,60 PIXEL MULTILINE OF FINESTRA2

Recuerdos,

Andrés
User avatar
Andrés G.
 
Posts: 33
Joined: Fri Jun 29, 2007 7:38 am
Location: Tarragona, Catalunya

Postby Sebastián Almirón » Fri May 23, 2008 9:08 am

Si parece haber un problema con la longitud de la variable en los GET MULTILINE cuando el dialogo se declara directamente desde código, esto da el error que comentas:

FUNCTION OBSERVAC(NC)

LOCAL ANT:=NC
NC := REPLICATE('p',1763) //Para no tomarlo del campo memo

DEFINE DIALOG FINESTRA2 FROM 1,1 TO 200,500 TITLE "Observacions" FONT TLLETRA PIXEL
@ 10,10 GET NC SIZE 230,60 PIXEL MULTILINE OF FINESTRA2
@ 80,70 BUTTON "&D'acord" SIZE 50,12 ACTION FINESTRA2:END() PIXEL OF FINESTRA2
@ 80,130 BUTTON "Ca&ncel·lar" SIZE 50,12 ACTION (NC:=ANT, FINESTRA2:END()) PIXEL OF FINESTRA2
ACTIVATE DIALOG FINESTRA2 CENTERED
RETURN NIL

Sin embargo si la línea NC := REPLICATE('p',1763) la cambias por NC := REPLICATE('p',1762) o un valor menor no falla. Es decir cuando la variable contiene 1763 o más caracteres falla, si tiene menos no.

Si ese mismo dialogo lo haces con recursos no falla, aunque la variable tenga más de 1763 caracteres (con la limitación de 64K de las variables)

El problema parece estar el la funcion DialogBoxIndirect, cuyo código fuente no se proporciona con FW, así que hasta ahí he podido investigar.

Esperemos a ver si Antonio tiene alguna sugerencia.
User avatar
Sebastián Almirón
 
Posts: 157
Joined: Mon Dec 12, 2005 9:56 am
Location: Moralzarzal - Spain

Postby Antonio Linares » Fri May 23, 2008 11:02 am

Podeis usar este método de la clase TMultiGet que debe eliminar esas restricciones:

// Call this method to use unlimited text size
METHOD LimitText() INLINE SendMessage( ::hWnd, EM_LIMITTEXT, 0, 0 )
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 42099
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Postby Andrés G. » Fri May 23, 2008 11:52 am

Gracias Sebastian.

Provando, provando habia llegado a la misma conclusión que tu, es decir que el problema venia en el tamaño del texto.

Como no veia una pronta solucion y me corria prisa he optado por migrar el programa a Harbour, que allí si funciona perfectamente. Es un paso que tenia que hacer y así lo he ademantado.

Antonio, no he probado la solucion que das porque no se como hacerlo. ¿Qué debo hacer para usar este método? ¿Tengo que insertar esta línea en mi programa?

Disculpa mi ignorancia pero voy aprendiendo poco a poco y el tema de clases y metodos todavia no lo acabo de entender bien como funciona.

Gracias por vuestras respuestas.

Recuerdos,

Andrés
User avatar
Andrés G.
 
Posts: 33
Joined: Fri Jun 29, 2007 7:38 am
Location: Tarragona, Catalunya

Postby Antonio Linares » Fri May 23, 2008 11:57 am

Andrés,

Cuando se crea el GET multilínea existe la limitación que comentais, pero una vez creado se le puede enviar ese mensaje para que no esté limitado:

@ 10,10 GET oGet VAR NC SIZE 230,60 PIXEL MULTILINE OF FINESTRA2
...
ACTIVATE DIALOG oDlg ON INIT oGet:LimitText()
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 42099
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Postby Andrés G. » Mon May 26, 2008 7:18 am

Antonio,

He probado lo que me dices y sigue saliendo el mismo error.
User avatar
Andrés G.
 
Posts: 33
Joined: Fri Jun 29, 2007 7:38 am
Location: Tarragona, Catalunya


Return to FiveWin para CA-Clipper

Who is online

Users browsing this forum: No registered users and 6 guests