Blog sobre programación en VFP, Actualizado por Jorge Mota en Guatemala ;)



Archivo MensualNoviembre 2006



Desarrollo & API 30 Nov 2006 02:00 am

Crear Formularios Redondos con VFP

Para cuando quieran crear formularios un poco diferentes a los típicos cuadrados :)

Public oFrm
oFrm = Createobject('Form_Redondo')
oFrm.Show()
Return

Define Class Form_Redondo As Form
	Procedure Load
		Local hRgn
		Declare Integer SetWindowRgn In user32 ;
			integer HWnd, Integer hRgn , Integer bRedraw
		Declare Long CreateEllipticRgn In "gdi32" Long X1, Long Y1, Long X2, Long Y2
		hRgn = CreateEllipticRgn(22,20,This.Width,This.Height)
		SetWindowRgn(This.HWnd, hRgn, 1)
	EndProc
EndDefine

Desarrollo & API 29 Nov 2006 07:06 pm

Cerrar Sesión de windows desde VFP

, , , , , , ,

Bueno, pues volvemos a la carga, esta vez para mostrar un API de windows no documentada :)

Declare Long FreeLibrary In "kernel32" Long hLibModule
Declare Long LoadLibrary In  "kernel32"  String lpLibFileName
Declare Long GetProcAddress In "kernel32" Long hModule, Long lpProcName
Declare Long CallWindowProc In "user32" Long lpPrevWndFunc, Long handle, String Msg , Long wParam, String Lparam
On Error ?''
Local lb As Long
Local pa As Long
lb = LoadLibrary("Shell32")
pa = GetProcAddress(lb, 60)
?CallWindowProc(pa+2, _Screen.HWnd, "Cerrar Sesion", 1, "0")
FreeLibrary(lb)
On Error 

Si no quieren pedir la confirmación, en Portalfox.com existe un artículo al respecto, y en uno de los comentarios esta la rutina :)

Hasta la próxima

, , , , , , ,

API 24 Nov 2006 06:10 am

Descargar un Archivo desde Internet

El código necesario para descagar un archivo desde internet, es usando el API de windows:

Declare DoFileDownload IN shdocvw.dll STRING lpszFile
DoFileDownload(STRCONV("http://fox.desdeguate.com/favicon.ico",12))

Esto mostrará el cuadro de dialogo Guardar como… de Internet Explorer.

Descarga de Archivos con Internet Explorer

Saludos.

Trucos 23 Nov 2006 06:00 am

Obtener un listado de los links de una página web

Bueno, luego de la función para obtener una “versión de solo texto de una página web” les traigo otra función que devuelve el listado de vinculos dentro de la página web que le indiquemos como parametro.

su uso es sencillo:
Mostrandolo en la pantalla de VFP

?GetPageLinks("http://google.com")

Grabando el listado en un archivo de texto:

Strtofile(GetPageLinks("http://google.com"), "c:/google_links.txt",0)

El código de la función es este:

Function GetPageLinks(cUrl As String) As String
	Local Texto, oIE, cResul, oDoc
	oIE = Createobject("InternetExplorer.Application")
	oIE.Navigate2(cUrl)
	Texto ="Procesando página"
	Do While oIE.busy
		Wait Window Texto Nowait
	Enddo
	Wait Window Texto  Timeout 1.5
	*Para forzar a que IE termine de cargar la página
	oDoc = oIE.Document
	Texto = Type("oDoc.body")
	lntotal = oDoc.links.Length
	cResul =[]
	For lnCiclo  = 0 To oDoc.links.Length-1
		elemento =oDoc.links.Item(lnCiclo).toString()+Chr(13)+Chr(10)
		cResul = cResul + elemento
	Endfor
	Wait Clear
	oDoc = .Null.
	Release oDoc
	oIE.Quit
	Release oIE
	Return cResul
Endfunc

Saludos y hasta la próxima

Trucos 22 Nov 2006 06:00 am

Obtener una versión “solo texto” de una página web

Bueno, en esta ocasión les presento una función que permite obtener el texto de una página web, sin el html de la misma, no tiene formato.

El uso es sencillo, el siguiente ejemplo muestra en la pantalla de VFP, la versión solo texto de “Google”.

?GetPageasTxt("http://google.com")

Otro Ejemplo, sería grabarlo a un archivo de texto:

=Strtofile(GetPageasTxt("http://google.com"), "c:/google.txt",0)

El código de función a continuación:

Function GetPageasTxt(cUrl As String) As String
	Local Texto, oIE, cResult, oDoc
	oIE = Createobject("InternetExplorer.Application")
	oIE.Navigate2("about:blank")
	oIE.Navigate2(cUrl)
	Texto ="Procesando página"
	Do While oIE.busy
		Wait Window Texto Nowait
	Enddo
	Wait Window Texto  Timeout 1.5
	*^para forzar a que IE termine de cargar la página
	oDoc = oIE.Document
	Texto = Type("oDoc.body")
	= oDoc.body.innerText()
	cResult = oDoc.body.innerText()
	Wait Clear
	oDoc = .Null.
	Release oDoc
	oIE.Quit
	Release oIE
	Return cResult
Endfunc

Como mención sobre su código, solo basta decir que usa Internet Explorer, para obtener la versión solo texto del mismo, y en mi máquina es necesario tener el Wait Window Texto timeout 1.5 debido a que de lo contrario devuelve una cadena vacía.

Saludos y hasta la próxima.

Desarrollo 18 Nov 2006 06:30 am

¿Qué es un framework? ¿Cómo seleccionar un Framework?

, , , , , , ,

Básicamente un framework es una especie de esqueleto que contiene mucho código útil, reutilizable y que nos permite basarnos en ese código para escribir nuestras aplicaciones, por ejemplo, muchos programadores de VFP, cada vez que crean un nuevo formulario, van al formulario que hicieron anteriormente, y copian el código de sus métodos grabar y lo pegan en el método correspondiente del nuevo formulario, y empiezan a cambiar el código para adaptarlo al nuevo. El uso de un framework, les evitaría eso, crean una forma en una clase del framework, que ya tiene código que sabe Grabar / agregar / modificar y borrar, brindando una facilidad, si se quiere que antes de grabar en todas las formas se validen los datos, solo haría falta en el código de la clase en la que se basan las formas escribir al inicio

If not thisform.ValidarDatos ()
Messagebox (“no se puede grabar por validación”)
Return .f.
Endif

Y luego en cada forma escribir el código de validación de cada forma en específico y no modificar cada código de grabar de cada forma, si una forma no tiene validación basta con dejar el código en blanco o un simple Return .T. bastara también.

Además de cualquier cosa, el usar un framework siempre le brindara código listo para usar, además le brindara funciones y librerías útiles que usted puede usar, el que yo uso, me brinda desde barras de progreso, control de usuarios, inicios de sesión, Acceso a formas/procesos/reportes por usuario, búsquedas incrementales en cuadros de texto (textbox), grid con multiselección, grid auto ordenable, y un sin fin de cosas más.

Si no le gusta la idea de comprar uno, o no tiene las posibilidades de comprarlo, puede crear usted mismo el suyo, existe un libro realmente bueno de Hentzenwerke y lo puede conseguir acá, además de los Frameworks  gratuitos y de los mencionados anteriormente, si usted selecciona Visual FoxExpress también puede comprar el libro en Hentzenwerke que le ayudara a iniciar con el producto.


Seguir leyendo »

, , , , , , ,

Desarrollo 17 Nov 2006 08:36 am

Usar un framework… he allí el dilema…

, , , , , ,

Bueno, desde hace rato he venido platicando con amigos, conocidos, contactos en el messenger, y veo que casi ninguno usa o ha usado un framework con vfp, muy pocos estan usando alguno propio. Yo he estado utilizando VMP durante un buen tiempo, y antes de eso use mucho CodeMine y probe algunos otros como MereMortals que también tienen una versión para .Net y también tuve tiempo de probar ProMatrix, aunque existen frameworks gratuitos como el CodeBook (en el que esta basado el framework comercial Codemine) y algunos comerciales no tan conocidos Visual FoxExpress, o Visual Extend supongo que muy poca gente conoce de la existencia de los mismos.

Siempre me preguntan, que ventajas obtengo, o si no van a perder demasiado tiempo aprendiendo a usarlo, etc. Por lo que voy a enumerar una pequeña lista de lo que yo he ganado usando un framework.

