Page 1 of 1
Problemas con campos memo
Posted: Wed May 21, 2008 5:08 pm
by Andrés G.
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
Posted: Wed May 21, 2008 6:17 pm
by Armando
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
Posted: Thu May 22, 2008 6:22 am
by Andrés G.
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 _ 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
Posted: Fri May 23, 2008 9:08 am
by Sebastián Almirón
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.
Posted: Fri May 23, 2008 11:02 am
by Antonio Linares
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 )
Posted: Fri May 23, 2008 11:52 am
by Andrés G.
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
Posted: Fri May 23, 2008 11:57 am
by Antonio Linares
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()
Posted: Mon May 26, 2008 7:18 am
by Andrés G.
Antonio,
He probado lo que me dices y sigue saliendo el mismo error.