Llenar un ComboBox III

Seguimos, que es viernes y no tengo ganas de hacer mucho en el curro.

Continuando con el aprendizaje, esta clase no sólo fue mi primera clase y supuso mi primer constructor, sino que también fue la primera vez que me pegué con las propiedades. Prácticamente se puede decir que LlenarComboBox me desvirgó en VB2005. La clase terminó con tres propiedades públicas: la cadena de conexión, el objeto conexión OleDB y el objeto conexión SQL. Inicialemente estos dos últimos eran uno solo (sólo OleDB) y de sólo lectura, pero luego empecé a cogerle cariño a los bloque Using y modifiqué el código. Y no hay mucho más que decir, las propiedades son éstas:

Continuar leyendo »

Llenar un ComboBox II

Tengo aún pendiente la clase de LlenarCombo que comenté en una de las primeras entradas de este blog. La verdad es que he tenido Visual Basic muy abandonado. A ver si me pongo las pilas y termino la dichosa aplicación de Anime en VB2005 y hago la de gestión doméstica en VB2008 antes de que me arruine.

Pero, primero, lo prometido es deuda: ejercicio de egocentrismo concentrado y autopropaganda. O sea, my first class: LlenarComboBox. La idea, pequeño recordatorio, era rellenar unos combos o listboxes con la clave primaria y un campo descriptor de su tabla correspondiente y luego enlazar el combo (o listbox) al dataset tipado con el que vamos a trabajar mediante un bindingsource. De este modo, en el método de carga de datos del formulario tendría algo como esto:

Continuar leyendo »

El botón de apagado y otros cuentos

Poco antes de que saliera Vista, cuando tenía la RC en mi ordenador viejo, encontré las vivencias de un programador del equipo que desarrolló el menú de apagado de Windows Vista, sí, ése que a todos nos resulta tan incómodo al principio. La entrada de su blog no la encuentro, el blog ha desaparecido, pero aquí, por ejemplo, se recuerda. El gran problema de muchas empresas, la burocracia interna.

La forma de apagar Vista me dejó descolocado. Para el que no lo haya visto, el funcionamiento es simple: en el menú Inicio tienes un botón de apagado que apaga el equipo. Ya está.

Continuar leyendo »

La mala fama de Windows Vista

Vista lleva ya con nosotros un añito, y sigue con su mala fama. Me pregunto cuánto le durará. Me recuerda en muchos aspectos a Windows XP: cuando salió todo el mundo decía que era un tragón, que no era más que un Windows 2000 con un nuevo tema de escritorio y no sé cuantas cosas más. Yo tuve XP al poco de salir, un ordenador nuevecito (y de gama baja) PIV Willamette 1,6GHz socket 478, placa base Chaintech micro-ATX, tarjeta de sonido 5.1, tarjeta de vídeo Nvida MX 100/200 de 32MB y 256MB de RAM (SDRAM PC133). Vamos, lo que entonces se llevaba, o se empezaba a llevar, porque hacía realmente poco que se había dado el salto desde los 128MB de RAM (suficientes para un 2000, un 98 o un Millenium) a los 256MB (escasos para un XP). En esta máquina tenía mi XP Home nuevecito y todos sus problemas, en especial la incompatibilidad con aplicaciones, sobre todo juegos. Al Baldur’s Gate o cualquier otro juego que usara el mismo motor gráfico, sencillamente no podía jugar: se colgaba en las ciudades y en las animaciones a pantalla completa. Mientras que otros juegos, como el venerable Red Baron 3D o el X-wing Alliance, conseguí que funcionaran echando mano de las opciones de compatibilidad, al Baldur’s I y II sólo pude jugar cuando salió el Service Pack 1 y unos nuevos drivers de Nvidia. Ya entonces el equipo se me hizo tan insufriblemente lento que había ampliado la RAM a unos buenos 768MB (y no más porque no tenía más bancos en la placa, que si no…). Entre tanto tuve que aguantar comentarios despectivos sobre XP, despreciándolo frente al más «confiable» 2000 (que iba ya por su SP3, y luego llegó el SP4) y, para uso doméstico, el más estable y seguro Windows 98 (no, no bromeo, que el Windows 98 es más estable y seguro que el XP me lo han soltado varias veces, así, tan panchos, y la última sería a los 6 ó 7 meses de haber salido el Service Pack 2).

