18 octubre 2006
Estas lluvias
Que barbaro 4 dias lloviendo sin parar, y claro ya esto ha dejado estragos en mi persona con tremenda tos y combinado con gripe, en que momento me ha sucedido, justo cuando he terminado el programa de sumatic y ya estoy en la documentación del codigo fuente, ni modos esto tendra que esperar ya que estoy mas que mallugado por la gripe, pero bueno no todo es programar en la vida.
16 octubre 2006
Terminado! Sumatic
Ahora si doy por terminada la version 0.1 de mi juego Sumatic programado en lenguaje c# y usando gtk# y glade para la interfaz del juego y claro todo esto bajo mono, ahora que ya funciona estoy limpiando un poco el codigo y viendo donde se puede optimizar, pero aqui les dejo 2 pantallas de una jugada espectacular que hice de prueba, por cierto solucione lo del arrastre de los numeros desde las Labels, claro que tuve que usar un EventBox, me costo trabajo e incluso no estoy convencido como lo utilice, pero en fin funciona de esa manera, si lo modifico despues ya sacare la version modificada, entonces aqui deja las pantallas y esten pendientes a la publicacion del codigo completo, la verdad he aprendido mucho al realizar este juego, entre lo aprovechable se encuentra el como hacer un Drag and Drop, manejo de un Timer y un ProgressBar, utilizacion de EventBox y utilización de Sqlite basico para almacenar los records y entre otras cosas interesantes, bueno aqui le dejo las pantallas para no aburrir.

Pantallas

12 octubre 2006
Cerca del fin Sumatic
Ya ahorita esta en un 65% el juego de sumatic, solo resta el codigo de los records, que tengo pensado almacenarlos con Sqlite para ponerlo mas interesante, pero todavia tengo un pequeño problema, utilice unas labels para recibir los numeros arrastrados y ahora el detalle radica en como regreso estos numeros o los muevo de los labels, ya que intente aplicar los eventos de arrastre y nada que no funciona, espero que alguien me pueda iluminar, y si no pues por el momento lo sacare asi y ya en la version siguiente cambiare las labels por unos botones o unos pictures, en fin aqui dejo una pantalla del avance.
Pantalla sumatic
Pantalla sumatic

Hasta el proximo post....
10 octubre 2006
Correcciones y pantalla modificada
Bueno aqui un breve cambio en la pantalla de sumatic y por lo que veo yo creo que habra mas cambios, estoy encontrando problemas en el arrastre, pero bueno aqui dejo parte del codigo y la nueva pantalla de sumatic.
// ------------------------------------------ //
// Proyecto: Juego de sumas
// Desarrollador: gsur
// Licencia: GPL
// Blog: http:gsur.blogspot.com
// Email: rafamp78(dot)gmail.com
// ------------------------------------------
// mcs -pkg:gtk-sharp-2.0 -pkg:glade-sharp-2.0 -resource:vsumatic.glade Sumatic-0.1.cs
// mono Sumatic-0.1.exe
using System;
using Gtk;
using Gdk;
using GtkSharp;
using Glade;
class Sumatic
{
[Glade.Widget] Gtk.Window window;
[Glade.Widget] Gtk.HBox boxBotones;
[Glade.Widget] Gtk.Table tabla;
[Glade.Widget] Gtk.Button btNuevo;
[Glade.Widget] Gtk.Button btN1;
[Glade.Widget] Gtk.Button btN2;
[Glade.Widget] Gtk.Button btN3;
[Glade.Widget] Gtk.Button btN4;
[Glade.Widget] Gtk.Button btN5;
[Glade.Widget] Gtk.Button btN6;
[Glade.Widget] Gtk.Button btN7;
[Glade.Widget] Gtk.Button btN8;
[Glade.Widget] Gtk.Button btN9;
[Glade.Widget] Gtk.Button btN10;
[Glade.Widget] Gtk.Label lblN1;
[Glade.Widget] Gtk.Label lblN2;
[Glade.Widget] Gtk.Label lblN3;
[Glade.Widget] Gtk.Label lblN4;
[Glade.Widget] Gtk.Label lblN5;
[Glade.Widget] Gtk.Label lblN6;
[Glade.Widget] Gtk.Label lblN7;
[Glade.Widget] Gtk.Label lblN8;
[Glade.Widget] Gtk.Label lblN9;
[Glade.Widget] Gtk.Label lblN10;
int Nfila1, Nfila2, Nresultado;
static void Main()
{
Application.Init();
new Sumatic();
Application.Run();
}
public Sumatic()
{
Glade.XML gxml = new Glade.XML("vsumatic.glade", "window", null);
gxml.Autoconnect(this);
window.ShowAll();
btNuevo.Clicked += Nuevo_Juego;
TargetEntry [] te = new TargetEntry [] { new TargetEntry ("STRING", 0, 1), };
foreach(Gtk.Widget b in boxBotones)
{
Gtk.Drag.SourceSet (b, Gdk.ModifierType.Button1Mask, te, Gdk.DragAction.Copy);
b.DragDataGet += OnBtNDragGet;
}
foreach(Gtk.Widget lbl in tabla)
{
Gtk.Drag.DestSet (lbl, DestDefaults.All, te, DragAction.Copy);
lbl.DragDataReceived += OnlblNDropDragDataRecieved;
}
iniciar();
}
public void on_window_delete_event(object obj, DeleteEventArgs args)
{
Application.Quit();
}
public void on_btsalir_clicked(object obj, EventArgs args)
{
Application.Quit();
}
private void Nuevo_Juego(object obj, EventArgs args)
{
Random r = new Random();
Nfila1 = r.Next(100,999);
Nfila2 = r.Next(100,999);
Nresultado = Nfila1 + Nfila2;
string numeros = Nresultado.ToString();
if(numeros.Length < 4)
numeros += "?";
numeros += Nfila1.ToString() + Nfila2.ToString();
int i=0;
foreach(Gtk.Button b in boxBotones)
{
b.Label = numeros[i].ToString();
i+=1;
}
}
private void OnBtNDragGet(object o, DragDataGetArgs args)
{
Gtk.Button boton = (Gtk.Button) o;
Atom [] targets = args.Context.Targets;
args.SelectionData.Set(targets [0], 8, System.Text.Encoding.UTF8.GetBytes(boton.Label));
}
private void OnlblNDropDragDataRecieved(object o, DragDataReceivedArgs args)
{
Gtk.Widget source = Gtk.Drag.GetSourceWidget(args.Context);
Gtk.Button boton = (Gtk.Button) source;
Gtk.Label Contenedor = (Gtk.Label) o;
string strB = boton.Data["disponible"].ToString();
string strL = Contenedor.Data["vacio"].ToString();
if((strB.Equals("si") == true) && (strL.Equals("si") == true))
{
string data = System.Text.Encoding.UTF8.GetString ( args.SelectionData.Data );
Contenedor.Markup = "< background="\" foreground="\" size="\"> " + data + " < / span >";
boton.Data["disponible"] = "no";
Contenedor.Data["vacio"]="no";
boton.Label = "-";
//boton.Hide();
}
}
private void iniciar()
{
foreach(Gtk.Widget b in boxBotones)
{
b.Data["disponible"] = "si";
}
foreach(Gtk.Widget lbl in tabla)
{
lbl.Data["vacio"] = "si";
}
}
}

