Migrar formularios FW a la Web (WebForm) Ver 1.1
-
- Posts: 225
- Joined: Tue Feb 28, 2006 4:25 pm
- Location: PERU
Migrar formularios FW a la Web (WebForm) Ver 1.1
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[i]+'</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[i]==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
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[i]+'</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[i]==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
ME INTERESA FW Y XHB POR SER OPEN SOURCE
-
- Posts: 415
- Joined: Sat Feb 03, 2007 6:36 am
- Location: Guatemala
- Has thanked: 3 times
- Been thanked: 2 times
- Contact:
Re: Migrar formularios FW a la Web (WebForm) Ver 1.1
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:
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
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 | Expand
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
there is a old class no fwh made for it...
Best Regards, Saludos
Falconi Silvio
Falconi Silvio
-
- Posts: 68
- Joined: Tue Apr 14, 2009 9:26 pm
- Location: Brasil
Re: Migrar formularios FW a la Web (WebForm) Ver 1.1
muy interessante, existe algum exemplo funcionando en la web ?
Muchas Gracias
William
Muchas Gracias
William
Re: Migrar formularios FW a la Web (WebForm) Ver 1.1
There was a class (xWeb) of francisco Garcia many year ago made : if you search U found!!
Best Regards, Saludos
Falconi Silvio
Falconi Silvio
-
- Posts: 68
- Joined: Tue Apr 14, 2009 9:26 pm
- Location: Brasil
Re: Migrar formularios FW a la Web (WebForm) Ver 1.1
Silvio, no encontro la classe Xweb , usted possui o LINK ?
Gracias
William
Gracias
William
Re: Migrar formularios FW a la Web (WebForm) Ver 1.1
Search Olivares group
Best Regards, Saludos
Falconi Silvio
Falconi Silvio
Re: Migrar formularios FW a la Web (WebForm) Ver 1.1
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
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
Libreria: FWH/FWH1109 + Harbour 5.8.2 + Borland C++ 5.8.2
Editor de Recursos: PellecC
ADA, OURXDBU
S.O: XP / Win 7 /Win10
Blog: http://javierlloris.blogspot.com.es/
e-mail: javierllorisprogramador@gmail.com
Editor de Recursos: PellecC
ADA, OURXDBU
S.O: XP / Win 7 /Win10
Blog: http://javierlloris.blogspot.com.es/
e-mail: javierllorisprogramador@gmail.com
Re: Migrar formularios FW a la Web (WebForm) Ver 1.1
RIght I found also in fivewin.br.com
Best Regards, Saludos
Falconi Silvio
Falconi Silvio
-
- Posts: 68
- Joined: Tue Apr 14, 2009 9:26 pm
- Location: Brasil
Re: Migrar formularios FW a la Web (WebForm) Ver 1.1
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
I don´t found the xWeb class for download
WilliamAdami
Re: Migrar formularios FW a la Web (WebForm) Ver 1.1
perhaps some erase it now
Best Regards, Saludos
Falconi Silvio
Falconi Silvio