Continuar leyendo »

Jugando con Virtual PC 2007

Llevo una mañana entretenida. Me he bajado el Virtual PC 2007 de Microsoft para dar mis primeros pasos en esta cosa extraña de la virtualización, que luego pasa lo que pasa: no te mantienes al día y cuando te das cuenta eres una antigualla obsoleta. Por lo pronto he instalado la aplicación y he seguido el tutorial de El Guille para crearme una máquina virtual. Ahora mismo estoy instalando en ella un XP Pro SP2. Es extraño tener en el escritorio una ventana donde aparece el instalador de Windows, la verdad. Me resulta antinatural.

He instalado el Virtual PC en un Vista Home Premium. Según la página de Microsoft, el sistema operativo no está soportado, pero de momento no da problemas. Tengo curiosidad por ver cómo se comporta en red local la nueva máquina virtual. Por lo pronto, ya estoy notando uno de los efectos secundarios: tengo el sistema algo frito, ya que le he asignado a la máquina virtual 1GB de RAM, lo que me ha dejado con otro para Vista y, ahora mismo, entre el Dreamweaver, el Firefox y el Visual Basic 2008 me están dejando el sistema colapsado.

He tenido un pequeño problema adicional: he descubierto que mi disco de XP SP2 estaba jodido, así que he tenido que coger el original y hacerme un nuevo disco con SP2 integrado siguiendo el tutorial de José Manuel Tella Llop. Por cierto, que las imágenes de disco de nero (.nrg) Virtual PC las entiende sin problemas.

Una vez instalado XP, Virtual PC pregunta si queremos instalar las Virtual Machine Additions, opción que aparece en el menú Acción. Al pinchar sobre ellas, Virtual PC «mete» un cd virtual en la unidad de cd virtual de nuestra máquina virtual para instalar el tema… Oh, mierda, ¿por qué Coco no nos habló de esto en Barrio Sésamo? Me está levantando un dolor de cabeza nada virtual.

En resumen, que tengo XP SP2, a falta de meterle las actualizaciones, funcionando en una máquina virtual. Las características de la máquina virtual las he encontrado aquí, y no son para echar cohetes. La verdad es que la gráfica es poooobre. Pero es más que suficiente para instalarme un Vista Ultimate en inglés y meterle la RC del SP1, o hacer lo propio con XP y la beta del SP3.

Naaa, ¿a quién quiero engañar? He preparado la máquina virtual para jugar al Planescape Torment (traducción del clan Dlan) y al Baldur’s Gate. Que me apetece jugar un rato y lo único que tengo instalado es el Crysis. Y, la verdad, cuando te cansas de ver unos gráficos monos y de exprimir al máximo el ordenador nuevo, apetece jugar a un Buen Juego(tm). Y me muero por escuchar de nuevo la sensual voz de Fall-From-Grace.

Nos vemos en el Forlon (virtual).

PD: he llamado a la máquina virtual Idoru, claro.

No aparece cuadro de diálogo Abrir en AutoCAD2006

Trabajo de informático… Por fin.

Hoy he tenido una incidencia en el trabajo que, por un rato, me ha hecho aparcar el trabajo de auxiliar administrativo y diseñador web para hacer de lo mío. Me llama el delineante diciéndome que el AutoCAD no muestra el cuadro de diálogo Abrir. ¡Una incidencia de verdad!

Cinco minutos después, estoy perplejo. El programa (AutoCAD 2006) no muestra ni el cuadro de diálogo Abrir ni el de Guardar como, sustituyéndolos por una entrada en la línea de comandos. Pruebo desde otro usuario y funciona correctamente, así que o es una opción de configuración o es un error de los datos del perfil. En fin, que pruebo lo normal: cambio el perfil del usuario, reviso las opciones de configuración que me conozco, reparo la instalación y nada. Finalmente me vuelvo a mi puesto a consultar a San Google y pensar un poco. Mientras tanto, el delineante consulta a un amigo que da la consabida solución: desinstala e instala.

