Mostrando las entradas con la etiqueta Programación. Mostrar todas las entradas
Mostrando las entradas con la etiqueta Programación. Mostrar todas las entradas

lunes, 16 de marzo de 2009

Desarrollo MultiPlataforma




Que tal a todos?, para todos los programadores que como yo, tenemos algunos años recorridos; tengo a bien presentarles una opción que verdad pensé que habian olvidado.. El proyecto Harbour!!!. Ese tan esperado sucesor de CA-Clipper pero en versión OpenSource.

Lo descargué y lo pusé en marcha y para mi sorpresa, podemos correr nuestras aplicaciones tanto en Windows 32 y 64 bits como en Linux (claro con respectiva compilación según el SO). Y no solo eso si no también tenemos la posibilidad de utilizar Bases de Datos en MySQL, en lugar de la corrompibles DBFs. hay además un grupo interensate de herramientas de terceros tanto de licencia convencional (o sea de paga) y las que prefiero "Open Source"; entre muchas otras como acceso a XML.
Agrego que las aplicaciones creadas en harbour, se cargan y se ejecutan con una velocidad que me dejó asombrado; para veteranos programadores de Clipper el cambio hacia Harbour será muy agradable, y lo mejor del caso es que puedes resucitar parte de tu viejo código!.
Si te interesa puedes descargarlo desde http://www.harbour-project.org/


viernes, 18 de mayo de 2007

Conceptos de POO (Parte II)

Ya hemos establecido las bases para entender la técnica de la Programación Orientada a Objetos.

Sabemos distinguir entre propiedades, métodos y eventos, lo cual es clave.

Con el ejemplo del teclado, podemos agregar que en nuestra conceptualización del objeto tecla, solo bastó con definir un solo objeto y a partir de el podremos completar todo un teclado.

¿Por qué?, bastante sencillo, si observamos las teclas de nuestro teclado, todas son muy similares y comparten la mayoría de las características definidas en nuestro objeto base (clase), y solo cambian los caracteres grabados en ellas (propiedad) y lo que se realiza al presionar una de ellas (método). Esto me da la pauta para hablar de otra característica de la técnica de Programación Orientada a Objetos, la Herencia; así como nosotros "heredamos" de nuestros padres ciertas características como forma de nariz, color de ojos, estatura, inteligencia, etc. aunque también poseemos otras características diferentes a ellos que nos hacen únicos. Nosotros podemos reproducir más objetos muy parecidos al objeto "padre" o "clase" pero con algunas diferencias; tal es el caso de cada una de las teclas que requiera nuestro teclado.
Es decir podemos hacer que nuevos objetos hereden características y funcionalidades de otros objetos ya existentes.... WOW esto si que ahorra tiempo en el desarrollo!!!

¿Interesante Verdad?

(Esta historia continuará...)

sábado, 7 de abril de 2007

Conceptos de POO (Parte I)

La Programación Orientada a Objetos (POO u OOP por sus siglas en inglés Object Oriented Programming) ,es una técnica de desarrollo de Software que nos hace tener una visión más real de los componentes y su funcionamiento , así como también la interacción entre ellos. Este modelo de diseño es soportado hoy en día en la gran mayoría de lenguajes de alto nivel tal y como lo son Visual Basic, C Sharp, Java, Delphi, Visual Fox Pro, por citar algunos.

La POO está basada en el tratar de enfocar nuestros análisis a objetos tangibles, para de ahí poder identificar todas sus características ("propiedades") y las actividades que realizan estos objetos o que se pueden realizar con ellos ("métodos").
Un ejemplo que se me ocurre, (no se por qué) es el teclado; el cual es un sistema. Entendamos por sistema a un conjunto de elementos que trabajan de manera relacionada para llevar a cabo una tarea determinada (a esto se le llama "colaboración"), ahora bien, éste sistema es decir el teclado está formado por varios "objetos" llamados teclas. Una tecla tiene ciertas características o propiedades, como por ejemplo :
  • Color
  • Tamaño
  • Forma
  • Caracter grabado
  • Posición Horizontal
  • Posición Vertical

Además de que cuando presionamos una de ellas ocurre algo (a esto se le llama "evento") , y es precisamente la tarea que la tecla tiene asignada al ocurrir el evento usuario-presionótecla y para poder hacerlo tiene una manera predefinida (a esto se le llama "método"). De lo anterior podemos tener ya conceptualizada una descripción general de una tecla. Ahora les hago una pregunta :

