15 diciembre 2012

El año 2012 esta finalizando y creo que buscare las lista de las cosas que pretendía realizar en este año que esta terminando y queda claro que entre mi lista por hacer no estaba anotar algo en este blog, ya que paso todo el año y no escribí nada, pero la verdad ya no encuentro la lista o ya ni me acuerdo si anote algo, pero bueno después de esta introducción adulando la mala memoria y la falta de organización que rigen mi vida, puedo comentar a los casi 00000.0001 lectores que me leen que empezare a escribir algunas cosas interesantes relacionados a los servicios que ofrece la nube de manera gratuita, entre estas tenemos algunos sitios que ofrecen alojamiento sin restricción y sin llenarte de publicidad, por otro lado un servicio de base de datos no-sql. Bueno por el momento eso es todo y que tengan un buen fin de año en compañía de sus seres queridos.

12 noviembre 2010

Base de datos Sqlite, .Net y C# primera parte

Bueno después de varios días sin actividad de nuevo retomo este espacio para traer un nuevo proyecto que quizas tenga varios errores pero lo que se pretende es conocer el uso de bases de datos Sqlite con .Net y C#, lo que veremos sera la unión de los ejemplos pasados (el explorador de imagenes con C# e Impresión con C#), aqui tenemos una aplicación que fungira como album fotografico que contendra hojas con un diseño y a cada foto se le podra incluir fotos para imprimir o solamente para organizar un poco el reguero de fotos que acostumbramos ir guardando en nuestro equipo y luego no sabemos donde quedaron.

Para la creación de este album usaremos una base de datos de Sqlite y para ello necesitamos solamente de incluir una referencia a system.data.sqlite.dll que se puede descargar de http://sqlite.phxsoftware.com/ y con esto ya podemos empezar a trabajar con la base de datos, claro esto se vera mas adelante, advierto que si el tiempo no me lo permite no podre explicar a detalle pero el codigo lo dejare.

Empecemos, la base de datos consistira en 5 tablas (por el momento)

1.- Tabla Album (tiene muy poca información pero es necesaria)
2.- Tabla Hoja ( aqui se guardara todo lo relacionado a la hoja de diseño para imprimir)
3.- Tabla Foto (aqui estara la información de cada foto desde nombre, tamaño, pie de foto, etc)
4.- Tabla Etiqueta (aqui podremos llevar etiquetas para agrupar las fotos)
5.- Tabla Elementos (aqui se pretende llevar todos los elementos de texto de la hoja de diseño)

Estas tablas se generaran cuando se cree un nuevo album

En la proxima entrega se dejara la imagen de la ventana de la aplicación.

31 octubre 2010

Explorador de Imagenes con C# en .Net

Aquí dejo el código de un sencillo explorador de archivos de imagen que se encuentran en una carpeta. Para todo esto se utiliza un formulario con un botón para abrir el cuadro de dialogo para seleccionar una carpeta del sistema (FolderBrowserDialog) y después se realiza un recorrido en la carpeta para mostrar los archivos que tengan una extensión de imágenes (jpg, bmp, gif, jpeg, etc), los resultados se muestran en un Treeview en forma de nodos que al seleccionar alguno se mostrara en un PictureBox en tamaño pequeño la imagen y ademas se mostraran unos pocos detalles del archivo de imagen.

Para mejor explicación dejo la imagen del programa en ejecución


Lo que aquí se pretende es mostrar la utilización de FolderBrowserDialog, TreeView y PictureBox.

Código del Programa

//
// Pequeño Explorador de Imagenes con C# en .Net
// Programo: http://gsur.blogspot.com
// El uso y modificación del código es libre y no olviden mencionar el origen gsur.blogspot.com
//

using System;
using System.Drawing;
using System.Windows.Forms;
using System.IO;
using System.Linq;