Tras una corta búsqueda, hallo la solución en un foro de Visual Basic: una variable interna, FILEDIA, controla la visualización de los cuadros de diálogo de navegación de archivos. Si tiene un valor de 0, nos quedamos sin cuadro de diálogo. Voy a la máquina del delineante y, efectivamente, FILEDIA tiene valor 0. Lo paso a 1, ejecuto _open y ya se abre el cuadro de diálogo de Abrir…

Me gustaría saber por qué se cambió el valor de FILEDIA entre ayer y hoy.

Moraleja: Vivan los foros.

Llenar un ComboBox

El problema es el siguiente: tengo una tabla con un número de registros reducido (diez o doce como mucho). Quiero poder elegir el registro en un listbox o un combobox. Simple, ¿no? La ventaja del ListControl, tanto ListBox como ComboBox, es que para cada entrada en el mismo puedo tener dos valores, el mostrado (DisplayMember) y el ValueMember. Así, en el ValueMember puedo tener la clave primaria de la tabla, que es internamente con lo que trabajaré, mientras que muestro el campo descriptor que me interese al usuario. No estoy contando nada nuevo.

Una posibilidad sería usar una combinación de DataSet y BindingSource, estableciendo como DataSource del ListControl el BindingSource y seleccionando los campos a mostrar como DisplayMember y ValueMember. Este método lo he usado bastante, la verdad, pero como herramienta de navagación entre registros en la tabla principal que se muestra en el formulario. Me explico:


Continuar leyendo »

Ups, ¿y la contraseña del superusuario?

Ayer me encontré con un pequeño y pintoresco problema: después de instalar la actualización para el nuevo plan contable en la aplicación de gestión y contabilidad que usamos en la fábrica me encontré con que no me aceptaba la contraseña del superusuario (en este caso, llamado Supervisor). Jaja, diréis algunos, se le olvidó. Pues no, yo juro y perjuro que mi burro nació sin rabo, digo, que con la contraseña que yo intentaba meterle sin éxito estuvimos trabajando el viernes anterior, cuando hicimos el primer intento de abrir el nuevo ejercicio 2008.

En todo caso, el asunto era simple: no podía entrar como Supervisor y el Supervisor es el único usuario que puede hacer ciertas tareas de mantenimiento, como, por ejemplo, no sé, ¿quitar una contraseña olvidada? Para solucionar este pequeño contratiempo necesitaba pensar rápido y conocer a fondo las herramientas internas del programa (que las tiene muy buenas). En la parte primera, el contratiempo se produjo poco antes del fin de la jornada matutina, así que tuve dos horitas para pensar tranquilamente la solución. Realmente, tampoco es que el problema fuera tan complicado, pero todo pasaba por saber dónde guardaba el programa la contraseña de los usuarios y cómo eliminarla (o leerla, si estaba en claro). Por lo pronto, esta información debe ser común a todo el programa. Un rápido vistazo al árbol de directorios del programa me llevó a la carpeta «comunes» y ahí encontrar el archivo «usuarios». Concretamente, tres archivos, con extensión .cdx, .dbf y .fpt. Ya tenía la tabla usuarios localizada, sólo quedaba abrirla.

Continuar leyendo »

Cosas bonitas tiene mi niña…

Poquito a poco voy haciéndome a Vista y cada vez encuentro más cosas, de cara al uso cotidiano, que me gustan. O mejor, me encantan. Son cositas pequeñas, pero que te hacen la vida un poco más fácil.

Por ejemplo: al renombrar un archivo en Vista no se selecciona la extensión, sólo el nombre del archivo.

Otro ejemplo: al renombrar un archivo, si pulso el tabulador, me pasa al siguiente archivo (por supuesto, con el nombre seleccionado, pero no la extensión). Así es mucho más cómodo cambiar de nombre varios archivos, como por ejemplo, todos los episodios de la primera temporada de Code Geass.

Otra más: las opciones de ordenación (por ejemplo, Nombre, Fecha de modificación, Tipo, etc.) en las versiones anteriores de Windows sólo aparecen en la parte superior de la ventana del explorador cuando tenemos seleccionada la vista «Detalles». Que aparezcan ahí es muy cómodo porque podemos ordenar por orden ascendente o descendente simplemente pinchando en la etiqueta (o cabecera de la columna, como prefieras) que deseemos. Para ordenar los archivos en cualquier otra vista, tenemos que abrir el menú contextual con el botón derecho, ir a «Ordenar» y seleccionar la ordenación. Ahora, en Vista, las opciones de ordenación siempre aparecen.