¿ Las teclas de una sumadora, un control remoto o un video juego, serán diferentes en cuanto concepto se refiere a la tecla que acabamos de analizar?

NO, ¿ verdad ? , Pues ésta es una de las bondades de utilizar la POO, los objetos que nosotros conceptualizamos y construimos siguiendo las particularidades de cada lenguaje, nos permiten reutilizar el código de un objeto (en su definición es llamado "clase", es decir el molde de los objetos), en proyectos muy diferentes, gracias a este concepto el tiempo de desarrollo de una aplicación se puede disminuir notablemente, aunque el éxito de esto depende de que tan a detalle hagas el análisis conceptual de los objetos.

(Esta historia continuará...)

Marquesina, Muy buen Efecto!!!!

*****************************************
*Aplicación de ejemplo para crear
* una Marquesina deslizante con la
* fecha y hora actual.
* © Alejandro Gómez Torres
* Espero les guste!!!
****************************************

WITH _Screen
.AddObject( [MySign], [Sign], 0, 0 )
.AddObject( [MyTime], [OnTime] )
.WindowState= 2 && Maximizada
.Caption = [Marquesina]
.BackColor= RGB(0,0,0)
.BindControls= .F.
.ClipControls= .F.
.Closable = .F.
.ControlBox= .F.
.Visible = .T.
ENDWITH

** pon algún codigo por aquí
** puedes abrir un pequeño form
** pero cuida que sea más pequeño
** que el tamaño del form de VFP

READ EVENTS


_Screen.RemoveObject ([MyTime])
_Screen.RemoveObject ([MySign])


****************************************
* Definición de la clase Sign
* Contendrá La fecha y la hora actual
****************************************


DEFINE CLASS Sign AS Label
Visible = .T.
BackStyle= 0
FontName =[Times New Roman]
FontSize = 20
Height = 50
Left = _Screen.Width+ 1
Top = _Screen.Height- 50
Autosize = .T.
Autocenter= .T.
Caption = []
ForeColor= RGB ( 255,255,128)

PROCEDURE Init
LPARAMETERS nTop, nLeft
THIS.Top= _Screen.Height - 100
ENDPROC

ENDDEFINE


****************************************
* Definición de la clase OnTime
* Timer que creará el efecto de animación
****************************************

DEFINE CLASS OnTimeAsTimer
InterVal= 10

PROCEDURE Timer
LPARAMETERS nTop, nLeft

cFechaHora= []

DO Case
CASE DOW(DATE()) = 1
cFechaHora = "Domingo"
CASE DOW(DATE()) = 2
cFechaHora = "Lunes"
CASE DOW(DATE()) = 3
cFechaHora = "Martes"
CASE DOW(DATE()) = 4
cFechaHora = "Miércoles"
CASE DOW(DATE()) = 5
cFechaHora = "Jueves"
CASE DOW(DATE()) = 6
cFechaHora = "Viernes"
CASE DOW(DATE()) = 7
cFechaHora = "Sábado"

EndCase
cFechaHora= cFechaHora + " " +;
ALLTRIM(STR(DAY(DATE()))) + " de "

DO Case
CASE MONTH(DATE()) = 1
cFechaHora= cFechaHora + ;
" Enero "
CASE MONTH(DATE()) = 2
cFechaHora = cFechaHora + ;
" Febrero "
CASE MONTH(DATE()) = 3
cFechaHora = cFechaHora + ;
" Marzo "
CASE MONTH(DATE()) = 4
cFechaHora = cFechaHora + ;
" Abril "
CASE MONTH(DATE()) = 5
cFechaHora = cFechaHora + ;
" Mayo "
CASE MONTH(DATE()) = 6
cFechaHora = cFechaHora + ;
" Junio "
CASE MONTH(DATE()) = 7
cFechaHora = cFechaHora + ;
" Julio "
CASE MONTH(DATE()) = 8
cFechaHora = cFechaHora + ;
" Agosto "
CASE MONTH(DATE()) = 9
cFechaHora = cFechaHora + ;
" Septiembre "
CASE MONTH(DATE()) = 10
cFechaHora = cFechaHora + ;
" Octubre "
CASE MONTH(DATE()) = 11
cFechaHora = cFechaHora + ;
" Noviembre "
CASE MONTH(DATE()) = 12
cFechaHora = cFechaHora + ;
" Diciembre "

