Page 1 of 1

Migrar formularios FW a la Web (WebForm) Ver 1.1

Posted: Thu Jan 28, 2010 5:49 am
by Vladimir Zorrilla
Amigos

La idea es poder migrar los formularios que hacemos en FW ya sea con workshop o codigo puro a formularios html
(WebForm) conservando el diseño , color , fuentes , datos de los combos , mascaras de edicion y que se pueda usar
ENTER en vez de TABS.

Como lograr esto.

Pues aqui os dejo una simple funcion que uds pueden invocar en cualquier evento luego de la creacion del dialogo

Ejemplo

DEFINE DIALOG oDlg

/// AQUI ESTAN TUS CONTROLES

ACTIVATE DIALOG oDlg CENTERED ;
ON LEFT CLICK GenWebForm(oDlg,"MIFORMFW")


Esto genera un archivo MIFORMFW.htm que recrea tu formulario en la web.


Func GenWebForm(oForm,filefrm)
Local cHtm:="<html>"+H(),octrl,K:=1,cstyle,i,ctype
htmlhead( @cHtm ,filefrm )
cHtm+="<body>"+h()
cHtm+='<form name="'+filefrm+'" action="'+filefrm+'.php" method="post">'+h()

WHILE K<=len(oForm:aControls) // DISCRIMINAR el resto de las CLASES
//msgalert( oForm:aControls[K]:classname() )
IF oForm:aControls[K]:classname()="TSAY" .or. oForm:aControls[K]:classname()="TGET" .or. oForm:aControls[K]:classname()="TBUTTON" .or. oForm:aControls[K]:classname()="TRADIO" .or. oForm:aControls[K]:classname()="TCHECKBOX" .or. oForm:aControls[K]:classname()="TBITMAP" .or. oForm:aControls[K]:classname()="TIMAGE" .or. oForm:aControls[K]:classname()="TCOMBOBOX"
octrl:=oForm:aControls[K]
cstyle:=' style="width: '+ltrim(str(octrl:nwidth))+'px; height: '+ltrim(str(octrl:nheight))+'px"'
cHtm+='<div class="Estilo1" style="position:absolute; top:'+ltrim(str(octrl:nTop))+'px; left:'+ltrim(str(octrl:nleft))+'px;">'+h()
do case
case octrl:classname()="TSAY"
cHtm+=octrl:cCaption+h()
case octrl:classname()="TGET"
cHtm+='<input '+cstyle+' type="Text" onkeypress="return tabular(event,this)" name="'+qcosaesname(octrl)+'" id="'+ltrim(str(octrl:nId))+'" value="" size="12">'+h()
case octrl:classname()="TCOMBOBOX"
//cHtm+='<SELECT multiple size="4" name="elegir-componente">
cHtm+='<SELECT '+cstyle+' onkeypress="return tabular(event,this)" id="'+ltrim(str(octrl:nId))+'" name="'+qcosaesname(octrl)+'">'+h()
//<OPTION selected value="Componente_1_a">Componente_1</OPTION>
For i=1 to len(octrl:aItems)
cHtm+='<OPTION>'+octrl:aItems+'</OPTION>'+h()
Next i
cHtm+='</SELECT>'+h()
case octrl:classname()="TBUTTON"
ctype="button"
if alltrim(uppe(octrl:cCaption))="GRABAR"; ctype="submit"; endif
if alltrim(uppe(octrl:cCaption))="RESTAURAR"; ctype="reset"; endif
// usar solo apostrofes dentro del blcliked
cHtm+='<BUTTON '+cstyle+' id="'+ltrim(str(octrl:nId))+'" name="'+qcosaesname(octrl)+'" value="'+octrl:cCaption+'" type="'+ctype+'" >'+h()
cHtm+=octrl:cCaption+'</BUTTON>'+h()

case octrl:classname()="TRADIO"
cHtm+='<input '+cstyle+' type="radio" name="'+qcosaesname(octrl)+'" id="'+ltrim(str(octrl:nId))+'" value="'+ltrim(str(octrl:nId))+'" size="12">'+octrl:cCaption+h()