class Formulario : Form
{
private System.ComponentModel.IContainer components = null;
private System.Windows.Forms.FolderBrowserDialog DialogoSeleccionarCarpetas;
private System.Windows.Forms.Button btnBuscarCarpeta;
private System.Windows.Forms.TreeView Arbol;
private System.Windows.Forms.PictureBox Imagen;
private System.Windows.Forms.Panel PanelSup;
private System.Windows.Forms.Label lblDetalles;
public Formulario()
{
this.DialogoSeleccionarCarpetas = new System.Windows.Forms.FolderBrowserDialog();
this.btnBuscarCarpeta = new System.Windows.Forms.Button();
this.Arbol = new System.Windows.Forms.TreeView();
this.Imagen = new System.Windows.Forms.PictureBox();
this.PanelSup = new System.Windows.Forms.Panel();
this.lblDetalles = new System.Windows.Forms.Label();
this.Size = new System.Drawing.Size(845,610);
this.Text = "Clic en el boton Seleccionar carpeta";

PanelSup.Location = new Point(0,0);
PanelSup.Size = new Size(845, 50);
PanelSup.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D;
PanelSup.Anchor = (AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right);
btnBuscarCarpeta.Location = new System.Drawing.Point(8, 10);
btnBuscarCarpeta.Name = "btnBuscarCarpeta";
btnBuscarCarpeta.Size = new System.Drawing.Size(180, 32);
btnBuscarCarpeta.TabIndex = 1;
btnBuscarCarpeta.Text = "Seleccionar Carpeta";
btnBuscarCarpeta.UseVisualStyleBackColor = true;
btnBuscarCarpeta.Click += new System.EventHandler(btnBuscarCarpeta_Click);
Arbol.Location = new Point(8, 64);
Arbol.Size = new Size(480, 515);
Arbol.Anchor = AnchorStyles.Top | AnchorStyles.Left;
Arbol.AfterSelect += new System.Windows.Forms.TreeViewEventHandler(Arbol_AfterSelect);

Imagen.Location = new System.Drawing.Point(490, 64);
Imagen.Size = new System.Drawing.Size(340, 260);
Imagen.TabStop = false;
Imagen.SizeMode = PictureBoxSizeMode.StretchImage;
Imagen.BorderStyle = BorderStyle.Fixed3D;
Imagen.Anchor = AnchorStyles.Top | AnchorStyles.Left;
lblDetalles.Location = new System.Drawing.Point(500,340);
lblDetalles.Font = new Font(lblDetalles.Font.Name, 8, FontStyle.Bold, lblDetalles.Font.Unit);
Controls.Add(PanelSup);
PanelSup.Controls.Add(btnBuscarCarpeta);
Controls.Add(Arbol);
Controls.Add(Imagen);
Controls.Add(lblDetalles);
DialogoSeleccionarCarpetas.ShowNewFolderButton = false;
DialogoSeleccionarCarpetas.RootFolder = Environment.SpecialFolder.Desktop;
}
private void btnBuscarCarpeta_Click(object sender, EventArgs e)
{
System.IO.FileInfo []archivos;
DialogResult result = DialogoSeleccionarCarpetas.ShowDialog();
if( result == DialogResult.OK )
{
this.Text = DialogoSeleccionarCarpetas.SelectedPath;
var dir = new System.IO.DirectoryInfo(DialogoSeleccionarCarpetas.SelectedPath);
//Uso de LINQ to FileSystem (O LINQ to Objects)
var resultado = from arch in dir.GetFiles()
where arch.Extension.ToLower() == ".jpg" ||
arch.Extension.ToLower() == ".bmp" ||
arch.Extension.ToLower() == ".png" ||
arch.Extension.ToLower() == ".gif" ||
arch.Extension.ToLower() == ".jpeg"
select arch;
archivos=resultado.ToArray<System.IO.FileInfo>();
System.IO.FileInfo item;
Arbol.BeginUpdate();
Arbol.Nodes.Clear();
for(int i=0;i<archivos.Length;i++)
{
item = archivos[i];
if (item.Extension.ToLower() == ".jpg" ||
item.Extension.ToLower() == ".bmp" ||
item.Extension.ToLower() == ".png" ||
item.Extension.ToLower() == ".gif" ||
item.Extension.ToLower() == ".jpeg")
{
Arbol.Nodes.Add(item.FullName);
}
}
Arbol.EndUpdate();
}
}

private void Arbol_AfterSelect(System.Object sender, System.Windows.Forms.TreeViewEventArgs e)
{
System.IO.FileInfo ArchivoImagen = new System.IO.FileInfo(Arbol.SelectedNode.FullPath);
long tArchivo = ArchivoImagen.Length;
string tam_Archivo;
if(tArchivo>1024)
{
if(tArchivo / 1024 > 1024)
tam_Archivo = (tArchivo / (1024*1000)).ToString("N") + " Megabytes";
else
tam_Archivo = (tArchivo / 1024).ToString("N") + " Kilobytes";
}
else
tam_Archivo = tArchivo.ToString("N") + " Bytes";
Imagen.Image = System.Drawing.Image.FromFile(Arbol.SelectedNode.FullPath);
lblDetalles.Text = "Nombre: " + ArchivoImagen.Name;
lblDetalles.Text += "nnTamaño del Archivo: " + tam_Archivo;
lblDetalles.Text += "nnDimensiones (Ancho x Alto): ";
lblDetalles.Text += Imagen.Image.Width.ToString("#,###");
lblDetalles.Text += " x " + Imagen.Image.Height.ToString("#,###") + " Pixeles";
lblDetalles.Size = new Size (lblDetalles.PreferredWidth, lblDetalles.PreferredHeight);
}

protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
[STAThread]
public static void Main()
{
Application.Run(new Formulario());
}
}

