Esto viene a cuento por el viejo probervio: -Si tu has sufrido por tu ignorancia, ense�a a los demas, que ellos no sufran lo que tu, y asi se ira reduciendo el sufrimiento en el mundo (del T.A.O.) Es una recopilacion de las preguntas y respuestas hechas a la lista "fivewin-la" durante los cuatro meses primeros de sufridor de fivewin No he tratado de hacer nada bonito, sino util , que ocupe poco por eso va en texto puro Es caotica, anarquica,desordenada, pero si solo a uno de vosotros le evita el sufrimiento, doy por bien empleado el tiempo que he empleado en recopilarla si alguien la mejora, encantado, si la pasa a otros, tambien, solo pido que no borreis la parte final del texto �que menos, no ????? y empezando, que es gerundio ..... 1.-Cuando queramos hacer que los mensajes de un boton de un dialogo aparezcan en la barra de mensajes de la ventana principal .. esta es OWND ;poner en el dialogo las instrucciones define dialog odlg..... of ownd acti dialog .... CENTERED 2.- como filtrar un listbox de una base de datos, para aquellos records que cumplan una determinada condicion . oLBX:SetFilter("CAMPO_o_EXPRESION","Valor_TOPE_del_FILTRO","Valor_ULTIMO_del_FILTR O") oLBX:GoTop() 3.-No se cierra las DLL cuando hay una terminacion anormal del Programa. Para eso usa: WPS.exe Es un utility para cerrar las DLL que quedan abiertas. o coloca en tu programa la instruccion CLIPPER Exit Procedure Final // esta es de clipper, que lo sepas //Set Resources // Libera todos los Recursos Cargados FreeResources() // Tambi�n pero con Funci�n (es lo mismo pero m�s bonito) freelibrary('miBWCC.DLL') //oFont:End() Return 4.-Salen cosas raras al darle al boton dcho en un get...Con respecto al menu popup si puedes modificarlo, pero tienes que retocar la clase TGet. Debes entonces modificar la Clase TGET. Entre las lineas 954 y 1041 (aproximadamente) del TGET.prg, esta el metodo ButtonDown. Creo que puede funcionar poniendo un asterisco a la linea 1039 (o a la linea que dice:
ACTIVATE POPUP oMenu AT nRow - 60, nCol OF Self 5.-Incrustar un bmp en un dialogo con el WS Ya tienes los BMP , que "construyen" el boton de la lupa ? Lo que tienes que hacer es abrir el Workshop 2 veces , uno con tu DLL y otro con mi DLL. Copia los botones de mi dll , y pegalos en tu dll, para cambiar el bmp del boton solo debes cambiar su ID. - Recuerda hacer SET RESOURCES TO "MIDLL.DLL" y hBorland:=LoadLibrary("BWCC.DLL"), al principio del MAIN(). Si tu Boton tiene el ID 445, entonces lo mas seguro es que dentro de tu DLL haya al menos 2 BMP que terminan en 445 (esos son los BMP que construyen al boton y que le dan las apariencias de: Boton normal, Boton pulsado y Boton con Foco). Los BMP tendran (para que trabajen como Botones Borland), ser: 1445 (bmp del boton normal), 3445 (bmp del boton pulsado), y 5445 (bmp del boton con foco). Si quieres cambiar el tama�o del boton , deberas cambiarle el tama�o a estos 3 Bmp's. (yo uso mucho los botones Borland pero solo uso los que empiezan con 1 y con 3, o sea que cuando mis botones tienen el foco, se ven con Bmp que empieza con 1 y no con 5). O sea: No es obligatorio usar el bmp que empieza con 5. 6.-Error al grabar Dll. No me deja grabar la .dll me dice Unexpected file format Eso lo puedes arreglar Grabando tus recursos encima de otra DLL existente (claro, sacas una copia de una dll de otro programa), y despues haces un rename a esa DLL y la sigues usando con WS. 7.- Tecnica de la lupita Objetivo: 1) Si el usuario ingresa un codigo valido, entonces el foco no deberia detenerse en el boton de la lupita. 2) Si el usuario no ingresa ningun codigo (contenido dentro de la tabla DBF), entonces el boton de la lupita si deberia adquirir el foco. 3) Si el usuario ingresa un codigo errado, (o sea: que no est� contenido dentro de la DBF), entonces el boton de la lupita SI deberia ganar el foco. 4) El boton de la lupita, deberia activar otro dialogo en donde se despliega un browse de ayuda con los datos de la DBF que contiene los codigos en cuestion.
8.-Hacer que aparezca el icono en el .exe; ver el icono desde el explorer Tienes que grabar un icono como file .RC, e "incrustarlo" en tu exe luego que Blinker te lo produce. El incrustador del icono dentro del exe es RC.EXE (y BRC.EXE si usas el del workshop). El icono .RC lo generas en el workshop. Si incrustas todos tus recursos completos en el exe, (si haces esto es porque no quieres usar DLL en tiempo de ejecucion), entonces el icono de el exe sera el primer icono del grupo ICON dentro de los recursos
9.- un problema de VmPreAlloc. Tengo la solucion para tu amigo, dile que compile el objeto que te anexo junto a sus demas obj y problema resuelto. el obj es ALLOC.obj..... 10.-Manejo de fonts Tienes que cambiar el Font en tu programa. LOCAL BACEPTA,OBMP,OFONT,OSAY2,OFONT2 PRIVATE OTIMER,ODLG,OSAY DEFINE FONT OFONT NAME "MS SANS SERIF" SIZE 0,-10 DEFINE FONT OFONT2 NAME "ARIAL" SIZE 0,-20 BOLD DEFINE DIALOG ODLG TITLE 'Transferencia de NOTAS DE DESPACHO .....' RESOURCE 'DLG_001' FONT OFONT REDEFINE BITMAP OBMP ID 102 OF ODLG RESOURCE 'DMICH' OBMP:CENTER() REDEFINE SAY OSAY ID 120 OF ODLG COLOR CLR_BLUE FONT OFONT2 REDEFINE BUTTON BINFO ID 442 OF ODLG ACTION INFORMA(M->AUTOR,'Desarrollo de SoftWare') REDEFINE BUTTON BACEPTA ID 400 OF ODLG ACTION (ODLG:END()) OSAY:SETTEXT('Esperando .............') ACTIVATE DIALOG ODLG CENTER ON INIT DEFINIT(ODLG) RELEASE TIMER OTIMER RETURN NIL 11.- fallo en la pila de evaluaci�n: SOLUCIONADO > �Cuales fueron los valores de Heapsize y Stacksize? > (Los Anteriores y los Nuevos) ................... > stacksize de antes.- 9500 heapsize de antes.- 4096 stacksize heapsize
de ahora.- 9500 de ahora.- 8192
Saludos. 12.-Manejo del database El problema estaba en que hacia un dbSelectArea("CLIE") despues de hacer un DATABASE oDclien y segun parece hay que hacerlo ANTES, yo pense que una vez abiertas las tablas se podia crear el objeto tabla y despues seleccionar la tabla, pero parece ser que no es asi. � Curioso verdad ? 13.- ahora no puedo cargar mas de una DLL, no me reconoce los recursos de la segunda que cargo. La primera vez que llamas a SET RESOURCES TO ... estableces las DLLs que vas a usar para los recursos. A partir de ah�, has de volver a llamar a SET RESOURCES TO para seleccionar la que vas a usar en cada momento: SET RESOURCES TO "system\comun.dll", "system\part.dll"
ahora, si vas a acceder a recursos que est�n en part.dll: SET RESOURCES TO "system\part.dll" Por �ltimo, si llamas a SET RESOURCES TO sin m�s par�metros entonces descargas todas las DLLs de la memoria. 14.-Problemas con las dll sin el WS abierto > Solucion sencilla. > > Cuando vayas a guardar la DLL te metes en la Opcion: > > Save file as > > Y la guardas sobre una dll (cualquiera) que ya exista. > (Por supuesto, trabajas sobre una copia). Eso ya lo he probado y me dice lo mismo; unexpectec.... La grababa sobre la screen.dll Bueno P. d.; he copiado una de las que funcionan bien!!!FOS.DLL La he cambiado de nombre, y le he dicho save as , y BIEN FUNCIONA .. y LE CAMBIO EL SET RESOURCES TO "FOS.DLL" Y YA NO HACE FALTA CARGAR EL WS...
15.-Spinners Este es un SPINNER:
Es un Get con Vertical Scroll Bar, y en el REDEFINE pones: SPINNER MIN x MAX y Un Spinner es una barra de scroll vertical asociada a un �nico get y sirve para incrementar o disminuir el valor de la variable asignada al get. As�, en un get con Spinner puedes introducir el dato manualmente o pulsar su scroll para modificarlo. Dado que el spinner suma o resta a la variable del get, s�lo tiene sentido en gets num�ricos o de fecha. 16.-Problemas con las � y las � (mayusc. y min ) Trato un fichero .dbf que fue creado desde Dbase Iv dos en un programa fivewin y claro las � so se visualizan como "�" por lo que aplico OemToAnsi y arreglado. Pero eun d�alogo de buscar por nombre quiero que el operador teclee la � y la busque. El caso es que despu�s de probar varias cosas la �nica forma que hago que me funcione es la siguiente, pero no entiendo PORQUE FUNCIONA! 1:
Remplazo en el fichero original los campos con Oem a Ansi
Do while .not. eof() letras->letra := letras->apelli := letras->nombre := letras->apenom := skip enddo
OemToAnsi(letras->letra) OemToAnsi(letras->apelli) OemToAnsi(letras->nombre) OemToAnsi(letras->apenom)
2.- Creo el indice utilizando AnsiToOem BuildIndex( oMeter, oText, oDlg, @lEnd, "AnsiToOem(Letras->Apenom)", "AAPENOM" ) },; "Indexando base de Contribuyentes sin c�digos", "Espere un momento" ) 3.- El listBox le tengo que aplicar: AnsiToOem @ 1, 1 LISTBOX oLbx FIELDS AnsiToOem(Letras->letra),AnsiToOem(Letras->apenom), STR((Letras->nivel),2); 4.- Al get no le hago ninguna conversi�n: if MsgGet( "BUSCAR", "Apellidos..:", @cApenom,; "lupa.bmp" ) cClave := Upper(cApenom) Seguro que es m�s facil que todo esto , pero funciona !!!
17.-tenia una funcion peque�a que mostraba en pantalla un texto y lo desplaza de izq a der y de arriba a abajo, esto lo utilizo para vestir al programa nada m�s pero tengo la inquietud se esto se puede hacer y como, En la pagina de Ramon Avenda�o tienes la Clase DSay, Que hace exactamente lo que tu quieres. http://personales.mundivia.es/rar/fivewin.htm
> 18.-En relacion con el tema de los recursos: 1) La SCREENS.DLL que viene con FW 2.0 aparenta tener algun problema ya que nunca le pude adicionar recursos. La unica solucion para empezar con DLL vacia fue tomar una 'prestada' que funcionaba y borrarle todos los recursos. 2) La otra forma de utilizar recursos, incrustandolos en el .EXE, se puede concretar por el metodo que ense�a el BUILD.BAT o bien, segun descubri en el BLINKER 5.1 agregar en el script de enlace el comando RC RECURSO.RES tienes razon, a mi incluso me envio An Lin una screen.dll vacia y no va, no se puede grabar nada en ella Creo que el motivo por el que va cuando le a�ades recursos a una llena es porque tienen algo mas, vacie una buena, y al abrirla con set resources me abria ella sola la ct3dv2 ( o algo asi) metiendo los recursos por medio de un rc y diciendole grabar como fos.dll (llenita) me decia que ya existia, me la sobreescribia con mis recursos y voil�!! solo quedan mis recursos y lo otro (misterio)
19.-Todos tenemos el prg calendar que viene en samples Lo pones solo y funciona, lo llamo desde mi rutina y nada, ni con parametros ni sin parametros, Compilalo y llamalo desde tu programa con el Winexec("calendar") haber si asi te funciona. y funciona !!!1 20.-en lugar de Run Tienes que usar la funci�n de FiveWin WaitRun() Pero tiene algunas cosas raras ... si quieres que te aparezca el posible mensaje de la ventana y que esta no se cierre lo usas " a pelo " WaitRun('miprog') Pero si quuieres que solo te la ejecute y despues se salga, facil , (cuando se sabe) WaitRun('command.com /c miprog') 21.- Variables estaticas Esto debido a que un amigo de Brasil me preguntaba sobre por que de sus GPF en una gran aplicacion El problema estaba en las STATIC. El amigo utilizaba muchas variables STATIC por PRG, cosa que FW soporta en menor cantidad respecto al MSDOS. Igualmente JAMAS seria necesario escribir mas de 1 variable por modulo PRG, veamos el ejemplo: No es conveniente hacer esto !!!!!!!! STATIC aVar STATIC bVar STATIC cVar STATIC dVar Se debe hacer esto !!!!!!! STATIC aArrayVars:= {Nil,Nil,Nil,Nil} #xtranslate aVar => aArrayVars\[1\] #xtranslate bVar => aArrayVars\[2\] #xtranslate cVar => aArrayVars\[3\] #xtranslate dVar => aArrayVars\[4\] En realidad con esto definimos 1 variable STATIC y consumimos menos los recursos del sistema, y esta solucion EVITA modificar el codigo del PRG, excepto la definicion inicial, y lo mas importante EVITA GPF !!! Algunos diran que es lo mismo poner #define, PERO NO ES LO MISMO !!!!!!!!, dado que estos defines no se resuelven cuando se incorporan en COMANDOS, cosa que si resuelve #xtranslate. :-) Ahora respecto a las PUBLIC. Tambien es conveniente usar 1 (UNA) variable en todo el sistema.......Siiiiiiiiiiii seamos bien amarretes y avaros para el uso de estas tambien, y evitaremos dolores de cabeza y conflictos !!!!! Supognamos que tenemos las siguientes variables: PUBLIC cSistema:= "Sistema Pepe" PUBLIC cPath:= "\Datos" PUBLIC cCopyright:= "Topo Gigio Sistemas" ....... NO NO Y NO !!!!! NO DEBEBMOS HACER ESTO !!!!! Deberiamos hacer esto otro:
Function Main() PUBLIC oApp:= TApplication() ....... return nil CLASS TApplication DATA cSistema INIT "Sistema Pepe" DATA cPath INIT "\Datos" DATA cCopyright INIT "Topo Gigio Sistemas" ........... y asi todas las que quisieramos !!!!! :-) ENDCLASS ........... y como es un objeto publico podremos modificar sus variables de instancia cuando se nos de la regalada gana !!!!! y tenemos 1 sola public, osea oApp en forma de objeto y accederiamos asi Alert( oApp:cCopyright ) !!!!!!!!!! es bien facil !!!!!!!!!!!!!!!!! Llega el turno de las PRIVATE, es conveniente NO USARLAS usemos siempre las LOCAL y pasemolas por referencia. Tambien podr�amos usar una LOCAL objeto TARRAY y esta nos sirve para pasar argumentos cientos de varialbes en 1 sola. OLVIDEMONOS qure existen las PRIVATE !!!!! CONCLUSION: Si optimizamos el codigo de una aplicacion lograremos: 1) 2) 3) 4)
Mayor rapidez Mayores disponibilidad de resursos Menores errores GPF (seran casi imposibles de visualizar) Un codigo mas legible
22.- Una forma muy buena de armar todos los controles es ponerle la clausula UPDATE De esta forma efectuas los cambios de las variables y solo tenes que hacer oDlg:update() y listo se refresca todo el dialogo.
23.- para que no se pueda editar el get debes poner la condicion WHEN .F. 24.-como poner color a los static text? > > > > > > > >
Estimados amigos como se hace para poner color a los static text generados desde el Work Shop. �Se puede hacer desde c�digo? Actualmente para los REDEFINE SAY utilizo REDEFINE SAY oMunicipi VAR cCMunici ID 122 OF Odlg UPDATE; COLOR RGB(000,000,255),RGB(255,255,255) Pero si genero un texto de cabecera al campo desde el Work Shop no se cambiarle el color. �Es posible?
Lo haces de igual manera al ejemplo que mandaste, solo asegurate de que el texto no tenga ID -1 sino un ID valido. 25.-El ENTER se comporta como en Clipper-DOS. Si a ti no se te comporta asi, entonces entra al WS, y en los dialogos, le pones a cada boton (en sus propiedades), PUSH BUTTON en vez de DEFAULT PUSH BUTTON. 26.-checkbox. Si quieres que una variable logica cambie de estado no uses: if(vclival=.t.,vclival:=.f.,vclival:=.t) es mas facil y mas limpio usar: vclival := !vclival, de esta manera te olvidas de las preguntas.... ;) 2) El valor de vclival cambia dependiendo del estado de checkbox..... no veo para que lo cambias vos en el programa. PS: Tienes un ejemplo MUY SENCILLO EN SAMPLES\TESTCHCK.PRG el error parece estar en que la variable vClival se cambia sola, y si tu en el programa la cambias, pues vuelve a lo mismo. intentalo as�: ON CLICK (CAMBIAR('CLIENTES','CLI_VAL',IF(VCLIVAL,'SI','NO') ) )
27.- > Asunto: [fivewin-la] alguien sabe de algun gestor tipo dbu para windows > que use cdx?? >Prometheus de Daniel Andrade (Free) http://www.dbwide.freeservers.com/ 28.-Alineacion en los gets numericos En la pagina de Rene Flores (Cibertec) viene una seccion de tips para fivewin . Me he bajado varios, os la recomiendo a todos Segun AL, la solucion era : ademas de decirle alineacion derecha, el declarar el get como multilinea No tiene logica pero funciona. antes era horroroso Editando el numero sale bien, con la coma y demas 29.-Aqui van direcciones donde podes conseguir manuales e informacion en general sobre FiveWin. http://Olivares2000.WebHostMe.com/ Grupo Olivares 2000 http://here.as/FiveWin/ Patrick Mast's FiveWin Page http://start.at/edf "E.D.F" de Trucos http://members.tripod.cl/fivewin Fivewinweros de chile http://personales.mundivia.es/rar/ http://teleline.terra.es/personal/ravendano/SOBREFW.HTM Sobre FiveWin http://users.fast.co.za/~georgem/ George's Little Web Page http://www.aglsl.com/cincowin/ Cinco Win, la casa del programador en Fivewin http://www.aulaware.com/ FiveWin http://www.ciber-tec.com/ Cibernética y Tecnología, S.A. de C.V Home Page http://www.come.to/manuales http://www.eclipse.com.mx/web/fivewin/ Directory of /web/fivewin/
http://www.fivetech.com/ Fivetech: Xbase technology http://www.grafxsoft.com/ GrafX Software CA MicroSoft Imprise Development Tools http://www.htcsoft.freeservers.com/ htcsoft http://www.olsonsoft.co.nz/ The Olson Software Web Site http://ourworld.compuserve.com/homepages/jbott James Bott Intellitech - Computer Consulting for Small Business http://www.argcon.net/manual5w/ hay un manual recien subido En mi sitio tambien podes bajar un generador de aplicaciones, WiseCoder. (Esta en desarrollo) Mi sitio: http://www.citynet.com.ar/verger/wisecoder.htm 30.-Problemas con impresora cuando el operador pide un listado, generalmente le pongo printersetup() para que pueda seleccionar impresora, papel o lo que fuese, Pienso que el Boton cancelar "No es para Cancelar" la impresion, sino para Cancelar la accion de haber tomado otro tipo de papel, u otra impresora, en el dialogo de Printersetup(). Yo lo hago asi: Un dialogo de captura de datos (el rango de fechas), con 3 botones: Un boton OK (que dispara la impresion) Otro boton Setup , que debera disparar el Printersetup() (pero sin imprimir). Y otro Boton de Cancelar (este si cancela el listado). Si el usuario quiere cambiar el tama�o del papel, por ejemplo; entonces 1ero. pulsa Setup. Luego de cambiar, el programa le vuelva a presentar el dialogo anterior, y pulsa OK para imprimir. : 31.-Mas sobre estaticas S� que funciona: ya s� que no se pueden colocar sentencias ejecutables fuera de las funciones o procedimientos. La soluci�n para una variable est�tica externa es la siguiente: static aArrayVars FUNCTION Main() DEFAULT aArrayVars := Array( 30 ) RETURN NIL 32.-No se ven los dialogos creados en WS. Yo tampoco podia leer el dialogo 12 (el 9 si lo vi bien), y lo que hice fue exportarlo a DIAL12.RC (resource/save resource as/) y lo edite con un editor de texto y me di cuenta que traia un control VBX, lo quite, y luego lo importe (FILE/ADD TO PROYECT) pero antes, cambiale el nombre del recurso (DIALOG_12 en el .RC) para que no se repita en tu DLL. 33.-PROCESOR TABLE OVERFLOW...... > Se me bloquea en un modulo de indexado que sacado de la aplicacion y hecho
> aparte funciona perfectamente , indexando hasta el final > sysrefresh() por todos los sitios y nada ....
Ya le he puesto
Estas compilando con 5.2? Si asi es trata de linkear con ALLOC.obj..... > Al compilar uno de los prg me da memory overboked, pero lo compilo con lh > clipper ... y a pesar de que da el error no se sale, sigue hasta el > final --Algunos colegas recomendaron no utilizar LH clipper, la razon es que anula el mensaje pero este continua!! :(((( Te has tropezado con la pesadilla de la mayoria: PROCESOR TABLE OVERFLOW...... Solucion: No la hay. La unica solucion es quitar los archivos de cabecera *.ch que no vayas a usar. Como por ejemplo: De fivewin.ch quita: OBDC.ch, DDE.ch, Tree.ch (si no usas trees), etc. Y pon: el #INCLUDE FIVEWIN.ch de ultimo en cada prg................... > he probado a recompilar con 5.3 y horror!!! los preprocesor table overflow > que habia logado quitar con un mejor manejo de las variables de memoria, > vuelven en todos los modulos, gestiona peor el preprocesado Hay alguna forma > de aumentarle la memoria de preprocesado??? En 5.2 hay mucho mas probabilidad de que esto no ocurra. Esa es una de las razones por las cuales sigo usando 5.2e. Tenes que eliminar Chs que no utilizas, como colocando estas definiciones antes de FIVEWIN.CH, este los llama y esta es la forma de anular las llamadas. Otra cosita: Te recomiendo que armes prgs donde requieran llamadas especificas juntos. Por ejemplo: impre.prg // defini este funciones para imprimir de esta forma solo aca nesesitas por ejemplo REPORT.CH, y en los otros no!! 34.- El problema tambien me ocurria.. el problema no se si lo solucione pero los dialogos se crean... cuando utilizaba por ejemplo el SET RESOURCE TO "ELARCHIVO.DLL" siempre me daba el problema, pero cuando lo hice de esta forma SET RESOURCE TO "C:\PROGRAMAS\...\ELARCHIVO.DLL" comenzo a funcionar, raro, si le indicaba toda la ruta funciona y si no se la doy surge el problema.. 35.-DLL`s Al cambiar de maquina, tenes que copiar el bwcc.dll al directorio \windowsDir\system, no hace falta que lo tengas en otro lugar.
Tienes que tener tambien en ese dir. ctl3d.dll, el que viene con FW. Si tenes problemas, puede ser que alguno este con problemas. SET RESOURCES TO loadlibrary("bwcc.dll") SET RESOURCES TO "MENU.DLL" 36.-Manejo de fuentes > > @ 7, 13 CHECKBOX Pagado PROMPT "Pagar &Importe" ; > OF oDlg prueba esto: Pagado:SetFont(oWnd:oFont) o incluso esto otro: Pagado:SetFont(oDlg:oFont) Por cierto, el define del oDlg lo referenciastes al oWnd? Es decir lo hiciste parecido a esto: DEFINE DIALOG oDlg OF oWnd En caso contrario creo que el oDlg no toma como oFont el del oWnd. 37.-filtros dentro de tu indices (scopes) puedes usar la clausula Select del comando @...ListBox, el cual te permite hacer filtros dentro de tu indices (scopes). Es algo como : @ 1,1 ListBox oLbx ; FIELDS Clientes->Nombre , Clientes->Deuda ; HEADERS "Nombre", "Deuda" ; FIELDSIZES 100,400 ; SELECT Nombre FOR "America" TO "Pedro" OF oDlg 38.- Y una de las mejores... No funcionaba fivewin 2.0; decia que faltaba una funcion voy a fivewin.lnk cambio el search por lib y !funciona !!! O sea que a veces hay que hacer lo contrario de lo que dicen..... 39.- Trucar los valid.. En una rutina de calculo necesito hacer unos calculos con unos gets numericos; el on change no funciona, el valid no "vale" puesto que no puedo utilizar parametros; solucion, intermedia, utilizar partes de uno y otro: REDEFINE GET gDIV_LITOT VAR vDIV_LITOT ID 122 OF odlg 99.999999" update READONLY // para el resultado
PICTure
"@E
REDEFINE GET gDIV_LIRAS VAR vDIV_LIRAS ID 102 OF odlg valid(vDIV_LITOT :=vDIV_LIRAS /vDIV_LICAM,odlg:update(),.t. ) // operacion fijaos en el .t. despues de update() !! Este es el truco!!! Se puede utilizar valid con comandos, sin funciones
*************** RESPETAD ESTO,POR FAVOR ********************************** Principales autores de estos trucos: Juan Jose Machado. Jos� Enrique Serrano Exp�sito, Fabi�n Acevedo ,Antonio Linares, Luciano Cedr�s, Hernan ,Marcelo Montenegro, Martin Gomez Reyes, Guillermo Verger Eduardo Rizzolo,F�lix Pablo Grande Ramos,Fredy, The Full y muchos mas ... Yo solo me he limitado a preguntar cosas y a recogerlas Angel Martin (Bilbao.-Espa�a)