Ventajas

  • Aplicaciones Multi-backEnd (mis apps, corren contra Sql Server, MySql, VFP, Oracle sin ningún cambio)
  • Estandard en la interfaz (todas las formas usan una barra de herramientas, una misma forma de búsqueda, etc.)
  • Rápidez para crear mantenimientos sencillos (creo la forma, establezco unas propiedades y ya tengo un ABC)
  • Controles extendidos (Búsqueda incremental en textbox, grids autoordenables, controles Movers, etc)
  • Apoyo externo (si compras la licencia del framework y te atoras, la gente del framework te apoyara)

Desventajas

  • Dificil depurar en algunas circunstancias (te puedes atorar con algun bug del framework)
  • En algunos casos la curva de aprendizaje es larga (sobre todo si no se te da muy bien lo del inglés)

En el wiky de fox (en inglés) existe buen tema sobre las diferentes capacidades de cada framework, también existe un artículo relacionado a como seleccionar un framework.

Como ultima mención vale la pena mencionar los frameworks especializados en x Acción, como WebConnection orientado a la programación en el web o FoxDataObjects, que permiten acceder a multiples motores de base de datos, sin ningún cambio de programación, incluso maneja las relaciones en la base de datos por uno, también FoxFire, que nos permite gestionar nuestros reportes y darle la opción al usuario de crear los propios.

Para los que estan pensando migrar de VFP a .Net y esten buscando un buen framework (StrataFrame).
Antes de decidir si usar o no un framework creo que las preguntas que se debe hacer uno mismo son:

  • ¿Estoy programando una y otra vez la misma funcionalidad?
  • ¿Pierdo tiempo escribiendo la rutina grabar/borrar con cada base de datos?
  • ¿Estoy constantemente buscando clases/rutinas para hacer alguna acción?

Aunque esta ultima no desaparecera del todo, vera que un framework le ayudara en muchas de sus necesidades como programador.

Hasta la próxima.

, , , , , ,

Anuncios 13 Nov 2006 12:18 pm

Reviewme, Pagame por escribir sobre lo que me gusta :)

Pues eso, aunque este es un blog sencillo, con no muchas entradas, espero que pueda seguir subiendo de nivel :) y de cantidad de visitantes, siempre disfruto escribiendo algún nuevo truco, clase, o preparando cualquier post al respecto, así que cuando alguien me dice, oye, te gustaría seguir escribiendo sobre lo mismo, y que te paguen por hacerlo? y pues claro a quien no le va a gustar esa idea? así que me decidí a probarlo, a hacer un review y ver como me va.

Algo que me ha gustado mucho es que no importa si tu blog es en español, inglés o cualquier otro idioma, siempre y cuando adviertas que es un post “patrocinado” por ReviewMe es todo lo que necesitas, además, en la misma faq del sitio hay una pregunta que dice, si todos los reviews que escribas deben ser positivos, o a favor de lo que estas escribiendo, y allí mismo aclaran la duda, no, no tiene por que ser positivo, tú sigues escribiendo como siempre, en tu estilo y si te gusta o no.

Aunque claro, al ser obligatorio para entrar al sistema escribir un “review” sobre ReviewMe me parece que veremos muchos blogs infestados del primer post patrocinado, lo cual no es necesariamente malo, pero quizá si molesto al inicio leer por todos lados sobre el mismo sitio.

Así que ya lo saben, si quieren ganar algo de dinero escribiendo algunos “reviews”, solo deben darse de alta en www.ReviewMe.com :).

Saludos y hasta la próxima.

Sin Categoría 10 Nov 2006 12:58 pm

Migrando de Movable Type a Word Press

Bueno, despues de mucho tiempo, al fin me decidí a migrar, aunque me gustaba mucho movable type, al tener toda la interfaz en español, ayuda, etc, tuve un par de problemas que no fui capaz de resolver :) asi que mientras me acostumbro, la dirección anterior  seguira funcionando unos días más, sobre todo en lo que google indexa este, desaparecera el día martes, así que actualizar marcadores y la dirección del feed. :)

Saludos.

Desarrollo & Ideas 09 Nov 2006 03:09 pm

Permitiendo navegar en las tablas al usuario…

Hace poco ví una pregunta en el news de Microsoft, sobre como poder dar la opción a un usuario para navegar “browse” para los amigos, a una tabla, pero en un grid, y que la forma sepa que campos debe usar, digamos para x Tabla, es decir, se le pide que muestre la forma Contactos, y que solo muestre los campos Nombre, Apellidos y Teléfono.

Seguir leyendo »