case octrl:classname()="TCHECKBOX"
cHtm+='<input '+cstyle+' type="checkbox" name="'+qcosaesname(octrl)+'" id="'+ltrim(str(octrl:nId))+'" value="" size="12">'+octrl:cCaption+h()

case octrl:classname()="TBITMAP" .OR. octrl:classname()="TIMAGE"
//cHtm+='<IMG '+cstyle+' id="'+ltrim(str(octrl:nId))+'" SRC="'+alltrim(octrl:crutabitmap)+'">'+h()

endcase
cHtm+='</div>'+h()

ENDIF
K++
ENDDO
cHtm+="</body>"+H()
cHtm+="</html>"+H()
FERASE(filefrm+".HTM")
MEMOWRIT(filefrm+".HTM",cHtm)
WAITRUN( "c:\archiv~1\intern~1\iexplore "+filefrm+".HTM")
RETU .T.

Func qcosaesname(octrl)
retu(ltrim(str(octrl:nId)) )


FUNC htmlhead( cHtm,filefrm )
cHtm+="<head>"+H()
cHtm+="<title>"+filefrm+"</title>"+H()
cHtm+='<style type="text/css">'+H()
cHtm+='<!--'+H()
cHtm+='.Estilo1 {'+H()
cHtm+=' font-size: 11px;'+H()
cHtm+=' font-family: Geneva, Arial, Helvetica, sans-serif;'+H()
cHtm+='}'+H()
cHtm+='body {'+H()
cHtm+=' background-color: #E8E8E8;'+H()
cHtm+='}'+H()
cHtm+='-->'+H()
cHtm+='</style>'+H()

cHtm+="<script>"+H()
cHtm+="function tabular(e,obj) {"+H()
cHtm+=" tecla=(document.all) ? e.keyCode : e.which;"+H()
cHtm+=" if(tecla!=13) return;"+H()
cHtm+=" frm=obj.form;"+H()
cHtm+=" for(i=0;i<frm.elements.length;i++)"+H()
cHtm+=" if(frm.elements==obj)"+H()
cHtm+=" {"+H()
cHtm+=" if (i==frm.elements.length-1)"+H()
cHtm+=" i=-1;"+H()
cHtm+=" break"+H()
cHtm+=" }"+H()
/*ACA ESTA EL CAMBIO disabled, Y PARA SALTEAR CAMPOS HIDDEN*/
cHtm+=" if ((frm.elements[i+1].disabled ==true) || (frm.elements[i+1].type=='hidden') )"+H()
cHtm+=" tabular(e,frm.elements[i+1]);"+H()
/*ACA ESTA EL CAMBIO readOnly */
cHtm+=" else if (frm.elements[i+1].readOnly ==true )"+H()
cHtm+=" tabular(e,frm.elements[i+1]);"+H()
cHtm+=" else {"+H()
cHtm+=" frm.elements[i+1].select(); /* AÑADIR LOS CORCHETES Y ESTA INSTRUCCION */"+H()
cHtm+=" frm.elements[i+1].focus();"+H()
cHtm+=" }"+H()
cHtm+=" return false;"+H()
cHtm+="}"+H()
cHtm+=""+H()
cHtm+="</script>"+H()
cHtm+="</head>"+H()
retu .t.

Func h
retu( chr(13)+chr(10))







Las etiquetas en el objeto DOM se dibujan en los editores html por defecto en posiciones realtivas es decir se van colocando una detras de otra y responden a un flujo , de manera que si colocan otra etiqueta estas se acomodan a esa insercion.

Esta funcion crea los controles FW en etiquetas encerradas en capas DIV y establece posiciones absolutas fijas que coinciden
con los valores ntop nleft de dichos controles en FW.

El dato nID de cada control FW pasa a ser el ID de cada etiqueta oara identificar al control.

Esto es solo un inicio estan solo controles basicos y no se como leer los eventos asociados a un control en tiempo de ejecución
La idea seria leerlos y asignarlos a funciones Java Script.



