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



Archivo de CategoríasDesarrollo



Desarrollo & Ideas & Trucos 13 Feb 2008 02:02 pm

Como imprimir imágenes almacenadas en tablas sin usar campo general en los reportes (VFP 9)

, , , , , , , , ,

Bueno, hasta hace poco lo que hacía al necesitar imprimir una imagen en un reporte era usar campo general para almacenarlas o sacarlas a un directorio temporal para así poder mandarlas a impresión.

Pero ahora con el campo BLOB en VFP9 podemos almacenar el contenido de una imagen y al mismo tiempo imprimirla en un reporte sin necesitar hacer conversión a un campo general.

Veamos un ejemplo

Create cursor qImagen (imagen blob)
append blank in qImagen
lcDir =FullPath(Curdir())
replace qImagen.imagen with filetostr(getfile([jpg;bmp;gif]))
cd (lcDir)
private oImg
oImg = newobject([image])
oImg.pictureVal = qImagen.imagen

Necesitamos también un reporte con un objeto Picture/OLE Bound establecido así:

Ahora corremos el reporte
report form "NuestroReporte" preview

Pero y que pasa si queremos imprimir imágenes que están almacenados en una tabla (en registros diferentes)?

Grabamos lo siguiente como GetImg.prg

*Function getImg
lParameters nId, cImgCont
oImg = newobj([image])
oImg.pictureval =cImgCont
return oImg

Creamos un reporte y le agregamos un objeto Picture/OLE Bound y le establecemos la propiedad así:
reporte_picture_val2.jpg

Ahora podemos probar la función en el reporte:

use in select([qImagen])
Create cursor qImagen (numero i,imagen blob)

append Blank in qImagen
append Blank in qImagen
append Blank in qImagen
append Blank in qImagen

lcDir =FullPath(Curdir())
lcFile = getfile([jpg;bmp;gif])
update qImagen set numero =recno(),imagen =filetostr(lcFile)
report form "MiReporte" preview

, , , , , , , , ,

Desarrollo 14 Oct 2007 02:05 am

Service Pack 2 de VFP 9 Liberado!

, , , , , , , ,

Pues sí, recien Microsoft ha liberado el Service Pack 2 (Sedna) de Microsoft Visual Foxpro 9, y ya está disponible para su descarga.

Para ver los bugs que corrige pueden dirigirse a esta página.

Por lo pronto el servidor de Microsoft está saturadísimo y estoy teniendo bastantes problemas para bajarlo, quizá en el resto de la madrugada se mejora la cosa, en cuanto le pueda dar una buena probada a esto comentare que tal se ve.
online pharmacycialislevitrasomaviagra

, , , , , , , ,

Desarrollo 13 Sep 2007 10:01 am

11111111: ¡Feliz Día del programador! | Microsiervos (Ordenadores)

Pues eso, hoy es el d�a 256 del a�o, as� que f�liz d�a del programador!!!

En Microsiervos lo explican mejor:
11111111: �Feliz D�a del programador! | Microsiervos (Ordenadores)

En palabras de StrGT

Hoy es el día del programador, el día 256 del año, felicidades mis amigos-monos-amaestrados.

Creo que mejor no podría estar.

Página oficial del día no oficial: http://www.programmerday.info/

Hasta la próxima.

Tags: , , ,

Desarrollo & Ideas 27 Ago 2007 02:30 am

Configurando El entorno para el control de versiones con VFP y SubVersion (parte 2)

, , , , , , , , , , , , , , , ,

Bueno, en esta parte del tutorial vamos a configurar algunas cosas de nuestro proyecto para poder importarlo en nuestro Depósito (repository) de SubVersion.

Cabe mencionar que la primera parte es configurar TortoiseSVN para evitar que incluya archivos que no querramos llevar control de versiones (archivos propios de cada desarrollador que no van al ejecutable, archivos de configuración de cada estación, archivos .fxp, archivos de texto, archivos dbf, cdx, fpt, dbc, etc)

Así que vamos a una carpeta en el explorador de Windows, clic derecho / TortoiseSVN / Settings


Opción Menú para ingresar a opciones de TortoiseSVN

En la ventana que aparecerá debemos configurar las 2 opciones que están señaladas a continuación:

Ventana de opciones de TortoiseSVN

  • Global Ignore pattern:
  • Acá debemos indicar las extensiones de los archivos queremos exclúir, tenga en cuenta que es Case Sensitive por lo que quizá quiera agregar las extensiones en la forma:
    *.Fxp, *.fxp, *.FXP
    o bien indicar una exclusión así:
    *.[Ff][Xx][Pp]
    También puede indicar que quiere exclúir un directorio completo usando una cadena como ésta:
    */Data, Datos/*, Puede referise a la ayuda para más opciones de exclusión :).

  • Use “_svn” instead “.svn” directories
  • Es especialmente util cuando pensemos usar SubVersion con Visual Studio también, debido a que el editor de .Net tiene problemas con los folders que empiezan por un punto (.svn), se debe tener en cuenta que sí un directorio ya fué versionado con TortoiseSVN sin marcar esta opción y luego la selecciona deberá versionar nuevamente, para que lo reconozca.

Si nos conectamos a traves de un proxy al servidor de SubVersion, necesitaremos ir al apartado Network a configurarlo. Igualmente si ya disponemos de algún software para comparar archivos como WinMerge o DiffDoc deberá ir a configurarlo al apartado External Programs /Diff Viewer , sí deséa ver algunos otros programas para ver las diferencias entre las versiones puede darle un vistazo a este listado.

Esta segunda parte ha sido poco, pero conforme tengo tiempo he ido escribiendola, esperen pronto la segunda parte :)

, , , , , , , , , , , , , , , ,

Desarrollo & Ideas 18 Ago 2007 01:22 am

Instalando SubVersion para control de versiones con VFP (parte 1)

, , , , , , , , , ,

Bueno, hasta hace poco yo estuve usando SourceGear para el control de versiones de mis proyectos, pero debido al problema por todos conocido que los formularios y clases se almacenan realmente en archivos DBF (el control de versiones los considera binarios) es prácticamente imposible que 2 personas trabajen en la misma forma/clase y luego unir los cambios en un solo archivo y que este sea un archivo válido para vfp.

Ahora debido al presupuesto, estoy utilizando el control de versiones SubVersion, pero lastimosamente no he encontrado casi ninguna buena documentación de uso en español, por no decir que no existe prácticamente nada en español que enseñe a implementarlo con VFP.

En este primer artículo, voy a mostrar como instalar SubVersion y también TortoiseSVN para empezar.

La mejor manera de instalar SVN, configurarlo como servicio, Crear un “Depósito” inicial (Repository) e instalar TortoiseSVN, es usando el instalador de http://svn1clicksetup.tigris.org/ ya que nos hará todo el trabajo.

Para los que quieran instalar por aparte todo, acá les dejo los links de descarga:

Debido a que el instalador svn1clickSetup no necesita mucha información intentare acá explicar los pasos necesarios para instalarlos por separado:

Una vez que tengamos el paquete denominado svn-X.X.X-setup.exe (en mi caso 1.4.4) procedemos a ejecutarlo y a seguir las instrucciones en pantalla. Debemos recordar donde lo instalamos en mi caso C:\Archivos de programa\SubVersion.

Instalamos TortoiseSVN, y reiniciamos la máquina en caso nos lo solicite.

Una vez que reiniciamos si es que lo pidió, abrimos una ventana del explorador de windows, y nos dirigimos a la unidad en que querramos mantener la Base de datos de SubVersion, por fácilidad yo prefiero ponerlo en el C: en la raíz, bajo el nombre de SVNCode (procuren no usar espacios en el nombre ni caracteres raros :P ), así que todo lo que hace falta hacer es crear dicho directorio para que quede así:

C:\SvnCode

Damos clic derecho sobre el folder y en la nueva opción que dice “TortoiseSvn” nos posicionamos para seleccionar en el submenú la opción “Create Repository Here…”

Creando el Depósito

Luego nos preguntará, el tipo de base de datos que deséamos utilizar para el depósito, la recomendación general es que utilizemos el tipo Native Filesystem (FSFS):

Tipo de datos para el depósito

Una vez que selecciones el tipo de datos a usar, damos clic a ok y nos avisará que el depósito fue creado exitósamente :) a menos claro que no dispongamos de permisos sobre esa carpeta o espacio ;) (o que la carpeta no se encuentre vacía antes de crear el depósito allí).

Al exáminar la carpeta veremos que ha creado varias subcarpetas

  • Dav
  • Locks
  • Conf
  • Db
  • Hooks

También un Readme.txt que conviene dejar allí, en caso que alguien más use esa computadora y quiera averiguar que es esa carpeta para evitar que la borre, también en la carpeta hooks, encontrará varios archivos .tmpl que quizá le guste revisar y leer al respecto cómo usarlos y configurarlos (estos pueden estar escritos en python o en perl)

El siguiente paso, será configurar nuestro depósito, abrimos la carpeta Conf y veremos 3 archivos:

  • svnserve.conf
  • passwd
  • authz

Los 2 primeros archivos serán los únicos que necesitaremos configurar por el momento (a menos que quieran configurar apache y el módulo webdav, que escapa al objetivo de este artículo ya que no uso apache)

SvnServe.conf:
Debemos agregar 2 líneas, una para los usuarios que no inicien sesión anon-access) y otra para los usuarios que se auntentícaron (auth-access), el valor Default es darle lectura a los no autentícados y escritura para los otros, yo recomiendo no dar acceso a nada (none) para los no autentícados sí el acceso se hará atravéz de internet. por lo pronto vamos a agregar a nuestro archivo Svnserve.conf las 2 siguientes líneas:

anon-access = none
auth-access = write

Passwd
Acá vamos a agregar tantas líneas como usuarios querramos que tengan acceso al depósito, en mi caso agregare 2:

dev1=pwd1630
dev2=1675Prq

Grabamos los cambios y nos toca decidir sí queremos que SubVersion este configurado como servicio, o por el contrario si lo que queremos es arrancar el programa cada vez que lo vayamos a necesitar (la máquina no solo sirve para desarrollo/servidor/o bien queremos tener control de cuando este disponible/etc).

En el caso que querramos controlar cuando arranca SubVersion lo mejor será usar un archivo.Bat con algo como esto:
cd "c:\archivos de programa\programacion\subversion\bin"
svnserve.exe --service -rC:\svncode

Recuerde que debe editar las rutas para que coincidan con su instalación y el depósito que creó con tortoisesvn. Cada vez que necesite iniciar SubVersion puede ejecutar ese archivo.bat.

Por el contrario, si lo que queremos es que este disponible al iniciar la máquina (aún cuando no hayamos iniciado sesión aún), debemos configurarlo como un servicio, así que arrancamos la consola de comandos (Inicio /Ejecutar / cmd.exe) y escribimos lo siguiente (todo en una línea)

sc create svn binpath= "\"c:\archivos de programa\Subversion\bin\svnserve.exe\" --service -rC:\svncode" displayname= "Servidor de SubVersion" depend= Tcpip start= auto

Deben tener en cuenta el espacio que se encuentra después de cada signo de igual (= ) ya que es obligatorio escribirlo así, también tengan en cuenta la ruta, quizá necesite ajustarla para que concuerde con su instalación o su depósito.

Sí todo ha ído bien nos deberá mostrar un texto como este

[SC] CreateService SUCCESS

Delo contrario nos dará un error informandonos de la sintáxis, tendremos que digitar de nuevo y poner atención a que quede igual al texto de arriba :).

Una vez que tengamos creado el servicio, debemos iniciarlo, desde la consola de comandos:

sc start svn

Que a su vez devolverá algo como esto:

SERVICE_NAME: svn
        TYPE               : 10  WIN32_OWN_PROCESS
        STATE              : 2  START_PENDING
                                (STOPPABLE,NOT_PAUSABLE,IGNORES_SHUTDOWN)
        WIN32_EXIT_CODE    : 0  (0x0)
        SERVICE_EXIT_CODE  : 0  (0x0)
        CHECKPOINT         : 0x0
        WAIT_HINT          : 0x0
        PID                : 3800
        FLAGS              :

Y bueno ya tenemos Svn configurado instalado, configurado como servicio, y un Depósito creado, listo para ser usado. Pronto la segunda parte del control de versiones en el que veremos como integrar nuestros proyectos.

Para los que desean tener SubVersion en un servidor pero no se animan a instalarlo sin probarlo antes, podrían probar esta máquina virtual con vmware que corre en un ubuntu. http://www.young-technologies.com/Software/Subversion-Virtual-Machine/ (en inglés), la ventaja de correrlo así es que podríamos migrar a un servidor posteriormente, y también el hecho de cargar el servicio solo cuando lo necesitemos en caso que solo sea 1 programador en el proyecto :).

Hasta la próxima.

Links: SubVersion (sitio oficial)
TortoiseSVN (sitio oficial)
Referencias: Setting up and running Subversion and Tortoise SVN
with Visual Studio and .NET

CVS, SubVersion and Visual FoxPro

, , , , , , , , , ,

Desarrollo & API & Ideas & Trucos 08 Ago 2007 01:43 pm

Obteniendo el nombre corto de una ruta o archivo

, , , , , , , ,

Hace poco me tope con la necesidad de saber la ruta corta de un archivo (o ruta DOS), al decir ruta corta me refiero a la ruta que manejaba el DOS antiguo, que a diferencia de windows cada archivo solo puede tener 8 caracteres en el nombre del archivo y 3 en la extensión. es decir

C:\Mis Archivos\Juan Pérez y Pérez.xls una aplicación DOS lo encontraría así: C:\Misarc~1\JUANPR~1.XLS.

Esta Función permite obtener ese nombre corto:

Function GetDosFileName(lcfile As String) As String
**http://fox.desdeguate.com/?p=77
**Autor: Jorge Mota
**Devuelve la ruta corta (DOS) de una ruta o un archivo.
Declare Long GetShortPathName In "kernel32" String lpszLongPath,;
String lpszShortPath, Long lBuffer
lcFileName=Replicate(Chr(0),254)
lnTotal=GetShortPathName(lcfile, @lcFileName, Len(lcFileName))
Return Substr(lcFileName,1,lnTotal)
Endfunc

Ejemplos de uso:
Archivo:
?lcfile = GetDosFileName([C:\Juan Pérez y Pérez.xls])
Directorio:
lcDir = GetDosFileName([C:\Archivos de Programa\])

Retornará una cadena vacía si el directorio o archivo no existe.

Hasta la próxima.

, , , , , , , ,

Desarrollo & Ideas & Trucos 29 Jul 2007 01:01 pm

Obteniendo la hora desde un servidor de Tiempo en internet con vfp (iTime)

, , , , , , ,

Hace algún tiempo en www.Portalfox.com se publicaron algunos artículos para poder obtener la hora de nuestro servidor, pero en algunos casos, no nos es posible tener acceso al servidor, ya que no usamos carpetas compartidas (shared) así que no podemos hacer el trabajo por medio de esos métodos.

Y como hace algún tiempo instale linux, para pruebas de servidor de mySql, en una máquina y me dí cuenta que se puede configurar como un servidor de hora, (tengo entendido que en Windows, podemos lograrlo según Microsoft para windows 2003 y para XP también pero no he tenido tiempo de probarlo), bueno el caso es que teniendo un servidor de hora me dí cuenta que podía sincronizar las estaciones XP desde el apartado que pone Hora de internet /Internet zone, al entrar a Panel de control (Control Panel) y seleccionar Hora y Fecha (date and time).

Así que me puse a investigar, de que manera podíamos obtener la hora desde un servidor de este tipo desde vfp, según el RFC 868 el servidor debe devolver un número de 32 bits, el cual debemos sumarle en segundos a la fecha 01-01-1900. a la Fecha y Hora que obtengamos de allí, debemos restarle/sumarle la diferencia horaria según en la zona que nos encontremos.

Seguir leyendo »

, , , , , , ,

Desarrollo 13 Jul 2007 03:00 pm

Concurso de Microsoft

, , , , ,

Pues recientemente recibí un correo de Microsoft invitandome a participar en el Concurso Expresión ( http://www.microsoft.com/centroamerica/msexpresion/default.aspx ) para Centro América.

Me llama la atención especialmente que puedes participar, aún cuando lo que uses para diseñar no sea Microsoft, digamos podrías hacer tu diseño con DreamWeaver, Nuv, o incluso el notepad ;) para realizar la faéna.

Los premios se ven bastante bien, tales como un monitor de 24 pulgadas, por ejemplo este es el premio al 1er lugar de Expression - Diseño Web:

  • Trofeo al Primer Lugar
  • Microsoft Expression Studio
  • Microsoft Visual Studio .NET 2005 Professional
  • Microsoft Windows Vista Ultimate
  • Monitor LCD Widescreen DELL 24”
  • Publicación en la Edición Especial de la Revista Colectiva

Las bases del concurso las encuentran por acá ( http://www.microsoft.com/centroamerica/msexpresion/terminos-es.aspx )

También tienen más información en el blog de Ricardo Jimenez

Tienes hasta el 15 de septiembre para enviar tu diseño, y si no tienes posibilidad de publicarlo en el web, puedes enviarlo en un zip.

Si alguien se anima a participar, que avise ;)

Hablando de Expressión, alguien conoce algún sitio de cursos o algo para iniciar, está muy bien el soft ;)

, , , , ,

Sin Categoría & Desarrollo & Ideas 12 Jun 2007 03:08 pm

Formateando datos para usar con SQL PassTrough (SPT)

, , , , , ,

Pues como se puede ver en estos artículos podemos usar el ? para que el Fox formatée correctamente los valores, el debuggear esos scripts sql son muchas veces bastante difíciles, sobre todo cuando nos conectamos aVFP por medio de ODBC y nos dice “Tipo de dato incorrecto” / “Data type Mismatch” y no sabemos por donde buscar.

Lo ideal también puede ser almacenar el script en un .sql o .txt para su posterior ejecución, allí tenemos que lidiar con el formato a enviar a cada cadena.

Esta función FormatoDato, sirve para datos VFP o Sql Server (podría servir para otros motores, excepto con tipos Date o Datetime, ya que usa el formato de fechas de Sql Server)

Para otros motores de datos, tendrá que modificar el tratamiento de Fechas.

La función:

Function FormatoValor(luValor, lSql) As String
	Local luReturn
	luTipo = Vartype(luValor)
	Do Case
		Case luTipo = [C]
			luReturn = [']+Alltrim(luValor)+[']
		Case Inlist(luTipo,[I], [N], [Y])
			lcNum = Alltrim(Transform(luValor))
			If [.] $ lcNum
				luReturn = Transform(luValor)
			Else
				luReturn = Alltrim(Transform(luValor))
			Endif
		Case luTipo = [D]
			If !lSql
				If Empty(luValor)
					luReturn =[{}]
				Else
					luReturn = [Date(] + Alltrim(Transform(Year(luValor)))+[,]+Alltrim(Transform(Month(luValor)))+[,]+Alltrim(Transform(Day(luValor)))+[)]
				EndIf
			Else
				If Empty(luValor)
					luReturn =[Null]
				Else
					luReturn = [{d '] + Alltrim(Transform(Year(luValor)))+[-]+Alltrim(Transform(Month(luValor)))+[-]+Alltrim(Transform(Day(luValor)))+['}]
				EndIf
			Endif
		Case luTipo = [T]
			If Empty(luValor)
				luReturn = [Null]
			Else
				luReturn = [{ ts ']+Alltrim(Transform(Year(luValor)))+[-]+Alltrim(Transform(Month(luValor)))+[-]+Alltrim(Transform(Day(luValor)))+[ ]+Alltrim(Transform(Hour(luValor)))+[:]+Alltrim(Transform(Minute(luValor)))+[:]+Alltrim(Transform(Sec(luValor)))+['}]
			Endif
		Case luTipo = [X]
			luReturn = [Null]
		Case luTipo = [L]
			luReturn = luValor
		Otherwise
			luReturn=[']+Alltrim(Transform(luValor))+[']
	Endcase
	Return Transform(luReturn)
Endfunc

También puede descargarla desde acá: http://fox.desdeguate.com/descargas/vfp/formatodato.prg

Un ejemplo sería

Set textmerge on to Memvar cSql noshow
\ insert into tabla (CampoC, CampoT, CampoN) values (< >,< >,< >)
set textmerge to

Lo que daría como resultado para vfp
insert into tabla (CampoC, CampoT, CampoN) values (’ValorCampo’,date(2006,05,06),10.50)

sí usaramos el segundo parámetro:
insert into tabla (CampoC, CampoT, CampoN) values (’ValorCampo’,{d ‘2006-05-06′ },10.50)

También puede agregar su lógica de selección de motor a la función para que todo el trabajo sea transparente!.

Saludos

, , , , , ,

Desarrollo & Trucos 18 May 2007 12:02 pm

Una interesante ayuda para Intellisense

, , , , , , ,

Bueno, en esta ocasión no les voy a presentar código propio (he estado demasiado ocupado estos ultimos días rediseñando una aplicación enorme, por eso no me han visto actualizar mucho). Esta herramienta la escribio Christof Wollenhaupt.

Básicamente nos permite tener en el intellisense las variables que declaremos en nuestro método, función, procedimiento, etc, ya sea en un prg, una clase o una forma, acá una muestra:

IntellisenseX

todo lo que necesitamos es empezar a escribir m presionar punto (m.) e IntellisenseX hará el resto.

Una nota interesante es que añade intellisense a VFP6 :) aunque no he podido probarlo por falta de esa versión.

La otra cosa por la que estoy usandolo, es por que me añade intelisense a los nombres de los campos de las tablas vfp que use el procedimiento actual, una muestra:

Intellisense X en Acción

Para iniciar IntellisenseX basta con hacer:

do isX.prg

y para quitarlo de memoria bassta con hacer:

do isX.prg with [quit]

pueden bajar desde acá http://www.foxpert.com/downloads.htm ISX, junto a varias herramientas más, vale la pena echarle un ojo al listado :)

Saludos y hasta la próxima.

, , , , , , ,

Desarrollo & Curioso 20 Abr 2007 02:30 pm

Problemas con los reportes de vfp y Windows 2003

Pues eso, recientemente he querido imprimir un reporte en windows 2003 y simplemente se niega a mostrarlo en vista previa, o a un archivo, despues de probar mucho código desde vfp y copiar de nuevo el runtime, preview.app, etc me he dado cuenta que el servidor no tenía instalada ninguna impresora, bastó con instalar una impresora desde el panel de control (ni siquiera conecte una :P) y ya funcionó.

Lo curioso es que estoy generando pdfs a partir de un reporte con report form reporte object oListener, y resulta que tampoco los genera :S, reproduje el error en windows XP y 2000, y simplemente no da error pero el reporte no se despliega.

Ojalá y le sirva a alguien :) esto.

Saludos y hasta la próxima.

Desarrollo & .Net 27 Feb 2007 02:16 pm

Inaugurada la Sección .Net

,

Pues sí, al final he decidido aprender de una vez por todas c#, Así que lo que vaya aprendiendo, por acá lo pongo si lo encuentro interesante, por el momento estoy iniciandome con el libro:

Essential C# 2.0
By Mark Michaelis
………………………………………..
Publisher: Addison Wesley Professional
Pub Date: July 13, 2006
Print ISBN-10: 0321150775
Print ISBN-13: 978-0-321-15077-6

Y luego que termino un tema x me busco el mismo tema en este otro libro, para profundizar un poco y ver si hay algo más:

Core C# and .NET
By Stephen C. Perry
………………………………………..
Publisher: Prentice Hall PTR
Pub Date: September 06, 2005
ISBN: 0-13-147227-5

Luego creo que seguire con el Net for VFP developers, me hubiera gustado publicar algún libro en español pero no encontre ninguno bueno en papel.

Les dejo un par de links con interesantes cursos y recursos :)

Intersante IDE para C# http://www.c-point.com/c_sharp_editor.php

Curso de Inicio para C# en español: http://www.elguille.info/NET/cursoCSharpErik/index.htm

Sitio con Artículos y cursos de C#: http://www.csharp-station.com

También encontre un framework ¿? free para generar código .Net pero aún no lo he revisado muy bien, en cuanto me sienta más a gusto con .Net le hecho una ojeada profunda: http://www.cooperator.com.ar/

Cómo consejo personal, creo que ayuda mucho a entrar en simpatía con c# el empezar a programar con el bloc de notas y compilar desde la línea de comandos, me ha ayudado mucho a memorizarme la estructura básica de un programa y acostumbrarme a escribir las palabras con la capitalización correcta :) ya que con el IDE es mucho más fácil por intellisense, pero si por alguna razón no tienes el IDE luego a lo mejor y no sabrás como moverte :P.

acá un pequeño tutorial del famoso Hola Mundo! en c#

abres el bloc de notas y escribes

using System;
public class HolaMundo
{
	static void Main()
	{
		Console.WriteLine("Hola Mundo!");
	}
}

lo grabas en alguna carpeta, digamos C:\net, como C:\net\holamundo.cs

vas a la ventana de comandos (Cmd.exe) y escribes:

cd %windir\Microsoft.Net\Framework
dir v*

y te saldrá un listado con las versiones que tengamos en mi caso tengo instalado:
v1.0.3705
v1.1.4322
v2.0.50727

Seleccionaos con cual queremos compilar y escribimos la versión que vamos a usar (en mí caso la V2.0.50727)
cd V2.0.50727

csc /out:”C:\net\holamundo.exe” “C:\net\holamundo.cs”

Es importante recalcar que usamos la ruta completa para indicar donde quedara el exe (no tiene que ser la misma que donde está el código fuente) y también la ruta completa del archivo que queremos compilar.

También podemos agregar al PATH del sistema, la ruta a CSC.EXE para no tener que estar escribiendo la ruta cada vez que queremos compilar, desde línea de comandos podemos hacerlo así:

Set PATH=%PATH%;%Windir%\Microsoft.NET\Framework\v2.0.50727

para compilar luego hacemos
cd c:\net
csc /out:holamundo.exe holamundo.cs

Sí se dan cuenta es mucho más cómodo compilar de esta manera. creo que en un par de días me animare a escribir en IDE :D algo para probarlo, pero francamente para quien no tiene ningún IDE esta super sencillo de compilar con .Net en caso de una emergencia.

Saludos y hasta la próxima.

,

Desarrollo & API & Ideas 22 Feb 2007 05:04 pm

Creando aplicaciones de modo consola desde VFP

, , , , , , ,

Bueno, esto es un código viejo que tengo desde hace rato por publicar, pero no por eso no util :)

Recuerdo que en unos de mis primeros contactos con el mundo linux, ví una aplicación para grabar cd’s, que al entrar a modo debug, mostraba una ventana al estilo D.O.S en el que íba indicando que método llamaba y que parámetros estaba usando, también el valor que retornaba, y me gusto mucho la idea, pero nunca realmente lo implemente, hasta hace poco que necesitaba en un proceso que se invoca desde otra estación para ejecutarse en el servidor, saber en que método se quedaba exactamente, ya que el proceso era asíncronico, pues bien, allí fue donde se me ocurrio tener desde vfp la manera de poder crear una de estas ventanitas:

Aplicación de modo consola

Pero en este ejemplo aún no les mostrare como usar la emulación de la consola de comandos, nada más les brindo una aplicación que les permitira agregar comandos en un dbf y ejecutarlos desde la ventana en cuestión:

Ejemplo de emulación de consola de comandos desde vfp

al ejecutar “vfp_console.prg” veran la pantalla negra en cuestión (también es configurable el color de fondo y color de la letra, como aprenderemos en la próxima publicación), puede escribir “ayuda” y presionar enter, lo que le mostrará una lista de comandos disponibles, también podrá escribir Ayuda Comando (donde Comando es el comando del que quiere obtener ayuda) para mostrar información acerca del mismo, por ejemplo Ayuda hora

El proyecto incluye un dbf llamado “Comandos” donde puede establecer que x Comando VFP no sea permitido ejecutar (Wait window, quit, cancel, debug, etc) solo debe establecer el valor del campo “Permitido” a .f. en el registro.

Para descargar el proyecto: http://fox.desdeguate.com/descargas/vfp/vfp_console.zip clic acá

Saludos y hasta la próxima cuando revisaremos y veremos más a detalle estas funciones API.

, , , , , , ,

Next Page »