Archivo MensualDiciembre 2006
Desarrollo & Ideas 28 Dic 2006 01:42 pm
Guardando logs… iLog
Bueno, esta vez de regreso con un programita un tanto sencillo, que nos permite generar un log sencillo de un proceso dado.
un ejemplo de uso:
Local oLog As oLog Of iLog.prg
oLog = Newobject("oLog")
lnTime = Datetime()
oLog.icLog = "C:log_prueba.txt"
oLog.agregar("Inicio del log","*Inicio*")
lnCont = 0
For lnCiclo = 1 To 10000
If lnCont >= 7
If Mod(lnCiclo,3)!=0
oLog.agregar("Ocurrió un error interno #" +;
Transform(lnCiclo),"Error")
lnCont = 0
Else
oLog.agregar("Evento Procesado" + [# ] +;
Alltrim(Transform(lnCiclo)),"Proceso")
Endif
Else
oLog.agregar("Nuevo evento" + [# ]+;
Alltrim(Transform(lnCiclo)),"Evento")
Endif
lnCont = lnCont + 1
Wait Window trans((lnCiclo/10000) * 100,[###]) + [%] Nowait
Endfor
oLog.agregar("Final del log","*Fin*",.T.)
Messagebox([Tiempo utilizado para registrar 10,000 eventos: ] +;
Transform(Datetime()-lnTime) + [ segs.])
La clase cuenta con una propiedad icLog que es el archivo de Texto en el que deseamos generar el log, también el método Agregar, que requiere de 3 parametros, los primeros 2 son necesarios y son Cadena que queremos almacenar (información del evento) y Tipo del evento: proceso, error, alerta, etc., el tercer parametro, al pasarse como .T. hace que la clase escriba el contenido del log al disco (hasta que se pasa como .T. se genera el log en el disco), también puede invocarse el método GenerarLog() para el mismo resultado.
Una parte del log generado con el ejemplo:
*Eventos registrados * Error: 1333 Evento: 8001 Proceso: 666 12:51:32.87| *Inicio*: Inicio del log 12:51:32.87| Evento: Nuevo evento# 1 12:51:32.87| Evento: Nuevo evento# 2 12:51:32.87| Evento: Nuevo evento# 3 12:51:32.87| Evento: Nuevo evento# 4 12:51:32.87| Evento: Nuevo evento# 5 12:51:32.87| Evento: Nuevo evento# 6 12:51:32.87| Evento: Nuevo evento# 7 12:51:32.87| Error: Ocurrió un error interno #8 12:51:32.87| Evento: Nuevo evento# 9 12:51:32.87| Evento: Nuevo evento# 10 12:51:32.89| Evento: Nuevo evento# 11 12:51:32.89| Evento: Nuevo evento# 12 12:51:32.89| Evento: Nuevo evento# 13
Para descargar el código (incluye el código del ejemplo):
http://fox.desdeguate.com/descargas/vfp/ilog.prg
Saludos y hasta la próxima.
clases, datetime, Desarrollo, fox, Ideas, ilog, librerias, utiles vfp
Desarrollo & Ideas 18 Dic 2006 01:59 pm
Presentando iBrowser (Navegando por las imágenes de un directorio)
En esta ocasión les presento un post pre programado, ya que esta por nacer mi hij@ así que no sé muy bien, cuando va a salir este post, ya que lo estoy preprogramando, para estas alturas ya mi hij@ debe estar a mi lado :).
Esta es una clase que permite navegar por un directorio, mostrar las imágenes en miniatura que contiene, y permitir al usuario seleccionar una imágen:
La clase iBrowser se debe invocar de la siguiente manera:
oImg =Newobject("ibrowser", "iBrowser", "", "C:windows", "bmp,gif,jpg,png", "Seleccione una imágen", "Mensaje de Texto al usuario...",@oValor)
oImg.Show()
- Donde “iBrowser”,”iBrowser” indica el nombre de la clase y vcx en el que se almacena la clase.
- “C:\windows” directorio del que quieren permitir al usuario seleccionar una imágen.
- “bmp,gif,jpg,png” es el filtro de las imágenes que desean permitir al usuario seleccionar, si por ejemplo, necesita que el usuario seleccione únicamente archivos JPG y GIF, escriba “jpg,gif”.
- “Seleccione una imágen”, es el título que tendrá la ventana de iBrowser.
- “Mensaje de Texto al usuario..” es un mensaje corto que desee mostrar al usuario, tal como “Seleccione una imágen para papel fondo de pantalla.”.
- @oValor es una variable que de existir previamente, en la que se almacenará un objeto empty que contiene la ruta al archivo seleccionado en la propiedad icFileName.
iBrowser necesíta de la clase iPanel XP, previamente públicada en este sitio.
También incluye un botón arriba a la izquierda como […] para permitir al usuario moverse de directorio.
clase, Desarrollo, fox, Ideas, ipanel, libreria, resultado de la búsqueda, vcx vfp
Personal 16 Dic 2006 09:50 am
Una nueva foxera ha nacido
Pues eso, el día Sábado a las 4:30 pm nació mi primera hija, pesando 7 libras por cesarea
Su nombre Sashi Rubí, recien regreso del hospital desde ayer, así que en cuanto pueda subir algunas fotografías las veran por acá.
Saludos ![]()
Variado 08 Dic 2006 05:29 am
Este 15 de Diciembre Protesta contra las compañias de teléfono
Bueno, al parecer la campaña anterior de apagar tu teléfono tuvo tanto éxito, que estan convocando a una nueva campaña para apagar el tel, este 15 de diciembre.
Esto me llego al correo hace poco:
Todo esto, como una medida de protesta contra las compañias de telefonía en Guatemala, entiendase Telefonica, Comcel (Tigo) y Claro (Antes PCS).
Ahora bien, realmente esto perjudica en algo a las compañias, si yo apago mi celular, toda la gente que me llame le descuentan un quetzal y lenes de su saldo, por que los mandará a buzón, y si les aviso el 14 que voy a “protestar” apagando mi celular, si lo hago por teléfono, de todos modos les voy a dar plata.
Para este 10 de Diciembre espero ya ser padre :), así que no creo apagar mi celular, espero estar llamando y recibiendo llamadas
ya contare por acá sí se animo a nacer o aún estoy muriendome de los nervios.
Bueno, queda en el tíntero la pregunta.
claro, comcel, compañias de telefonía, de todos modos, guatemala, quetzal, saldo, tigo, toda la gente Variado
Sin Categoría 07 Dic 2006 07:25 pm
¿Por que no comentan en el Blog?
Pues eso, ultimamente he visto como las visitas en el blog se han elevado en un buen porcentaje, y sin embargo, nadie comenta, tengo visitas de Perú, España, República Dominícana, Ecuador, Brasil, Argentina, México, El Salvador, Honduras y Uruguay principalmente, más de 100 diarias, y sin embargo, nadie se atreve a comentar nada, me parece que todos son muy tímidos :P.
Pues eso, a quienes vienen al blog, los invito a que comenten, critíquen, opínen
que creo que es lo que más motiva a escribir y publicar, desde hace rato, cuando veo que alguien comenta, me animo a seguir publicando, de lo contrario, pos nomás me dan ganas de ir publicando 1 vez por semana :).
Ojalá y se animen a comentar
y ya saben este blog esta abierto a publicar lo que deseen ver publicado, también comentarios y cualquier cosa que deseen, nada más ponganse en contacto conmigo, como no, publicando un comentario acá.
Saludos.
Desarrollo & Trucos 06 Dic 2006 08:46 am
Permitiendo al usuario rediseñar la interfaz de nuestra aplicación
¿Cuantas veces hemos deseado poder mover un poquito un control hacia algún lado, redimensionar un grid, o un botón cuando hemos viajado con el cliente y hemos llevado un exe, y la siguiente entrega que haremos, nada más será para hacer un cambio estetico menor?
Algunas veces nos pasa que el cliente nos pide que le pasemos x texto hacia arriba o que pongamos la etiqueta en la que mostramos alguna información abajo en lugar de estar arriba, es decir cambios menores en la interfaz.
Para esos problemas de amor y de cambios de interfaz inesperados llega iDesigner
Para obtener el resultado como en este video (requiere el codec DivX) solo debe arrastrar una instancia de la clase _design_gral al formulario y en algún botón, método, evento o donde prefiera
colocar el siguiente código:
thisform._design_gral.agregar_mod()
Donde _Design_Gral es el nombre de la instancia de la clase que agregó a su formulario.
La clase cuenta con algunas propiedades que deberá establecer:
- cConfiguracion: Archivo en el que se almacenan las propiedades que establezca de cada objeto/formulario (puede grabar la información de varios formularios y sus objetos en la misma tabla, o puede usar uno por formulario).
- cExluir: Listado de las clases base que no deseamos agregar el comportamiento de la clase, el valor predeterminado es “Timer”, “Line”, “Shape”, en la forma de ejemplo, esta configurada a “Timer”, “Line”, por lo que el Shape si permite ajustar el tamaño y posición.
- lMostrarPosicion: Cuando se establece a .T. muestra una ventana con información sobre el ultimo objeto que se ajusto en tamaño/posición como Alto, Ancho, Posición X y Y, permitiendo escribir un valor para cada uno de estos, para una presición mayor en cuanto al ajuste.
- lRecordarForm: Cuando se establece a .T. cada vez que se ejecute el formulario, recuerda la posición y tamaño del mismo.
- nEspacio: Indical el espacio que ocuparan los indicadores de ajuste en pixeles, un valor grande puede ayudar a encontrar el ajustador, pero puede quedar debajo de otro control, si esta muy cerca del mismo, un valor pequeño puede dificultar usar el control, se recomienda que se use entre un rango de 8 y 15.
Al Llamar al Método agregar_mod() de la clase, se muestra un mensaje como este:

Puede modificar la clase frm_aviso para cambiar el mensaje, puede que quiera poner instrucciones sobre el uso de los controles o algún texto en especial.
Cuando la propiedad lMostrarPosicion se establece a .T. al llamar al método agregar_mod(), la clase despliega una ventana donde puede editar la posición y el tamaño del objeto:

Para descargar la clase, clic acá http://fox.desdeguate.com/descargas/vfp/iDesigner.zip y el video de ejemplo para ver la clase trabajando acá.
Para los que no quieran/tengan DivX :
Bueno, eso es todo, hasta la próxima y espero les sirva ![]()
Desarrollo & API 01 Dic 2006 02:28 am
Reiniciar la máquina al realizar un cambio
Algunas veces, luego de que modificamos una configuración en Windows, nos aparece el típico mensaje de “para que la configuración surta efecto debe reiniciar su máquina, desea reiniciar ahora”, aunque también nos aparece al instalar algun programa, para lograr el mismo efecto en nuestras aplicaciones la función API que tenemos que usar es SetupPromptReboot del dll setupApi.dll de windows, acá una función que si la llamamos sin parametros mostrará el dialogo en cuestión, si le pasamos .t. reiniciara sin preguntar:
Function Reiniciar(luNoPreguntar)
Declare SetupPromptReboot In setupapi.Dll Long FileQueue, Long Owner, Long ScanOnly
If !luPreguntar
SetupPromptReboot (0, _Screen.HWnd, 0)
Else
SetupPromptReboot(0, _Screen.HWnd, 1)
Endif
Endfunc
Hasta la próxima.