ENDCASE
cFechaHora= cFechaHora + "de " + ;
ALLTRIM(STR(YEAR(DATE()))) + " " + ;
TIME()

_screen.MySign.Caption = cFechaHora
IF _Screen.MySign.Left >= -500
_Screen.MySign.Left = ;
_Screen.MySign.Left - 1
ELSE
_Screen.MySign.Left = ;
_Screen.Width + 1
EndIf
ENDPROC

ENDDEFINE

Manipular Excel

********************************************
* ExcelTest
*
* Propósito : Pruebas de Manipulación de
* Excel desde VFP
*
* Alejandro Gómez
*
********************************************

&& Declaramos el objeto que vamos a usar
LOCAL oExcelBook

&& Creamos una instancia de Excel
oExcelBook = CREATEOBJECT("Excel.application")

&& Muestra Excel
oExcelBook.Visible = .T.

&& Agrega un libro de trabajo
oExcelBook.Workbooks.Add

* las celdas son en el formato ( x,y ) en
* donde "x" es igual a los renglones de
* Excel y "y" a las columnas de tal manera
* si *quieres hacer referencia a la celda C1
* las *coordenadas para esta serán (3,1)

&& Escribe la leyenda prueba en A1
oExcelBook.Cells(1,1).Value = "Prueba"

&& Cambiamos en tipo de letra de A1
oExcelBook.Cells(1,1).Font.name = "Tahoma"

&& y lo establecemos en negritas
oExcelBook.Cells(1,1).Font.Bold = .T.

&& Escribe el número 5 en A2
oExcelBook.Cells(1,2).Value = 5

&& Escribe el número 10 en B2
oExcelBook.Cells(2,2).Value = 10

&& Escribe una linea doble en C2

oExcelBook.Cells(3,2).Value = "'=========="

&& Escribe el numero 15 en D2
oExcelBook.Cells(4,2).Value = 15

&& establece en negrita la linea doble de C2
oExcelBook.Cells(3,2).Font.Bold = .T.


oExcelBook.Cells(6,1).Value = "Libro Creado
desde Visual Foxpro"

&& that´s me, jejeje
oExcelBook.Cells(7,1).Value = "Alejandro
Gómez Torres"

&& para cerrar el libro de excel
oExcelBook.WorkBooks.Close

&& para salir de excel
oExcelBook.Quit

&& por etica no se te olvide liberar la
instancia a excel
RELEASE oExcelBook

Resolución de Monitor

****************************************************************
* Propósito .. : Checar la resolución actual de tu monitor.
*
* Supongamos que tu aplicación requiere por necesidad la resolución

* de 1024x768 pixeles; Para asegurarte de que esto es así puedes
* colocar el siguiente código al inicio de la aplicación ya sea directamente
* en módulo principal, en una clase o procedure
* (dependerá de tu ingenio)
*
* Suerte!!
*
* (c) Alejandro Gómez
*



IF Sysmetric(1) <> 1024 .and. Sysmetric(2) <> 768
_Screen.Visible = .F.
MESSAGEBOX ( "se requiere 1024 x 768 pixeles de resolución",16+4096,"Crítico" )
Return
EndIf


Algunos creen que tener talento es cuestión de suerte, casi nadie que la suerte puede ser cuestión de talento

miércoles, 4 de abril de 2007

Cálculo de Porcentaje

*-------------------------------------------------------
* Función.....: _CalcPercent( tnCuantos, tnDeCuantos )
*
* Descripción.: Calcula el porcentaje que representa tnCuantos
* con respecto a tnDeCuantos
*
* Parámetros..: Es mas que obvio
*
* Devuelve....: Valor Numerico osease el porcentaje
*
* Uso.........: Excelente para actualizar un progres barr!
*
* (c) Alejandro Gomez
*-------------------------------------------------------
FUNCTION _CalcPercent( tnCuantos,tnDeCuantos )
Local lnPercent
lnPercent = (tnCuantos/tnDeCuantos) * 100
RETURN lnPercent

SALVEMOS AL PLANETA !!!

SALVEMOS AL PLANETA !!!
TODAVIA ESTAMOS A TIEMPO!!!

De donde nos visitan?

Sitio certificado por
Anuns
aria condizionata in auto
roma est tel