30 octubre 2010

Impresion en .Net con C#

Aquí dejo el código en C# de un programa que muestra un formulario con un control TextBox y un Boton para mostrar en vista previa lo capturado en el TextBox.

Código del programa

//
// Programa que muestra como mostrar una vista previa e imprimir
// http://gsur.blogspot.com
//

using System;
using System.Drawing;
using System.Windows.Forms;

namespace Impresion
{
class Formulario : Form
{
private System.ComponentModel.IContainer components = null;
private System.Drawing.Printing.PrintDocument ImprimeDocumento;
private System.Windows.Forms.PrintPreviewDialog DialogoVistaPrevia;
private System.Windows.Forms.Button btnImprime;
private System.Windows.Forms.TextBox txtNombre;
private System.Windows.Forms.Label lblNombre;
public Formulario()
{
ImprimeDocumento = new System.Drawing.Printing.PrintDocument();
DialogoVistaPrevia = new System.Windows.Forms.PrintPreviewDialog();
btnImprime = new System.Windows.Forms.Button();
txtNombre = new System.Windows.Forms.TextBox();
lblNombre = new System.Windows.Forms.Label();
ImprimeDocumento.PrintPage += new System.Drawing.Printing.PrintPageEventHandler(ImprimeDocumento_ImprimePagina);
DialogoVistaPrevia.AutoScrollMargin = new System.Drawing.Size(0, 0);
DialogoVistaPrevia.AutoScrollMinSize = new System.Drawing.Size(0, 0);
DialogoVistaPrevia.ClientSize = new System.Drawing.Size(400, 300);
DialogoVistaPrevia.Document = ImprimeDocumento;
DialogoVistaPrevia.Enabled = true;
DialogoVistaPrevia.Name = "printPreviewDialog1";
DialogoVistaPrevia.Visible = false;
btnImprime.Location = new System.Drawing.Point(80, 64);
btnImprime.Name = "btnImprime";
btnImprime.Size = new System.Drawing.Size(80, 22);
btnImprime.TabIndex = 1;
btnImprime.Text = "Vista Previa";
btnImprime.UseVisualStyleBackColor = true;
btnImprime.Click += new System.EventHandler(btnImprime_Click);

txtNombre.Location = new System.Drawing.Point(80, 32);
txtNombre.Name = "txtNombre";
txtNombre.Size = new System.Drawing.Size(200, 22);
txtNombre.TabIndex = 0;
txtNombre.Text = "Escribir su nombre";
lblNombre.Location = new System.Drawing.Point(32, 32);
lblNombre.Name = "lblNombre";
lblNombre.Text = "Nombre: ";
AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
ClientSize = new System.Drawing.Size(322, 287);
Controls.Add(btnImprime);
Controls.Add(txtNombre);
Controls.Add(lblNombre);
Name = "frmImprime";
Text = "Impresion con C#";
}
private void ImprimeDocumento_ImprimePagina(object sender, System.Drawing.Printing.PrintPageEventArgs e)
{
e.Graphics.DrawString("Nombre: " + txtNombre.Text, new Font("Arial", 16), System.Drawing.Brushes.Blue, new PointF(20,20));
Pen LineaNegra = new Pen(Color.FromArgb(255, 0, 0, 255), 5);
e.Graphics.DrawRectangle(LineaNegra, 120, 50, 450, 1);
}

private void btnImprime_Click(object sender, EventArgs e)
{
DialogoVistaPrevia.ShowDialog();
}
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
}

static class Programa
{
public static void Main()
{
Application.Run(new Formulario());
}
}
}