Mostrar una imagen en graaaande

Se supone que la primera entrada de un blog debería ser una presentación, pero ni las presentaciones ni las despedidas se me dan bien, así que prefiero empezar con algo que me gusta: Visual Basic 2005 y con la solución a un pequeño problema que se me planteó:

Tengo un pequeño picturebox en un formulario donde se muestra la imagen asociada al registro en el que estemos (me da igual si hablamos de series, actores, muebles o coches).
Hay algunas imágenes que son bastante grandes y muy bonitas y verlas en un picturebox de 100×63 es una pena,así que decidí añadir un formulario con un picturebox que me mostrara la imagen a tamañocompleto. Básicamente, cogí un formulario (frmMostrarImagen) y le quite el texto del título y los bordes (FormBorderStyle=None). Le añadí un picturebox que debía ocupar todo el formulario (Dock=Fill). Este picturebox (picImagen) debe ajustarse al tamaño de la imagen (AutoSize=True). De igual modo, el formulario debe ajustarse al tamaño del picturebox, asíque su AutoSize también está en True y AutoSizeMode debe estar en GrowAndShrink.

Con esto ya sólo quedó añadir elcódigo necesario para que, pasándole la imagen a mostrar, la ponga en el picturebox y muestre el formulario.

Peeeeero… No queda bien. Si se le pasa una imagen con mayor resolución que la pantalla, sólo se ve una parte de la imagen. Mal íbamos. Por fortuna en My.Computer encontramos Screen y, dentro de Screen, WorkingArea. Sabiendo las dimensiones del área de trabajo de la pantalla estrivial comprobar si la imagen es más alta o ancha que el área de trabajo. En este caso pasaremos del AutoSize y ajustaremos el tamaño del picturebox al máximo que nos permita la resolución de pantalla, manteniendolas proporciones de la imagen.

En resumen, esto:

 
''' <summary>
''' Carga la imagen a mostrar y muestra el formulario de modo modal
''' </summary>
Public Sub MostrarImagen(ByRef queImagen As Image)
    'Comprobamos si el tamaño de la imagen (alto o ancho) es mayor
    'al área de trabajo de la pantalla. Si es así, ajustamos la imagen
    'al área de trabajo manteniendo las proporciones.
    If queImagen.Height > My.Computer.Screen.WorkingArea.Height _
    	OrElse queImagen.Width > My.Computer.Screen.WorkingArea.Width Then
        'Lo primero es poner el autosize del formulario a false
        'Si no lo hacemos y quitamos el autosize del picbox, no se muestra nada
        '(el formulario queda con tamaño 0)
        Me.AutoSize = False
        Me.picImagen.SizeMode = PictureBoxSizeMode.Zoom
        'Vemos que dimensión (ancho, alto) es mayor, pues será sobre la que ajustemos
        If queImagen.Size.Width > queImagen.Size.Height Then
        	Me.Width = My.Computer.Screen.WorkingArea.Width
            Me.Height = Me.Width * queImagen.Height / queImagen.Width
        Else
            Me.Height = My.Computer.Screen.WorkingArea.Height
            Me.Width = Me.Height * queImagen.Width / queImagen.Height
        End If
    End If
    Me.picImagen.Image = queImagen
    Me.ShowDialog()
 End Sub

Sólo queda hacer que el formulario se cierre (no hay barra de título, no hay como cerrarlo en principio). Cada cual tendrá sus formas, yo lo hice al hacer click sobre el picturebox y al pulsar cualquier tecla. Esto último en el evento KeyPress del formulario, previo hacer que el formulario capture las pulsaciones de las teclas antes que el picturebox (KeyPreview=True). De paso añadí un tooltip que mostrase un mensajito del tipo «Pulse la tecla any para cerrar esta ventana» y listo.

Fin de la primera entrada, nos vemos en el Forlon.

Actualización 08 de enero de 2008: he corregido la línea Me.Height = Me.Width * queImagen.Height / queImagen.Width y su equivalente con Width ya que no aparecía el símbolo de la división entera (la otra barra inclinada). Lo he sustituido por la barra de división normal, peeeeeero tiene que ser una división entera, o bien convertir el resultado en un entero.