Codigo
// ------------------------------------------ //
// Proyecto: Juego de sumas
// Desarrollador: gsur
// Licencia: GPL
// Blog: http:gsur.blogspot.com
// Email: rafamp78(dot)gmail.com
// ------------------------------------------
// mcs -pkg:gtk-sharp-2.0 -pkg:glade-sharp-2.0 -resource:vsumatic.glade Sumatic-0.1.cs
// mono Sumatic-0.1.exe
using System;
using Gtk;
using Gdk;
using GtkSharp;
using Glade;
class Sumatic
{
[Glade.Widget] Gtk.Window window;
[Glade.Widget] Gtk.HBox boxBotones;
[Glade.Widget] Gtk.Table tabla;
[Glade.Widget] Gtk.Button btNuevo;
[Glade.Widget] Gtk.Button btN1;
[Glade.Widget] Gtk.Button btN2;
[Glade.Widget] Gtk.Button btN3;
[Glade.Widget] Gtk.Button btN4;
[Glade.Widget] Gtk.Button btN5;
[Glade.Widget] Gtk.Button btN6;
[Glade.Widget] Gtk.Button btN7;
[Glade.Widget] Gtk.Button btN8;
[Glade.Widget] Gtk.Button btN9;
[Glade.Widget] Gtk.Button btN10;
[Glade.Widget] Gtk.Label lblN1;
[Glade.Widget] Gtk.Label lblN2;
[Glade.Widget] Gtk.Label lblN3;
[Glade.Widget] Gtk.Label lblN4;
[Glade.Widget] Gtk.Label lblN5;
[Glade.Widget] Gtk.Label lblN6;
[Glade.Widget] Gtk.Label lblN7;
[Glade.Widget] Gtk.Label lblN8;
[Glade.Widget] Gtk.Label lblN9;
[Glade.Widget] Gtk.Label lblN10;
int Nfila1, Nfila2, Nresultado;
static void Main()
{
Application.Init();
new Sumatic();
Application.Run();
}
public Sumatic()
{
Glade.XML gxml = new Glade.XML("vsumatic.glade", "window", null);
gxml.Autoconnect(this);
window.ShowAll();
btNuevo.Clicked += Nuevo_Juego;
TargetEntry [] te = new TargetEntry [] { new TargetEntry ("STRING", 0, 1), };
foreach(Gtk.Widget b in boxBotones)
{
Gtk.Drag.SourceSet (b, Gdk.ModifierType.Button1Mask, te, Gdk.DragAction.Copy);
b.DragDataGet += OnBtNDragGet;
}
foreach(Gtk.Widget lbl in tabla)
{
Gtk.Drag.DestSet (lbl, DestDefaults.All, te, DragAction.Copy);
lbl.DragDataReceived += OnlblNDropDragDataRecieved;
}
iniciar();
}
public void on_window_delete_event(object obj, DeleteEventArgs args)
{
Application.Quit();
}
public void on_btsalir_clicked(object obj, EventArgs args)
{
Application.Quit();
}
private void Nuevo_Juego(object obj, EventArgs args)
{
Random r = new Random();
Nfila1 = r.Next(100,999);
Nfila2 = r.Next(100,999);
Nresultado = Nfila1 + Nfila2;
string numeros = Nresultado.ToString();
if(numeros.Length < 4)
numeros += "?";
numeros += Nfila1.ToString() + Nfila2.ToString();
int i=0;
foreach(Gtk.Button b in boxBotones)
{
b.Label = numeros[i].ToString();
i+=1;
}
}
private void OnBtNDragGet(object o, DragDataGetArgs args)
{
Gtk.Button boton = (Gtk.Button) o;
Atom [] targets = args.Context.Targets;
args.SelectionData.Set(targets [0], 8, System.Text.Encoding.UTF8.GetBytes(boton.Label));
}
private void OnlblNDropDragDataRecieved(object o, DragDataReceivedArgs args)
{
Gtk.Widget source = Gtk.Drag.GetSourceWidget(args.Context);
Gtk.Button boton = (Gtk.Button) source;
Gtk.Label Contenedor = (Gtk.Label) o;
string strB = boton.Data["disponible"].ToString();
string strL = Contenedor.Data["vacio"].ToString();
if((strB.Equals("si") == true) && (strL.Equals("si") == true))
{
string data = System.Text.Encoding.UTF8.GetString ( args.SelectionData.Data );
Contenedor.Markup = "< background="\" foreground="\" size="\"> " + data + " < / span >";
boton.Data["disponible"] = "no";
Contenedor.Data["vacio"]="no";
boton.Label = "-";
//boton.Hide();
}
}
private void iniciar()
{
foreach(Gtk.Widget b in boxBotones)
{
b.Data["disponible"] = "si";
}
foreach(Gtk.Widget lbl in tabla)
{
lbl.Data["vacio"] = "si";
}
}
}
Pantalla