Imagen de la compilación del programa


Imagen del programa en ejecución

28 octubre 2010

Eventos del Mouse en C# (MouseEventHandler)

Programa de Ejemplo que mostrara las coordenadas de la posición donde se pulse el boton Izquierdo del ratón dentro de un formulario.

Codigo

using System;
using System.Windows.Forms;

class Recibe_Evento
{
public Recibe_Evento(Formulario frm)
{
frm.MouseDown += new MouseEventHandler(AlHacerClicRaton);
}

public void AlHacerClicRaton(object origen, MouseEventArgs e)
{
if(e.Button == MouseButtons.Left)
((Form)origen).Text = "Posicion: (" + e.X + ", " + e.Y + ")";
else
if((e.Button == MouseButtons.Right) || (e.Button == MouseButtons.Middle))
MessageBox.Show("Debe pulsar el boton izquierdo");
}
}

class Formulario : Form
{
public Formulario()
{
this.Size = new System.Drawing.Size(400,250);
this.Text = "Clic con el raton sobre el formulario";
Recibe_Evento r = new Recibe_Evento(this);
}

protected override void Dispose (bool disposing)
{
try
{
//Para demostrar que dispose es invocado
MessageBox.Show("Liberado");
}
catch(Exception)
{}
base. Dispose(disposing);
}
public static void Main()
{
Application.Run(new Formulario());
}
}

Ventanas donde se muestra la compilación y la ejecución.


Ventana que muestra el mensaje liberado al cerrar la ventana

27 octubre 2010

Programa Ejemplo de clases en C#

Aquí el código de ejemplo de uso de clases en c#

using System;

public class Persona //Clase Persona
{
private string Nombre; //Atributos
private int Edad;
//Constructor
public Persona(string N, int nEdad)
{
elNombre = N;
laEdad = nEdad;
}
//Metodos
public string elNombre
{
get
{
return this.Nombre;
}
set
{
this.Nombre = value;
}
}
public int laEdad
{
get
{
return this.Edad;
}
set
{
this.Edad = value;
}
}
}

public class Prog002
{
public static void Main()
{
Persona per = new Persona("Pedro Martinez Solis",24);
Console.WriteLine("***********************************************************************");
Console.WriteLine(" Programa usando una clase, inicia mostrando los datos que se pasan aln crear la instancia");
Console.WriteLine("***********************************************************************n");
Console.WriteLine("Nombre de la persona: {0}", per.elNombre);
Console.WriteLine("Edad: {0}", per.laEdad);
//Ahora pediremos los datos y los mostraremos
Console.Write("nnNombre de la persona: ");
per.elNombre = Console.ReadLine();
Console.Write("nEdad: ");
per.laEdad = int.Parse(Console.ReadLine());
Console.WriteLine("nnNuevos datos capturados");
Console.WriteLine("Nombre de la persona: {0}", per.elNombre);
Console.WriteLine("Edad: {0}", per.laEdad);
}
}

Ventana de como se vería la compilación y ejecución

15 diciembre 2008

Fin de año

Pues si, ya es casi fin de año y aqui de nuevo desempolvando el blog, me pregunto sobre que tendria que escribir para que no deje morir a esta bitacora, al comienzo comence con programacion, puro codigo crudo, quizas no de mucha utilidad pero a alguna que otra persona le aligere la tarea de investigar, en fin despues comence a divagar con codigo y entradas personales y por ultimo inclui un video, despues de ahi solamente 1 entrada mas y nada mas, asi que ahora llego a este punto considerando seguir escribiendo o solamente copiar y pegar alguno que otro codigo que he escrito, bueno, en fin ahora que ya estableci algunos dilemas de la problematica de comenzar un blog y mantenerlo vivo, me vuelvo a comprometer a mantener un poco mas al dia el blog con temas o codigo crudo copiado y pegado.

07 julio 2008

Desde hace mas de un año

