Acerca de:

Este blog contiene los códigos, ejemplos y bases de datos que he usado cuando aprendía acerca de algún tema específico. En lugar de borrarlos (una vez dominado ya el tema), he decidido publicarlos :)

viernes, 20 de noviembre de 2009

Cómo saber si un PictureBox tiene una imagen cargada en VB6 y C#

En VB6:

If PictureBox1.Picture = 0 Then
'PictureBox sin imagen
Else
'PictureBox con imagen
End If


en C#:

if (pictureBox1.Image == null)
{ 
//picturebox sin imagen
 }
else
{
//picturebox con imagen 
}

lunes, 12 de octubre de 2009

ListBox y ListView para Visual basic 6, algunos detalles.

Índices de los elementos de un ListBox: Va desde 0 hasta ListBox.ListCount-1.
Índices de los elementos de un ListView: Va desde 1 hasta ListView.ListItems.count

Para capturar el texto del elemento seleccionado en un ListBox se llama a su propiedad "Text": ListBox.Text

El equivalente para un ListView:
ListView.ListItems(ListView.SelectedItem.Index).Text

Lo que va entre paréntesis es el índice del elemento del que queremos saber el texto. En este caso es el ídnice del elemento seleccionado.

Para copiar en un ListView los elementos de un ListBox (y además se muestra cómo recorrerlos):

For i = 0 To ListBox.ListCount - 1
ListView.ListItems.Add , , ListBox.List(i)
Next

El ListView trabaja con dos imageList si se desea poner íconos grandes y pequeños a sus elementos. Para el ejemplo no se asigna ningún ícono, por eso hay parámetros que no se usan en la propiedad ListItems.Add (donde están las comas que van seguidas).

Para borrar todos los elementos de un ListBox y un ListView se usa la propiedad Clear:
ListBox.Clear
ListView.Clear

Cómo Usar el Control ListView en la página del Guille

miércoles, 9 de septiembre de 2009

Conversión de rutas en formato URI a formato del sistema operativo.

Ya he hablado de este problema en http://toyscaos.tripod.com/hist_csharp.html

La clase "Process" no tiene problemas con el formato URI, pero hay otros casos en que es necesario convertir este tipo de rutas a archivos en sus equivalentes "normales" (como al cargar una imagen en un picture box).

En VB se puede usar: 
path = "..\some file" 

Donde "path" es un dato de tipo string que almacena la ruta relativa a nuestra aplicación, algo necesario cuando queremos cargar algo ubicado en su misma carpeta, cualquiera que esta sea. Pero esta forma de declarar rutas relativas tiende a generar errores. Una manera más segura, es:

C#: 
path = System.IO.Path.GetDirectoryName
(System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase);
path = string.Concat(path, "\\some file");
 
VB:
path = System.IO.Path.GetDirectoryName_
(System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase)
path = String.Concat(path, "\some file")



Pero esto nos da las rutas en formato URI. La forma de convertir a formato "normal" (eliminar la cadena "file://" que tiene al comienzo) es:

C#:

string path;

  path = System.IO.Path.GetDirectoryName
(System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase);
  path = string.Concat(path, "\\some file");

  char[] charBuf = path.ToCharArray();
  char[] charbuf2 = new char[path.Length - 6];

  for (int i = 6; i < path.Length; i++)
  charbuf2[i - 6] = charBuf[i];

  string ruta = "";
  ruta = new string(charbuf2);



VB:

 Dim path As String
 Dim i As Integer
 Dim charbuf As String

  path = System.IO.Path.GetDirectoryName_
(System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase)
  path = String.Concat(path, "\some file")

  charbuf = ""

  For i = 7 To path.Length
  charbuf = String.Concat(charbuf, path.Chars(i - 1))
  Next

  ruta = charbuf

 
Happy Coding! 

domingo, 23 de agosto de 2009

Limpiar un Combobox (para Visual Studio 2008)

Si se tiene un control tipo combobox y se lo desea limpiar (borrar todos los elementos de su lista) en VB6 bastaba hacer:
Combobox.Clear

En .Net se debe añadir la propiedad "Items":
Combobox.Items.Clear()

Si el combobox tiene la propiedad "DataSource" enlazada a una base de datos, antes se deberá "romper" el enlace a ésta. Una manera es asignarle un valor nulo:

En VB:
Combobox.DataSource = Nothing

En C#:
Combobox.DataSource = null;

Si no se rompe el enlace, el compilador no nos permitirá limpiarlo. "Nothing" es el valor nulo en VB, "null" es el valor nulo para C#, C++, C o Java. Ambas son palabras reservadas en sus respectivos lenguajes.

lunes, 10 de agosto de 2009

Diferencias entre las versiones del Matlab

Matlab 6.5: Puede instalarse en Windows 98 SE y en Windows 2000 y en computadoras con 128Mb de RAM y procesador de 500MHz.

Matlab 7: Puede instalarse en Windows 2000 y en Windows XP y en computadoras con 512Mb de RAM y procesador de un núcleo de 2GHz. No corre en computadoras con procesadores de doble núcleo. Tampoco ejecuta los programas hechos con el Guide de Matlab 6.5 ni con Simulink del Matlab 6.5

Matlab 7.6: Puede instalarse en Windows XP y Windows Vista. Corre en computadoras con procesador de doble núcleo. Puede ejecutar los programas hechos con el Guide del Matlab 7. No es recomendable correrlo en computadoras con menos de 1Gb de RAM.

Página oficial de Matlab: http://www.mathworks.com/

Alternativas gratuitas:
Octave
FreeMat
Scilab

viernes, 7 de agosto de 2009

Microsoft Connect y cómo instanciar una clase en C#

Sucedió que necesitaba trabajar con manipulación de imágenes en C# (en el namespace System.Drawing) pero en una aplicación de consola. Los problemas que tuve al declarar objetos globales del tipo ColorPalette e Image me llevaron a escribirles a la gente de Microsoft Connect (siempre programo mi C# en el Visual Studio Express). Lo que me respondieron está en este link (en inglés).

En la solución que dan dicen que hace falta crear una instancia a la clase Process. Crear una instancia es simplemente usar: AnyClass p = new AnyClass(); pues .net asigna un constructor por defecto a todas las clases, aún si este no se declara (también hay un destructor implícito).
La solución la programé yo misma, luego de leer las instrucciones de Alex Turner.

Haciendo simplemente:
Image fotoJpg;
ColorPalette cp;

static void Main(string[] args)
{
Program p = new Program();
p.fotoJpg = Image.FromFile("C:\\background-black.jpg");
p.cp = p.fotoJpg.Palette;
}
}

Ya tenía los objetos ColorPalette e Image como globales.

See ya next time!