FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para CA-Clipper Problemas con campos memo
Posts: 33
Joined: Fri Jun 29, 2007 07:38 AM
Problemas con campos memo
Posted: Wed May 21, 2008 05: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

Posts: 3358
Joined: Fri Oct 07, 2005 08:20 PM
Problemas con campos memo
Posted: Wed May 21, 2008 06: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
Posts: 33
Joined: Fri Jun 29, 2007 07:38 AM
Problemas con campos memo
Posted: Thu May 22, 2008 06: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
Posts: 166
Joined: Mon Dec 12, 2005 09:56 AM
Problemas con campos memo
Posted: Fri May 23, 2008 09: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.

Posts: 44158
Joined: Thu Oct 06, 2005 05:47 PM
Problemas con campos memo
Posted: 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
Posts: 33
Joined: Fri Jun 29, 2007 07:38 AM
Problemas con campos memo
Posted: 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

Posts: 44158
Joined: Thu Oct 06, 2005 05:47 PM
Problemas con campos memo
Posted: 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
Posts: 33
Joined: Fri Jun 29, 2007 07:38 AM
Problemas con campos memo
Posted: Mon May 26, 2008 07:18 AM

Antonio,

He probado lo que me dices y sigue saliendo el mismo error.

Continue the discussion