De nuevo aqui con una entrada para quitar el polvo de este blog, por el momento no tengo codigo que pegar, pero lo que si se tiene es un proyecto en mente que espero no entumirme demasiado e irlo publicando y dandole forma, lo mas seguro es que sea programado con c# para darle un mejor sabor a todo esto, pero en fin dejo esto hasta aqui para irme preparando y ademas para desempolve con estas lineas es suficiente.

19 enero 2007

Concierto privado

Aqui dejo un video de un concierto privado del PDC03, tema "Miguel My Belle" dedicacion de Don Box a Miguel de Icaza.

18 enero 2007

Quemaduras por el Sol

Hace ya una tanda de años atras, recuerdo haber ido a la playa y pasar el día completo al sol sin bloqueador solar y pasarmela de lo lindo, al terminar el día solo tenia una leve quemadita por el sol que no pasaba a mayores, pero las cosas cambian, creces y tratas lo mas posible de no estar expuesto al Sol, así que la piel se hace mas sensible y claro no le quitemos credito al incremento de la radiación UV-B por la destrucción gradual de la capa de ozono, bueno creo que ya me sali del tema, el caso que en días pasados me decidi irme con mi familia a la playa, así que como nunca habia tenido problemas en la piel por el Sol, me atrevi a no aplicarme bloqueador solar y mucho menos andar en la playa con camiseta (no queria perder la oportunidad de mostrar mi gran abdomen mas de 100 cm) por lo que sufri unas quemaduras tremendas principalmente en la espalda, al menos ese día por la noche no pude dormir boca arriba y por la mañana tenia un dolor tan tremendo que queria andar sin ropa, en fin los siguientes días me la he pasando curandome las quemaduras y durmiendo boca abajo y no se hable de sentarme sin recargar la espalda por lo que ya ando con un dolor de espalda tremendo.

Quizas el leer esto despues me cause risa, pero lo unico que puedo decir es que ya no lo vuelvo a hacer y aconsejo no hagan lo que yo, jajaja, hasta luego y no sean muy duros y me llenen de mensajes de burla.

11 enero 2007

A la Alza

Empieza el año y ya las estimaciones inflacionarias de nuestros economistas han sido superadas en un poco mas de 0.04% y ahora con el alza del precio de la tortilla el panal se ha alborotado y las avispas andan bravas, claro sin considerar que los medios de comunicación lo resaltan a mas no poder y buscando por toda la republica el precio mas alto del kg de tortilla que primero decian $14, luego $15 y ahora resulta que ha llegado hasta $18.

Ahora segun nuestros secretarios dicen que el precio elevado se debe al alto costo del Maíz y que ademas nuestro campo mexicano no satisface la demanda de grano y que se debe recurrir a la importación, pero que pasa, si ya el campo mexicano ha sido olvidado, ahora quieren darle otro golpe mas, no creen que seria mas conveniente quitar a los intermediarios que compran barato al productor y almacenan el grano para venderlo caro.

En fin yo no soy economista ni tampoco pretendo serlo, pero lo que si quiero es que nuestro gobierno busque soluciones de largo plazo y no siga dando aspirinas.

10 enero 2007

Especificadores de formato

c -> Formato de moneda
d -> Formato decimal
f -> Coma fija
n -> Número
p -> Porcentaje
r -> Format para evitar perdida de precisión

Los resultados de los especificadores pueden diferir ya que dependen de las caracteristicas culturales consideradas en ese momento actuales por C#.

Ejemplo: Se muestra el resultado que proporciona el especificador 'c' cuando se trabaja con las caracteristicas culturales de Estados Unidos.

using System;
using System.Globalization;

class FormateoEU
{
public static void Main()
{
CultureInfo N = new CultureInfo("en-US");
string cadena = 12345.6.ToString("c",N); //Mostraria $12,345.60
Console.WriteLine(cadena);
}
}

01 enero 2007

Comienza el 2007

Despues de meses de espera empezamos un nuevo año, en primer lugar no sabia si escribiria una entrada este día y en segundo lugar no sabia si aguantaria 1 año con este blog, ya que las estadisticas nos dicen que para el 2007 mas de la mitad de los blogs creados seran abandonados, debido a las prestaciones de los nuevos celulares para comunicarse y otros rollos, pero como yo no tengo celular de los nuevecitos con camara ciber-shot incluida y conexión a internet, pues seguire escribiendo en este humilde blog, aunque a veces sea yo el unico que me lea jajajaja, en fin lo unico que espero es que tengamos todos mucha salud y que sea prospero el año 2007 y todos los venideros, me despido y no sean gandallas dejenme un mensaje, sean de los primeros por que luego el blog no tiene cupo.