Ya solo falta la parte logica del juego, claro que si alguien quisiera aportar alguna mejora con gusto sera recibida, pero ahora hasta aqui dejo esto, ya es tarde y quiero ver mi programa en la tele.
Primera pantalla
Aqui dejo la primer pantalla del Juego que comente comenzaria a pasar a Mono, por el momento el avance casi se reduce a esta pantalla, sin funciones todavia, bueno un poco ya de avance en el codigo de arrastre de los numeros pero falta todavia, pero les dejo la pantalla para que vayan conociendo el proyecto en cuestion.

09 octubre 2006
Juego Interesante
Bueno aqui de nuevo planteando otro proyecto a realizar, creo que ya van varios planteamientos que aun no han sido realizados o al menos expuestos, pero este sera algo especial, este no es un proyecto que partira desde cero, en realidad se trata de un pequeño juego que realice en visual basic y que buscando unos archivos en mis respaldos de archivos lo encontre, asi que me he planteado pasarlo ahora a Mono, en resumen es un juego de esos que te distraen en un rato de ocio y que en parte te hace ocupar un poco de masa encefalica.
El juego en cuestion trata sobre una serie de numeros que se han de acomodar en un tablero de tal forma que se realiza una suma, pero para que dar mas detalles, mejor cuando este listo vendra la pantalla y la explicación a detalle, y si se preguntan de que servira esto para el aprendizaje de Mono, pues lo que aqui se manejara sera el arrastre o Drag and Drop de objetos cosa que no hemos abordado en ninguna entrada anterior y claro no desmerecera el codigo de generación de numeros para el juego.
El juego en cuestion trata sobre una serie de numeros que se han de acomodar en un tablero de tal forma que se realiza una suma, pero para que dar mas detalles, mejor cuando este listo vendra la pantalla y la explicación a detalle, y si se preguntan de que servira esto para el aprendizaje de Mono, pues lo que aqui se manejara sera el arrastre o Drag and Drop de objetos cosa que no hemos abordado en ninguna entrada anterior y claro no desmerecera el codigo de generación de numeros para el juego.
05 octubre 2006
Mejora en dbimage
Estaba pensando en agregarle alguna mejora al programa dbimage y nada mejor que incluir la opcion de guardar los datos cargados en el treeview, asi que he optado por guardar esa informacion en un archivo xml, por lo que ahora veremos un poco como se manipula un archivo xml con c# en Mono, ahora me pongo a trabajar en ello y espero tener algo en los siguientes dias
Referencias previas:
Pantalla de dbimage
Codigo de dbimage
Referencias previas:
Pantalla de dbimage
Codigo de dbimage
30 septiembre 2006
Mas memoria para mi pc
Ahora si que ya no se ni como contar esta anecdota, si molesto o contento, les explicare molesto por que y contento tambien.
Resulta que ultimamente venia pensando en comprarle mas memoria a mi pc, no era por que estuviera lenta o que sintiera que ya la necesitaba, pero me dije pues por que no ponerle algo extra que al final de cuentas se llega a necesitar, asi que me dirijo a la tienda (que segun es la mas surtida) y pregunto por una memoria DDR pc3200 (400 Mhz) de 512 Mb y el empleado en tono como burlon me dice "Esas ya no las vendemos" y ya fue todo, que es lo que pasa con este tipo, en realidad su salario es tan poco, que solo se limita a contestar a un cliente de esa manera, ahora ya entenderan la parte molesta de esta anecdota, si ya se mi pc esta rucona, y con esa idea me largue de la mendiga tienda, pero y ahora entonces mi pc la debo tirar, debo buscar un incauto y vendersela para actualizarme o por ultimo regalarla.
Pero bueno despues de calmarme opte por dirigirme al lugar donde compre mi pc, ya ahi le digo al dueño (por que en este caso no es empleado, es el mero dueño) tienes una memoria DDR pc3200 (400 Mhz) de 512 Mb, y el de manera muy amable me dice claro y saca la memoria y me la entrega, asi mero se debe de tratar al cliente, hasta ni me queje por el costo de la memoria.
La conclusion de todo esto me lleva a una cosa, si yo estoy a gusto con mi pc y solo quiero hacerle unos ajustes por que me han de obligar a decidirme por regalar o vender mi pc, no señores distribuidores estan en un error y creo que deben capacitar muy bien a sus empleados para que no corran a los clientes, en fin por el moment0 mi pc ya tiene sus 512 mb adicionales y yo a gusto hasta que no tenga que buscar algo nuevamente para ella.
Resulta que ultimamente venia pensando en comprarle mas memoria a mi pc, no era por que estuviera lenta o que sintiera que ya la necesitaba, pero me dije pues por que no ponerle algo extra que al final de cuentas se llega a necesitar, asi que me dirijo a la tienda (que segun es la mas surtida) y pregunto por una memoria DDR pc3200 (400 Mhz) de 512 Mb y el empleado en tono como burlon me dice "Esas ya no las vendemos" y ya fue todo, que es lo que pasa con este tipo, en realidad su salario es tan poco, que solo se limita a contestar a un cliente de esa manera, ahora ya entenderan la parte molesta de esta anecdota, si ya se mi pc esta rucona, y con esa idea me largue de la mendiga tienda, pero y ahora entonces mi pc la debo tirar, debo buscar un incauto y vendersela para actualizarme o por ultimo regalarla.
Pero bueno despues de calmarme opte por dirigirme al lugar donde compre mi pc, ya ahi le digo al dueño (por que en este caso no es empleado, es el mero dueño) tienes una memoria DDR pc3200 (400 Mhz) de 512 Mb, y el de manera muy amable me dice claro y saca la memoria y me la entrega, asi mero se debe de tratar al cliente, hasta ni me queje por el costo de la memoria.
La conclusion de todo esto me lleva a una cosa, si yo estoy a gusto con mi pc y solo quiero hacerle unos ajustes por que me han de obligar a decidirme por regalar o vender mi pc, no señores distribuidores estan en un error y creo que deben capacitar muy bien a sus empleados para que no corran a los clientes, en fin por el moment0 mi pc ya tiene sus 512 mb adicionales y yo a gusto hasta que no tenga que buscar algo nuevamente para ella.
28 septiembre 2006
Se acaba septiembre
Se acaba septiembre y las entradas en este mes fueron a cuenta gotas, pero que mas queda decir, espero que en el proximo mes acabe los proyectos iniciados o de perdida descargue la nueva version de Mono 1.1.17 y la instale para reemplazar el 1.1.16.1 que apenas instale, segun cuentan que cambiaron por completo el compilador del visual basic .net para Mono, cosa que me empieza a causar tentacion probarlo con Mono y recordar aquellos tiempos en los que aprendi a programar con visual basic (el que diga que no a programado en vb que alce la mano), pero seria algo interesante poner mis codigos escritos ahora en vb .net
A veces se me viene a la mente las palabras del señor Miguel de Icaza respecto a programar en Visual Basic en el ambiente de Mono (jajaja), en fin Octubre llega y ahora a recargar pilas para comenzar de nuevo por el buen camino.
A veces se me viene a la mente las palabras del señor Miguel de Icaza respecto a programar en Visual Basic en el ambiente de Mono (jajaja), en fin Octubre llega y ahora a recargar pilas para comenzar de nuevo por el buen camino.
26 septiembre 2006
Buen radio
Creo que nunca sabre poner un titulo de entrada.... pero a lo que voy, en estos dias buscando algo acerca de creative commons (cc) me encontre con una entrevista que se realizo en el programa de radio Dommo que se transmite de lunes a viernes de 20:00 a 21:00 horas en el 96.9 de F.M. y es conducido por Ricardo Zamora y Javier Matuk, y diran que tiene de especial esto, pues nada mas y nada menos que puedes descargar el programa de la pagina en formato MP3 para escucharlo tranquilamente para los que no tenemos la oportunidad de escucharlo de manera directa del radio, es una propuesta muy interesante, saludos al señor Matuk desde este blog.
22 septiembre 2006
C# con .NET
En estos dias a pesar de no querer me he tenido que desarrollar una aplicacion con windows forms y c# yo no queria utilizarlo ya que me agrada mas GTK pero como no encontre una forma sencilla de distribuir una aplicacion GTK y C# hecha para MONO pues he optado por hacerla con C# .NET de Micro... el framework 1.1, pero en fin despues mostrare el codigo, ya que esta aplicacion abre un archivo XML y lo almacena en un dataset para llenar un DataGrid y de igual forma se puede editar y guardar (actualizar) los datos.
23 agosto 2006
error en clipboard
Compilando minis en linux me he encontrado con 2 errores en el objeto Gtk.Clipboard
me dice que WaitIsImageAvailable() no esta en el espacio de nombres de Gtk.Clipboard y tambien clip.WaitForImage() no se encuentra, pero el caso de que tengo instalado Mono-1.1.16.1 tanto en Linux como en Windows, pero en Windows no existe error alguno, pero en linux me da estos 2 errores, por lo que por el momento la funcion de pegado de imagen en minis solo estara disponible en windows (que mala pata) y en linux pues buscare como arreglarlo, pero si alguien sabe que pasa y se anima a iluminarme lo agradecere en grande.
me dice que WaitIsImageAvailable() no esta en el espacio de nombres de Gtk.Clipboard y tambien clip.WaitForImage() no se encuentra, pero el caso de que tengo instalado Mono-1.1.16.1 tanto en Linux como en Windows, pero en Windows no existe error alguno, pero en linux me da estos 2 errores, por lo que por el momento la funcion de pegado de imagen en minis solo estara disponible en windows (que mala pata) y en linux pues buscare como arreglarlo, pero si alguien sabe que pasa y se anima a iluminarme lo agradecere en grande.
He retirado la encuesta
Ayer se me ha ocurrido entrar y ver el resultado de la encuesta que habia colocado en este blog, el cuestionamiento era sobre que se deberian de enfocar los ejemplos de c# aqui mostrados y cual es mi sorpresa que me encontre con una ventana emergente que me decia que mi equipo estaba vulnerable y otros rollos, principalmente era un addware (creo que asi se llama) y pues le dije adios a esta encuesta, pues no fueran a pensar que era obra mia, pero nada de esto, la encuesta la habia agregado de un servicio gratuito a este blog, pero pues asi son las cosas, pero en fin despues de varios meses ya me di cuenta de lo que debo de enfocar mis ejemplos, ganando rotundamente ejemplos con bases de datos con 12 votos (que barbaro) nunca imagine recibir tantos votos!
14 agosto 2006
Mejoras en minis-0.0.1
minis-0.0.1 ahora tiene una mejora, se incorporo la funcion de carga de imagenes desde el portapapeles, incluso si capturan la pantalla con printscreen de igual forma tambien la puede pegar y despues generarse su thumbnail (miniatura), de igual forma pueden bajar el paquete con todos los cambios incluidos.
descargar minis-0.0.1
Este es el codigo anexado
public void on_bPegar_clicked(System.Object b, EventArgs e)
{
Gtk.Clipboard clip = Gtk.Clipboard.Get(Gdk.Atom.Intern("CLIPBOARD", true));
//Se verifica que el contenido del portapapeles sea una imagen valida
if(clip.WaitIsImageAvailable() == true)
{
Gdk.Pixbuf ImagenScreen = clip.WaitForImage();
ImagenScreen.Save("screen.jpg","jpeg");
NombreImagen = "screen.jpg";
Gdk.Pixbuf escalar;
escalar = ImagenScreen.ScaleSimple (460, 380, Gdk.InterpType.Hyper);
ImagenActual.Pixbuf = escalar;
ImagenMiniatura.Pixbuf = Thumbnail(NombreImagen, Ancho.ValueAsInt, Alto.ValueAsInt);
}
else
mensaje("El Portapapeles no contiene una imagen valida!", MessageType.Warning);
}
Aqui la pantalla del cambio y nueva imagen
descargar minis-0.0.1
Este es el codigo anexado
public void on_bPegar_clicked(System.Object b, EventArgs e)
{
Gtk.Clipboard clip = Gtk.Clipboard.Get(Gdk.Atom.Intern("CLIPBOARD", true));
//Se verifica que el contenido del portapapeles sea una imagen valida
if(clip.WaitIsImageAvailable() == true)
{
Gdk.Pixbuf ImagenScreen = clip.WaitForImage();
ImagenScreen.Save("screen.jpg","jpeg");
NombreImagen = "screen.jpg";
Gdk.Pixbuf escalar;
escalar = ImagenScreen.ScaleSimple (460, 380, Gdk.InterpType.Hyper);
ImagenActual.Pixbuf = escalar;
ImagenMiniatura.Pixbuf = Thumbnail(NombreImagen, Ancho.ValueAsInt, Alto.ValueAsInt);
}
else
mensaje("El Portapapeles no contiene una imagen valida!", MessageType.Warning);
}
Aqui la pantalla del cambio y nueva imagen
13 agosto 2006
minis-0.0.1 gtksharp-2.0
Despues de corregir ciertos detalles de minis aqui dejo el enlace para su descarga con todos los archivos necesarios.
Aclaracion: el codigo mostrado anteriormente se puede compilar con gtk-sharp inferior a 2.0
El codigo aqui disponible para su descarga es para compilarse con gtksharp 2.8.3
Requerimientos:
mono-1.1.16.1
gtk-sharp-2.8.3
descargar minis-0.0.1
Mas informacion de minis
Aclaracion: el codigo mostrado anteriormente se puede compilar con gtk-sharp inferior a 2.0
El codigo aqui disponible para su descarga es para compilarse con gtksharp 2.8.3
Requerimientos:
mono-1.1.16.1
gtk-sharp-2.8.3
descargar minis-0.0.1
Mas informacion de minis
12 agosto 2006
Minis-0.0.1
Ya encarrerado con esto de los Thumb's, agarre parte del codigo de dbimage y lo transforme en minis, que viene siendo un programa para abrir una imagen y pasarla a miniatura, minis tiene la opcion de configurar el tamaño de la miniatura y el formato de la imagen resultante, puede ser jpg o png, por el momento es funcional claro con detalles que arreglar, pero ya se puede utilizar con cierto grado de confianza, aqui dejo la pantalla, y el codigo, si gustas mejorarlo o utilizarlo como esta pueden hacerlo solo no olviden comentar a su autor.
Lenguaje utilizado: c#
Entorno de desarrollo: Mono 1.1.12