Agradeceria se sirvan expresar sus ideas de como poder migrar una aplicacion FW a la WEB usando
JQUERY AJAX y PHP.

De momento estoy trabajando la migracion de los browses usando las librerias GRID de JavaScript

La idea es que lo hagamos en FW se migre a la web, es decir usar FW como un framework y a la vez poder
tener el trabajo en ambiente escritorio y ambiente web.


Saludos

Re: Migrar formularios FW a la Web (WebForm) Ver 1.1

Posted: Fri Jan 29, 2010 11:15 am
by csincuir
Hola Vladimir.
Felicitaciones por tu trabajo, esta muy Interesante.
He hecho pruebas con tu codigo, y me he dado cuenta que se necesita que todo control sea definido y tener una variable de objeto.
Me explico; yo tengo por costumbre que a los controles say's creados desde el workshop, no los defino, y muchas veces los botones no les coloco una variable:

Code: Select all

DEFINE BUTTON ID 20 OF oDlg ACTION oDlg:End() CANCEL
Con esta deficion, obtengo un error, ya que "octrl:cCaption" de devuelve NIL
Y con todas las etiquetas Say's que tengo en el dialog .rc, y que no defino, simplemente no aparecen en el formulario Web.

Pero bueno, es una buena manera de optimizar mas la forma de programar.

Nuevamente felicitaciones y gracias por compartir tus conocimientos.

Carlos Sincuir

Re: Migrar formularios FW a la Web (WebForm) Ver 1.1

Posted: Sat Jan 30, 2010 8:26 am
by Silvio
there is a old class no fwh made for it...

Re: Migrar formularios FW a la Web (WebForm) Ver 1.1

Posted: Mon Feb 01, 2010 11:40 am
by WilliamAdami
muy interessante, existe algum exemplo funcionando en la web ?

Muchas Gracias

William

Re: Migrar formularios FW a la Web (WebForm) Ver 1.1

Posted: Mon Feb 01, 2010 6:07 pm
by Silvio
There was a class (xWeb) of francisco Garcia many year ago made : if you search U found!!

Re: Migrar formularios FW a la Web (WebForm) Ver 1.1

Posted: Wed Feb 03, 2010 8:22 pm
by WilliamAdami
Silvio, no encontro la classe Xweb , usted possui o LINK ?

Gracias

William

Re: Migrar formularios FW a la Web (WebForm) Ver 1.1

Posted: Thu Feb 04, 2010 10:26 am
by Silvio
Search Olivares group

Re: Migrar formularios FW a la Web (WebForm) Ver 1.1

Posted: Fri Feb 05, 2010 3:47 am
by jll-fwh
Hola Vladimir Zorrilla:

Como dice Silvio, francisco garcia ( un genio de FW ) hace años creo una clase ( TWeb sino recuerdo mal ) muy buena para crear entornos .HTML con FW16bits, en su momento la testee y era fantastica y tenia todos los controles.

Ponte en contacto con Paco y te la enviara gustosamente, es una persona genial.

Sino tienes su correo, enviame un correo a mi cuenta personal y te doy su cuenta de e-mail.

Un saludo
JLL
jllorispersonal@ono.com

Re: Migrar formularios FW a la Web (WebForm) Ver 1.1

Posted: Sat Feb 06, 2010 8:46 am
by Silvio
RIght I found also in fivewin.br.com

Re: Migrar formularios FW a la Web (WebForm) Ver 1.1

Posted: Sat Feb 06, 2010 10:25 am
by WilliamAdami
Silvio, the tool inside of www.fivewin.com.br is WxWEB of Vailton Renato. The xWeb of francisco Gracia i don´t found. The Olivares Group page don´t exist.

I don´t found the xWeb class for download

WilliamAdami

Re: Migrar formularios FW a la Web (WebForm) Ver 1.1

Posted: Sat Feb 06, 2010 10:58 am
by Silvio
perhaps some erase it now