20 diciembre 2006

Vista Preeliminar con C#

En ciertas ocasiones nuestro programa debe enviar por impresora información ya sea de una base de datos o de algun documento plano, pero entonces nos topamos con los diseñadores de reportes (cristal report) por llamarlo asi, pero que sucede cuando no lo tenemos a la mano, pues aqui planteo una forma interesante de enviar un archivo XML a vista preeliminar y claro desde aqui ya podemos imprimir, que es lo que se necesita:

Con este pequeño codigo es mas que suficiente

using System.Xml; //Con esto trataremos los objetos para XML
using System.Xml.Xsl;

Ahora el codigo de la función

XslCompiledTransform xslt = new XslCompiledTransform();
xslt.Load("s.xsl"); //Archivo con el que le daremos forma a nuestro archivo XML

//Aqui le aplicamos la transformación y lo guardamos como archivo HTML
xslt.Transform("Miarchivo.xml", "informe.html");

//Con un control webBrowser (disponible en el framework .NET 2.x ) insertado en nuestro form
//Cargamos el archivo HTML creado

web.Navigate(new Uri(Environment.CurrentDirectory + "file://informe.html/"));

//Ahora solo llamamos al metodo PrintPreviewDialog y listo

web.ShowPrintPreviewDialog();

Figura(1) Este es el control a insertar


Figgura(2) Asi es como saldria nuestra ventana con vista preeliminar


14 diciembre 2006

¿Y la educacion?

Con gran desconcierto escuchaba la noticia del recorte al presupuesto para la educación superior en México, y me pregunto, pensaran que le estaban dando mucho?, o por que el recorte?, estas cosas son las que me molestan, terminamos el año con el cambio de presidente despues de varios meses en disputas pos-electorales, despues la burla del gobierno austero y ahora el recorte, y para acabarla no tengo nada en mente para escribir en el blog y me pongo a escribir estas patrañas... me despido y que tengan un buen dia.

13 diciembre 2006

C# y xml

En dias pasados instale el visual c# express de Microsoft (nadie es perfecto jejeje), y para empezar me programe un directorio telefonico pero utilizando XML para almacenar los contactos y en realidad me agrado, aunque el codigo no esta muy optimizado en cierta forma es funcional, de momento aqui les dejo el pantallazo y el codigo, espero no sea muy criticado el hecho de haber abordado esto con Mono, pero recuerdo que solo es un ejemplo de prueba con Visual C# express, aunque no se ha perdido la esencia ya que seguimos utilizando C#.



using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;