Aqui dejo el codigo
//------------------------------------------------------------------------------------------------------------------
// Proyecto: Convertidor de Imagenes a tamaño miniatura (thumbnails)
// Desarrollo: gsur
// Fecha: 12/08/2006
// Compilar:
// mcs minis.cs AcercaDe.cs -out:minis.exe -pkg:gtk-sharp -pkg:glade-sharp -resource:minis-0.0.1.glade;acercade.glade
// Entorno de desarrollo: Mono
//blog: http://gsur.blogspot.com
//------------------------------------------------------------------------------------------------------------------
using System;
using Gtk;
using Glade;
public class minis
{
[Glade.Widget] Gtk.Window window;
[Glade.Widget] Gtk.SpinButton Ancho;
[Glade.Widget] Gtk.SpinButton Alto;
[Glade.Widget] Gtk.Image ImagenActual;
[Glade.Widget] Gtk.Image ImagenMiniatura;
static FileSelection filew;
static string tipo;
string NombreImagen;
public static void Main(String[] args)
{
Application.Init();
minis prog = new minis();
prog.muestra();
}
public minis()
{
Glade.XML gxml=new Glade.XML(null, "minis-0.0.1.glade","window",null);
gxml.Autoconnect(this);
window.Icon = new Gdk.Pixbuf("minisico.png");
NombreImagen="";
tipo = "jpeg";
}
public void muestra()
{
Application.Run();
}
public void on_window_delete_event(object o, DeleteEventArgs args)
{
Application.Quit();
}
public void on_bSalir_clicked(System.Object b, EventArgs e)
{
Application.Quit();
}
public void on_bAbrir_clicked(System.Object b, EventArgs e)
{
filew = new FileSelection("Archivo de Imagen");
filew.HideFileopButtons ();
filew.Filename = NombreImagen;
ResponseType r = (ResponseType) filew.Run();
if(r == ResponseType.Ok)
{
try
{
NombreImagen = filew.Filename;
ImagenActual.Pixbuf = Thumbnail(filew.Filename, 640, 480);
ImagenMiniatura.Pixbuf = Thumbnail(NombreImagen, Ancho.ValueAsInt, Alto.ValueAsInt);
filew.Destroy();
}
catch(Exception error)
{
Console.WriteLine(error);
}
filew.Destroy();
}
else
filew.Destroy();
}
public void on_bGuardar_clicked(System.Object b, EventArgs e)
{
String msg;
Gtk.FileSelection fileg = new FileSelection("Guardar Miniatura como");
fileg.HideFileopButtons ();
fileg.SetResponseSensitive(ResponseType.Ok,false);
fileg.AddButton(Stock.Save,ResponseType.Ok);
fileg.Filename = NombreImagen;
fileg.Icon= new Gdk.Pixbuf("minisico.png");
ResponseType r = (ResponseType) fileg.Run();
if(r == ResponseType.Ok)
{
if(Guardar(fileg.Filename))
{
msg="\n\nSe ha guardado la miniatura";
mensaje(msg, MessageType.Info);
}
else
{
msg="\n\nOcurrio Error al guardar!";
mensaje(msg, MessageType.Warning);
}
fileg.Destroy();
}
else
fileg.Destroy();
}
public void on_bAplicar_clicked(System.Object b, EventArgs e)
{
if(NombreImagen == "")
mensaje("Debe abrir una imagen valida!", MessageType.Warning);
else
ImagenMiniatura.Pixbuf = Thumbnail(NombreImagen, Ancho.ValueAsInt, Alto.ValueAsInt);
}
public void on_bAcerca_clicked(System.Object b, EventArgs e)
{
new AcercaDe();
}
Gdk.Pixbuf Thumbnail(string nombre, int ancho, int alto)
{
Gdk.Pixbuf p = new Gdk.Pixbuf(nombre);
Gdk.Pixbuf thumb;
thumb = p.ScaleSimple(ancho, alto, Gdk.InterpType.Hyper);
return thumb;
}
void mensaje(string mensaje, MessageType MensajeTipo)
{
MessageDialog md = new MessageDialog(
window,
DialogFlags.DestroyWithParent,
MensajeTipo,
ButtonsType.Ok,
mensaje);
ResponseType rok = (ResponseType) md.Run();
if(rok == ResponseType.Ok)
{
md.Destroy();
}
}
bool Guardar(string NombreGuardar)
{
try
{
Gdk.Pixbuf temp;
temp = ImagenMiniatura.Pixbuf;
temp.Savev(NombreGuardar + "." + tipo,tipo,null,null);
return true;
}
catch(Exception e)
{
return false;
}
}
public void on_opjpg_toggled(System.Object b, EventArgs e)
{
tipo = "jpeg";
}
public void on_oppng_toggled(System.Object b, EventArgs e)
{
tipo = "png";
}
}
Lenguaje utilizado: c#
Entorno de desarrollo: Mono 1.1.12
Pantalla de minis en accion