namespace WindowsApplication1
{
public partial class frmppal : Form
{
DataSet archivoXML;
DataGrid Grid;
public frmppal()
{
InitializeComponent();
}



private void frmppal_Load(object sender, EventArgs e)
{
Grid = new DataGrid();
Grid.Name = "Grid";
Grid.Size = new Size(200, 150);
Grid.Location = new Point(0, 50);
Grid.Dock = DockStyle.Fill;
pgrid.Controls.Add(Grid);



//crear un objeto para estilos en el Datagrid
DataGridTableStyle estilo = new DataGridTableStyle();
estilo.MappingName = "CONTACTO";
estilo.BackColor = Color.LightGray;
estilo.AlternatingBackColor = Color.LightSteelBlue;
estilo.ForeColor = Color.Black;
estilo.LinkColor = Color.Black;

//Crear objetos del tipo DataGridTextBoxColumn
//para cada columna de la tabla del Datagrid
DataGridTextBoxColumn columna = new DataGridTextBoxColumn();



//Configurar cada columna
//Esta es la primera columna
columna = new DataGridTextBoxColumn();
//columna.TextBox.MaxLength = 50;
columna.Alignment = HorizontalAlignment.Left;
columna.HeaderText = "Nombre del contacto";
//columna del Dataset enlazada con esta columna del Datagrid
columna.MappingName = "NOMBRE";
columna.Width = 280;
//texto que se muestra cuando la columna tiene valor null
columna.NullText = "";
//añadir la columna a los estilos del Datagrid
estilo.GridColumnStyles.Add(columna);
//Direccion
columna = new DataGridTextBoxColumn();
//columna.TextBox.MaxLength = 50;
columna.Alignment = HorizontalAlignment.Left;
columna.HeaderText = "Direccion";
//columna del Dataset enlazada con esta columna del Datagrid
columna.MappingName = "DIRECCION";
columna.Width = 190;
//texto que se muestra cuando la columna tiene valor null
columna.NullText = "";
//añadir la columna a los estilos del Datagrid
estilo.GridColumnStyles.Add(columna);



//CARGO
columna = new DataGridTextBoxColumn();
//columna.TextBox.MaxLength = 50;
columna.Alignment = HorizontalAlignment.Left;
columna.HeaderText = "Cargo";
//columna del Dataset enlazada con esta columna del Datagrid
columna.MappingName = "CARGO";
columna.Width = 190;
//texto que se muestra cuando la columna tiene valor null
columna.NullText = "";
//añadir la columna a los estilos del Datagrid
estilo.GridColumnStyles.Add(columna);



//GRUPO
columna = new DataGridTextBoxColumn();
//columna.TextBox.MaxLength = 50;
columna.Alignment = HorizontalAlignment.Left;
columna.HeaderText = "Grupo";
//columna del Dataset enlazada con esta columna del Datagrid
columna.MappingName = "GRUPO";
columna.Width = 190;
//texto que se muestra cuando la columna tiene valor null
columna.NullText = "";
//añadir la columna a los estilos del Datagrid
estilo.GridColumnStyles.Add(columna);



//LETRA
columna = new DataGridTextBoxColumn();
//columna.TextBox.MaxLength = 50;
columna.Alignment = HorizontalAlignment.Left;
columna.HeaderText = "Letra";
//columna del Dataset enlazada con esta columna del Datagrid
columna.MappingName = "LETRA";
columna.Width = 50;
//texto que se muestra cuando la columna tiene valor null
columna.NullText = "";
//añadir la columna a los estilos del Datagrid
estilo.GridColumnStyles.Add(columna);
//FAX
columna = new DataGridTextBoxColumn();
//columna.TextBox.MaxLength = 50;
columna.Alignment = HorizontalAlignment.Left;
columna.HeaderText = "Fax";
//columna del Dataset enlazada con esta columna del Datagrid
columna.MappingName = "FAX";
columna.Width = 90;
//texto que se muestra cuando la columna tiene valor null
columna.NullText = "";
//añadir la columna a los estilos del Datagrid
estilo.GridColumnStyles.Add(columna);
//EMAIL
columna = new DataGridTextBoxColumn();
//columna.TextBox.MaxLength = 50;
columna.Alignment = HorizontalAlignment.Left;
columna.HeaderText = "Correo Electronico";
//columna del Dataset enlazada con esta columna del Datagrid
columna.MappingName = "EMAIL";
columna.Width = 190;
//texto que se muestra cuando la columna tiene valor null
columna.NullText = "";
//añadir la columna a los estilos del Datagrid
estilo.GridColumnStyles.Add(columna);



//crear un objeto para estilos en el Datagrid
DataGridTableStyle estiloTelefono = new DataGridTableStyle();
estiloTelefono.MappingName = "TELEFONO";
estiloTelefono.BackColor = Color.Beige;
estiloTelefono.AlternatingBackColor = Color.AliceBlue;



//NUMERO
columna = new DataGridTextBoxColumn();
//columna.TextBox.MaxLength = 50;
columna.Alignment = HorizontalAlignment.Left;
columna.HeaderText = "Numero Telefonico";
//columna del Dataset enlazada con esta columna del Datagrid
columna.MappingName = "NUMERO";
columna.Width = 300;
//texto que se muestra cuando la columna tiene valor null
columna.NullText = "";
//añadir la columna a los estilos del Datagrid
estiloTelefono.GridColumnStyles.Add(columna);
//TIPO
columna = new DataGridTextBoxColumn();
//columna.TextBox.MaxLength = 50;
columna.Alignment = HorizontalAlignment.Left;
columna.HeaderText = "Tipo de Telefono";
//columna del Dataset enlazada con esta columna del Datagrid
columna.MappingName = "TIPO";
columna.Width = 180;
//texto que se muestra cuando la columna tiene valor null
columna.NullText = "";
//añadir la columna a los estilos del Datagrid
estiloTelefono.GridColumnStyles.Add(columna);
//ANOTACION
columna = new DataGridTextBoxColumn();
//columna.TextBox.MaxLength = 50;
columna.Alignment = HorizontalAlignment.Left;
columna.HeaderText = "Acerca del Telefono";
//columna del Dataset enlazada con esta columna del Datagrid
columna.MappingName = "DESCRIBE";
columna.Width = 220;
//texto que se muestra cuando la columna tiene valor null
columna.NullText = "";
//añadir la columna a los estilos del Datagrid
estiloTelefono.GridColumnStyles.Add(columna);



Grid.TableStyles.Add(estilo);
Grid.TableStyles.Add(estiloTelefono);
}



private void salirToolStripMenuItem_Click(object sender, EventArgs e)
{
Application.Exit();
}



private void abrirToolStripMenuItem_Click(object sender, EventArgs e)
{
OpenFileDialog fo = new OpenFileDialog();
fo.InitialDirectory = Environment.CurrentDirectory + "\\";
fo.Filter = "xml Archivos (*.xml)*.xml";
fo.RestoreDirectory = true;
if (fo.ShowDialog() == DialogResult.OK)
{
if (fo.OpenFile() != null)
{
archivoXML = new DataSet();
archivoXML.ReadXml(fo.FileName);
Grid.CaptionText = fo.FileName;
Grid.SetDataBinding(archivoXML, "CONTACTO");
//Grid.Update();
}
}
}



private void guardarToolStripMenuItem_Click(object sender, EventArgs e)
{
try
{
//escribir el DataSet al archivo XML
archivoXML.WriteXml(Grid.CaptionText);
archivoXML.Clear();
archivoXML.ReadXml(Grid.CaptionText);
MessageBox.Show("Datos Guardados", "Aviso al usuario", MessageBoxButtons.OK);
}
catch(Exception pollo)
{
MessageBox.Show("Error","Aviso al usuario", MessageBoxButtons.OK);
}



}



private void acercaDeDirectorioToolStripMenuItem_Click(object sender, EventArgs e)
{
frmacerce frmacerca = new frmacerce();
frmacerca.ShowDialog();
}
}
}