Aqui dejo el codigo
//------------------------------------------------------------------------------------------------------------------
// Proyecto: Convertidor de Imagenes a tamaño miniatura (thumbnails)
// Desarrollo: gsur
// Fecha: 12/08/2006
// Compilar:
// mcs minis.cs AcercaDe.cs -out:minis.exe -pkg:gtk-sharp -pkg:glade-sharp -resource:minis-0.0.1.glade;acercade.glade
// Entorno de desarrollo: Mono
//blog: http://gsur.blogspot.com
//------------------------------------------------------------------------------------------------------------------
using System;
using Gtk;
using Glade;
public class minis
{
[Glade.Widget] Gtk.Window window;
[Glade.Widget] Gtk.SpinButton Ancho;
[Glade.Widget] Gtk.SpinButton Alto;
[Glade.Widget] Gtk.Image ImagenActual;
[Glade.Widget] Gtk.Image ImagenMiniatura;
static FileSelection filew;
static string tipo;
string NombreImagen;
public static void Main(String[] args)
{
Application.Init();
minis prog = new minis();
prog.muestra();
}
public minis()
{
Glade.XML gxml=new Glade.XML(null, "minis-0.0.1.glade","window",null);
gxml.Autoconnect(this);
window.Icon = new Gdk.Pixbuf("minisico.png");
NombreImagen="";
tipo = "jpeg";
}
public void muestra()
{
Application.Run();
}
public void on_window_delete_event(object o, DeleteEventArgs args)
{
Application.Quit();
}
public void on_bSalir_clicked(System.Object b, EventArgs e)
{
Application.Quit();
}
public void on_bAbrir_clicked(System.Object b, EventArgs e)
{
filew = new FileSelection("Archivo de Imagen");
filew.HideFileopButtons ();
filew.Filename = NombreImagen;
ResponseType r = (ResponseType) filew.Run();
if(r == ResponseType.Ok)
{
try
{
NombreImagen = filew.Filename;
ImagenActual.Pixbuf = Thumbnail(filew.Filename, 640, 480);
ImagenMiniatura.Pixbuf = Thumbnail(NombreImagen, Ancho.ValueAsInt, Alto.ValueAsInt);
filew.Destroy();
}
catch(Exception error)
{
Console.WriteLine(error);
}
filew.Destroy();
}
else
filew.Destroy();
}
public void on_bGuardar_clicked(System.Object b, EventArgs e)
{
String msg;
Gtk.FileSelection fileg = new FileSelection("Guardar Miniatura como");
fileg.HideFileopButtons ();
fileg.SetResponseSensitive(ResponseType.Ok,false);
fileg.AddButton(Stock.Save,ResponseType.Ok);
fileg.Filename = NombreImagen;
fileg.Icon= new Gdk.Pixbuf("minisico.png");
ResponseType r = (ResponseType) fileg.Run();
if(r == ResponseType.Ok)
{
if(Guardar(fileg.Filename))
{
msg="\n\nSe ha guardado la miniatura";
mensaje(msg, MessageType.Info);
}
else
{
msg="\n\nOcurrio Error al guardar!";
mensaje(msg, MessageType.Warning);
}
fileg.Destroy();
}
else
fileg.Destroy();
}
public void on_bAplicar_clicked(System.Object b, EventArgs e)
{
if(NombreImagen == "")
mensaje("Debe abrir una imagen valida!", MessageType.Warning);
else
ImagenMiniatura.Pixbuf = Thumbnail(NombreImagen, Ancho.ValueAsInt, Alto.ValueAsInt);
}
public void on_bAcerca_clicked(System.Object b, EventArgs e)
{
new AcercaDe();
}
Gdk.Pixbuf Thumbnail(string nombre, int ancho, int alto)
{
Gdk.Pixbuf p = new Gdk.Pixbuf(nombre);
Gdk.Pixbuf thumb;
thumb = p.ScaleSimple(ancho, alto, Gdk.InterpType.Hyper);
return thumb;
}
void mensaje(string mensaje, MessageType MensajeTipo)
{
MessageDialog md = new MessageDialog(
window,
DialogFlags.DestroyWithParent,
MensajeTipo,
ButtonsType.Ok,
mensaje);
ResponseType rok = (ResponseType) md.Run();
if(rok == ResponseType.Ok)
{
md.Destroy();
}
}
bool Guardar(string NombreGuardar)
{
try
{
Gdk.Pixbuf temp;
temp = ImagenMiniatura.Pixbuf;
temp.Savev(NombreGuardar + "." + tipo,tipo,null,null);
return true;
}
catch(Exception e)
{
return false;
}
}
public void on_opjpg_toggled(System.Object b, EventArgs e)
{
tipo = "jpeg";
}
public void on_oppng_toggled(System.Object b, EventArgs e)
{
tipo = "png";
}
}
05 agosto 2006
Thumbnails con Mono - C# y Gtk
Despues de un tiempo de no poner codigo, aqui dejo lo que es el avance del organizador de fotos que estoy haciendo, donde incluire el almacenamiento en una base de datos (MySql), por el momento este codigo genera thumbnails y los muestra en un Treeview, todo esto esta programado en c# y Gtk.
Este codigo lo puedes utilizar y claro no olviden mencionar a gsur como su autor
//mcs -pkg:gtk-sharp dbimagen.cs
//mono dbimagen.exe
using System;
using Gtk;
using System.IO;
public class dbimagen
{
public static void Main()
{
Gtk.Application.Init();
new dbimagen();
Gtk.Application.Run();
}
static Gtk.TreeView tree;
static Gtk.Entry EntradaFolder;
static Gtk.Entry ancho;
static Gtk.Entry alto;
static FileSelection filew;
static Gtk.Entry EntradaThumb;
static Gtk.ListStore ImagenLista;
public dbimagen()
{
//Creacion de ventana
Gtk.Window window = new Gtk.Window("Generador de Thumbnails ver. 0.1");
window.SetSizeRequest(600, 400);
window.DeleteEvent+=new DeleteEventHandler(Window_Delete);
EntradaFolder = new Gtk.Entry();
Gtk.Label lblFolder = new Gtk.Label("Folder: ");
Gtk.HBox BoxSup = new Gtk.HBox();
Gtk.Button bexaminar = new Gtk.Button(Stock.Open);
bexaminar.Clicked += OnButtonClicked;
Gtk.Button bcargar = new Gtk.Button(Stock.Ok);
bcargar.Clicked += OnBCargarClicked;
Gtk.Label lblancho = new Gtk.Label("Ancho: ");
Gtk.Label lblalto = new Gtk.Label("Alto: ");
ancho = new Gtk.Entry("75");
alto = new Gtk.Entry("50");
BoxSup.PackStart(lblFolder, false, false, 5);
BoxSup.PackStart(EntradaFolder, false, false, 5);
BoxSup.PackStart(bexaminar, false, false, 5);
BoxSup.PackStart(bcargar, false, false, 5);
BoxSup.PackStart(lblancho, false, false, 5);
BoxSup.PackStart(ancho, true, true, 5);
BoxSup.PackStart(lblalto, false, false, 5);
BoxSup.PackStart(alto, true, true, 5);
//Creacion del Treeview donde se mostrara informacion de la imagen
tree = new Gtk.TreeView();
Gtk.VBox box = new Gtk.VBox();
box.PackStart(BoxSup, false, false, 5);
ScrolledWindow scrolledWindow = new ScrolledWindow ();
scrolledWindow.ShadowType = ShadowType.EtchedIn;
scrolledWindow.SetPolicy (PolicyType.Automatic, PolicyType.Automatic);
scrolledWindow.Add(tree);
box.PackStart (scrolledWindow, true, true, 5);
Gtk.HBox boxinf= new Gtk.HBox();
Gtk.Label lblnthumb = new Gtk.Label("Thumbnail Seleccionado ");
EntradaThumb = new Gtk.Entry();
Gtk.Button bguardar = new Gtk.Button(Stock.Save);
boxinf.PackStart(lblnthumb, false, false, 5);
boxinf.PackStart(EntradaThumb, false, false, 5);
boxinf.PackStart(bguardar, false, false, 5);
box.PackStart(boxinf, false, false, 5);
//Lo agregamos a la ventana
window.Add(box);
//Agregamos las columnas al Treeview
tree.AppendColumn("Miniatura",new Gtk.CellRendererPixbuf(),"pixbuf",0);
Gtk.TreeViewColumn NombreImagenColumna = new Gtk.TreeViewColumn();
NombreImagenColumna.Title = "Nombre de la Imagen";
Gtk.CellRendererText NombreImagenCelda = new Gtk.CellRendererText();
NombreImagenColumna.PackStart(NombreImagenCelda,true);
tree.AppendColumn(NombreImagenColumna.Title, new Gtk.CellRendererText(),"text",1);
tree.AppendColumn("Tipo",new Gtk.CellRendererText(),"text",2);
window.ShowAll();
}
static void OnBCargarClicked(object o, EventArgs args)
{
ImagenLista = new Gtk.ListStore(typeof(Gdk.Pixbuf), typeof(string), typeof(string));
string ndir = EntradaFolder.Text;
string nombreima;
DirectoryInfo dir = new DirectoryInfo(ndir);
FileInfo[] archivos = dir.GetFiles();
for(int i = 0; i < nombreima =" ndir" model =" ImagenLista;" twidth =" Convert.ToInt32(ancho.Text);" theight =" Convert.ToInt32(alto.Text);" pb =" new" thumb =" pb.ScaleSimple" retval="true;" filew =" new" filename = "" text =" filew.Filename;">
Este codigo lo puedes utilizar y claro no olviden mencionar a gsur como su autor
//mcs -pkg:gtk-sharp dbimagen.cs
//mono dbimagen.exe
using Gtk;
using System.IO;
public class dbimagen
{
public static void Main()
{
Gtk.Application.Init();
new dbimagen();
Gtk.Application.Run();
}
static Gtk.TreeView tree;
static Gtk.Entry EntradaFolder;
static Gtk.Entry ancho;
static Gtk.Entry alto;
static FileSelection filew;
static Gtk.Entry EntradaThumb;
static Gtk.ListStore ImagenLista;
public dbimagen()
{
//Creacion de ventana
Gtk.Window window = new Gtk.Window("Generador de Thumbnails ver. 0.1");
window.SetSizeRequest(600, 400);
window.DeleteEvent+=new DeleteEventHandler(Window_Delete);
EntradaFolder = new Gtk.Entry();
Gtk.Label lblFolder = new Gtk.Label("Folder: ");
Gtk.HBox BoxSup = new Gtk.HBox();
Gtk.Button bexaminar = new Gtk.Button(Stock.Open);
bexaminar.Clicked += OnButtonClicked;
Gtk.Button bcargar = new Gtk.Button(Stock.Ok);
bcargar.Clicked += OnBCargarClicked;
Gtk.Label lblancho = new Gtk.Label("Ancho: ");
Gtk.Label lblalto = new Gtk.Label("Alto: ");
ancho = new Gtk.Entry("75");
alto = new Gtk.Entry("50");
BoxSup.PackStart(lblFolder, false, false, 5);
BoxSup.PackStart(EntradaFolder, false, false, 5);
BoxSup.PackStart(bexaminar, false, false, 5);
BoxSup.PackStart(bcargar, false, false, 5);
BoxSup.PackStart(lblancho, false, false, 5);
BoxSup.PackStart(ancho, true, true, 5);
BoxSup.PackStart(lblalto, false, false, 5);
BoxSup.PackStart(alto, true, true, 5);
//Creacion del Treeview donde se mostrara informacion de la imagen
tree = new Gtk.TreeView();
Gtk.VBox box = new Gtk.VBox();
box.PackStart(BoxSup, false, false, 5);
ScrolledWindow scrolledWindow = new ScrolledWindow ();
scrolledWindow.ShadowType = ShadowType.EtchedIn;
scrolledWindow.SetPolicy (PolicyType.Automatic, PolicyType.Automatic);
scrolledWindow.Add(tree);
box.PackStart (scrolledWindow, true, true, 5);
Gtk.HBox boxinf= new Gtk.HBox();
Gtk.Label lblnthumb = new Gtk.Label("Thumbnail Seleccionado ");
EntradaThumb = new Gtk.Entry();
Gtk.Button bguardar = new Gtk.Button(Stock.Save);
boxinf.PackStart(lblnthumb, false, false, 5);
boxinf.PackStart(EntradaThumb, false, false, 5);
boxinf.PackStart(bguardar, false, false, 5);
box.PackStart(boxinf, false, false, 5);
//Lo agregamos a la ventana
window.Add(box);
//Agregamos las columnas al Treeview
tree.AppendColumn("Miniatura",new Gtk.CellRendererPixbuf(),"pixbuf",0);
Gtk.TreeViewColumn NombreImagenColumna = new Gtk.TreeViewColumn();
NombreImagenColumna.Title = "Nombre de la Imagen";
Gtk.CellRendererText NombreImagenCelda = new Gtk.CellRendererText();
NombreImagenColumna.PackStart(NombreImagenCelda,true);
tree.AppendColumn(NombreImagenColumna.Title, new Gtk.CellRendererText(),"text",1);
tree.AppendColumn("Tipo",new Gtk.CellRendererText(),"text",2);
window.ShowAll();
}
static void OnBCargarClicked(object o, EventArgs args)
{
ImagenLista = new Gtk.ListStore(typeof(Gdk.Pixbuf), typeof(string), typeof(string));
string ndir = EntradaFolder.Text;
string nombreima;
DirectoryInfo dir = new DirectoryInfo(ndir);
FileInfo[] archivos = dir.GetFiles();
for(int i = 0; i < nombreima =" ndir" model =" ImagenLista;" twidth =" Convert.ToInt32(ancho.Text);" theight =" Convert.ToInt32(alto.Text);" pb =" new" thumb =" pb.ScaleSimple" retval="true;" filew =" new" filename = "" text =" filew.Filename;">
03 agosto 2006
Mis playeras mono y gnome (1)
Que!!!! ya mas de un mes sin publicar nada, pero en fin de estos dias que no he escrito no hablaremos, y mejor ni pregunten si he programado por que de plano en este tema estoy mas frito, pero dejemos de hablar de cosas tristes y les comento que despues de buscar algunos souveniers (asi se escribe?) del ambiente de software libre, me canse de buscar y cotizar, pero no encontre nada, asi que me decidi por hacerme de unas playeras con el logo de gnome y claro de Mono no podian faltar, asi que me bajo los logos de algunos sitios (espero no exista algun problema legal) y nos lanzamos a una imprenta para cotizar cuanto me sale el estampado de los logos en las playeras, y bueno si no fuera por que llevaba freno quien sabe como hubiera terminado con mis estampados, en fin me convenci por el precio (aqui no lo pondre, no viene al caso) y ahora a escoger unas playeras para los logos, ya imaginaran el entusiasmo que me cargaba, bueno despues de todo esto, por fin tengo mis super playeras de Mono y Gnome y en la primer puesta me tomo la foto para subirlas aqui, a veces no queda de otra que hacerlo uno mismo si no tenemos las cosas a la mano.
Suscribirse a:
Entradas (Atom)