Cualquier comentario es bienvenido, si desean todos los archivos del proyecto, dejen su comentario y se los hare llegar.

30 noviembre 2006

Se acabo Noviembre

Asi como dice el titulo de esta entrada, se ha acabado Noviembre y solo una triste entrada en este, me pregunto a que se debera, sera por la nostalgia del fin de año?, pero en fin durante este mes descubri algo que quizas ya algunos conozcan, estoy hablando de un compilador de Php para generar ejecutables para Mono, si asi como se escucha, el compilador en cuestion va en la version 0.2, pero ya tiene bastante funcionalidad, y al igual que c# tambien puede integrarse Gtk, como ejemplo voy a escribir las siguientes lineas de codigo:

Codigo en PHP, guardado como >>>> EjemploPhp.php

< ? php
echo "\n\nEl blog de Gsur...!\n\n";
?>

Compilar el script de la siguiente forma

mono mPHP.exe EjemploPhp.php



si todo sale bien, tenemos el archivo >>>> EjemploPhp.exe


ahora ejecutamos y tenemos en pantalla: El blog de Gsur...!


Y listo, rapido creo yo, en la siguiente entrada mostrare un ejemplo de mPHP pero con Gtk, para descargar visitar
http://php4mono.sourceforge.net espero sus comentarios.

06 noviembre 2006

Proyecto en mente

Ultimamente he estado trabajando con una imagen jpeg y puntos sensitivos al paso del puntero del raton sobre esta, pero para ello lo he hecho con flash, por la facilidad que representa implementar estas situaciones, pero llegas al punto donde flash tiene sus limitantes y ya no es lo suficiente para lo que se quiere implementar, por este motivo estaba pensando como hacerlo con Mono, en realidad este proyecto es algo como un SIG, aunque no totalmente, ahora lo que me queda es investigar y claro si alguien ya lo hizo agradecere su comentario.

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