combo color es

9
¿COMBO DE COLORES... O NO? 1 Ante la reiterativa aparición de consultas para hacer un combo cuyas líneas tengan diferentes colores en función de una condición pues me he decidido a preparar este ejemplo, que no es más que una “trampa” para conseguir un efecto similar a lo que se pide. Puesto que, hasta el momento, no es posible cambiar de color las líneas de texto de un combo independientemente. Y, como siempre, no os fijéis tanto en la estructura de la BD, que no es la mejor, pero la construiré así para hacer el ejemplo más entendible. Así que... vamos a por ello. MIS TABLAS Vamos a imaginar que debemos procesar la cantidad producida de un producto, y que ese producto tiene un compuesto base. A su vez, ese compuesto base puede tener una característica definitoria, como que es tóxico, que es abrasivo, que es inflamable... Por ejemplo, y dado que no tengo ni idea de productos químicos pues voy a poner un ejemplo inventado, el registro que vamos a introducir es la producción de 5 unidades de “Matarratas Complex”, cuyo compuesto base es el “Benciclono”, cuya característica es la toxicidad. Espero que se entienda la idea. Podría haberlo simplificado, pero si lo hago un poco más complejo no debería seros difícil conseguir el mismo efecto en un caso, por ejemplo, de que hablemos de socios que están o bien de “baja”, o bien en situación de “bloqueado”, o bien en situación de “activo”. Vamos pues a crear una primera tabla que nos recoja los compuestos base y sus características. A esa tabla la llamaremos TCompuestos y tendrá la siguiente estructura: Como estoy en un Access 2013 el tipo de datos es “Texto corto”; recordad que para otras versiones es simplemente “Texto”. Ahora vamos a construirnos otra tabla, que llamaremos, por ejemplo, TProduccion, que tendrá la siguiente estructura: 1 La BD de ejemplo os la podéis bajar aquí 1 Visítame en http://neckkito.siliconproject.com.ar

Upload: byondder6403

Post on 12-Dec-2015

215 views

Category:

Documents


2 download

DESCRIPTION

Macros para access

TRANSCRIPT

Page 1: Combo Color Es

¿COMBO DE COLORES... O NO?1

Ante la reiterativa aparición de consultas para hacer uncombo cuyas líneas tengan diferentes colores en función deuna condición pues me he decidido a preparar este ejemplo,que no es más que una “trampa” para conseguir un efectosimilar a lo que se pide. Puesto que, hasta el momento, noes posible cambiar de color las líneas de texto de un comboindependientemente.

Y, como siempre, no os fijéis tanto en la estructura de laBD, que no es la mejor, pero la construiré así para hacer elejemplo más entendible.

Así que... vamos a por ello.

MIS TABLASVamos a imaginar que debemos procesar la cantidad producida de un producto, y que eseproducto tiene un compuesto base. A su vez, ese compuesto base puede tener unacaracterística definitoria, como que es tóxico, que es abrasivo, que es inflamable...

Por ejemplo, y dado que no tengo ni idea de productos químicos pues voy a poner un ejemploinventado, el registro que vamos a introducir es la producción de 5 unidades de “MatarratasComplex”, cuyo compuesto base es el “Benciclono”, cuya característica es la toxicidad.

Espero que se entienda la idea. Podría haberlo simplificado, pero si lo hago un poco máscomplejo no debería seros difícil conseguir el mismo efecto en un caso, por ejemplo, de quehablemos de socios que están o bien de “baja”, o bien en situación de “bloqueado”, o bien ensituación de “activo”.

Vamos pues a crear una primera tabla que nos recoja los compuestos base y suscaracterísticas. A esa tabla la llamaremos TCompuestos y tendrá la siguiente estructura:

Como estoy en un Access 2013 el tipo de datos es “Texto corto”; recordad que para otrasversiones es simplemente “Texto”.

Ahora vamos a construirnos otra tabla, que llamaremos, por ejemplo, TProduccion, que tendrála siguiente estructura:

1 La BD de ejemplo os la podéis bajar aquí

1Visítame en http://neckkito.siliconproject.com.ar

Page 2: Combo Color Es

CREANDO NUESTRO SUBFORMULARIO CON FORMATO CONDICIONAL

Creémonos un formulario en vista de formularios continuos (varios elementos) sobre la tablaTCompuestos. Lo llamaremos subFormCompuestos. Vamos a modificar su diseño para que separezca lo máximo posible a una simple lista de valores. Por ejemplo, a mí me ha quedado así:

Las principales manipulaciones que he hecho han sido:

• Eliminar el encabezado del formulario• Eliminar los selectores de registro y botones de desplazamiento (Propiedades del

formulario Pestaña Formato)→• Reducir el tamaño de letra de los campos• Situar los bordes de los campos en estilo transparente• Situar una línea entre ambos campos.• La propiedad “Punto de tabulación” de ambos campos está definida en NO (Propiedades

Pestaña Otras). También he desactivado esos campos (Propiedades Pestaña Datos→ → Activado: NO)→

Vamos a efectuar algunas manipulaciones más. Como nuestro futuro subformulario no debecomportarse como tal, sino que en realidad nos debe mostrar una lista de valores, lo queharemos será bloquear la manipulación de registros. Para ello sacamos sus propiedades yconfiguramos así las propiedades de la pestaña Datos:

Permitir agregar: NOPermitir eliminación: NOPermitir ediciones: NOPermitir filtros: NO

Guardados los cambios, si lo rellenamos con algunos datos la vista queda así:

2Visítame en http://neckkito.siliconproject.com.ar

Page 3: Combo Color Es

Vemos que manejamos tres características: tóxico, abrasivoe inflamable. Vamos pues a asignar formato condicional enbase a estos valores.

Yo os lo explicaré sobre un Access 2013, por si alguien no sabe cómo aplicar formatocondicional. Recordad además que para los sufridos usuarios de Access 2003 sólo es posibleaplicar 3 condiciones como máximo.

Con el formulario en vista diseño nos vamos a menú “Formato”. Seleccionamos los dos campos(utilizando la tecla mayúsculas podemos hacer una selección múltiple) y pulsamos sobre elbotón del ribbon “Formato Condicional”.

Creamos una nueva regla

Y la configuramos de la siguiente manera:

3Visítame en http://neckkito.siliconproject.com.ar

Page 4: Combo Color Es

Si os fijáis, aunque no se aprecie mucho en la ilustración, he seleccionado un color marrónpara el tipo de letra.

Si aceptamos volvemos a la ventana anterior. Volvemos a seleccionar nueva regla, y laconfiguramos así. Fijaos que he seleccionado el color de letra rojo:

Y repetimos el proceso una tercera vez, con un color de letra violeta

4Visítame en http://neckkito.siliconproject.com.ar

Page 5: Combo Color Es

De manera que al volver a la pantalla inicial nos hayan quedado definidas estas tres reglas así:

Y, tras aceptar, nuestro formulario con datos ahora se ve así:

CREANDO NUESTRO FORMULARIO FPRODUCCIONCreémonos un formulario sobre la tabla TProduccion. Lo guardamos como FProduccion.

Lo que haremos será, en primer lugar, insertar un subformulario a través del siguiente

5Visítame en http://neckkito.siliconproject.com.ar

Page 6: Combo Color Es

proceso:

• Usar un formulario existente Seleccionamos→subFormCompuestos

• Seleccionamos la opción Elegir de la lista “Ninguno”→• Dejamos el nombre que sale por defecto

Vamos, en el form principal, a eliminar la etiqueta delsubformulario.

Ahora ajustamos el tamaño del campo [Compuesto] altamaño del subformulario, haciéndolo un pequeño másestrecho a la derecha.

Insertamos un botón de comando, redimensionándolo y situándolo a la derecha del campo[Compuesto]. Sacamos las propiedades de ese botón de comando y:

• Pestaña Formato Imagen, y seleccionamos una imagen que nos guste (yo he→seleccionado la llamada “Flecha abajo”).

• Pestaña Otras Nombre, y ahí escribimos cmdDespliega.→

Y como una imagen vale más que mil palabras así me ha quedado a mí:

CONTROLANDO EL COMPORTAMIENTO DEL PSEUDOCOMBOLa idea es, dado que vamos a tratar de que nuestro invento se asemeje a un combo, fijar lascaracterísticas tanto del formulario como del subformulario en relación a los controles queintervienen en el proceso.

Lo primero que pensamos es que, por defecto, los combos no aparecen desplegados. Paraconseguir pues que no aparezca “desplegado” vamos a sacar las propiedades del formularioprincipal y en el evento “Al activar registro” vamos a generar el siguiente código2

…Private Sub Form_Current()

2 Para generar código debemos sacar las propiedades del control Pestaña Eventos, y nos situamos en la parte “blanca” a la→derecha del evento que queremos programar. Veremos un pequeño botón de puntos suspensivos. Si hacemos clic sobre él nosaparecerá una ventana que nos pedirá qué operación deseamos realizar. Le indicamos que queremos “generar código”.

6Visítame en http://neckkito.siliconproject.com.ar

Page 7: Combo Color Es

Me.subFormCompuestos.Visible = FalseEnd Sub…

Segunda idea: al dar clic sobre nuestra “flecha” el combodebe desplegarse. Pues para ello seleccionamos nuestrobotón de comando y en su evento “Al hacer clic” generamosel siguiente código:

…Private Sub cmdDespliega_Click() Me.subFormCompuestos.Visible = TrueEnd Sub…

Tercera idea: al hacer clic sobre el campo [Compuesto] el combo debería desaparecer denuevo. Para ello, en la propiedad “Al recibir el enfoque” de ese campo escribimos este código:

…Private Sub Compuesto_GotFocus() Call Form_CurrentEnd Sub…

Cuarta idea: Al hacer clic sobre uno de los registros del combo (es decir, sobre los registros delsubformulario) ese valor debería pasar al campo del form principal. Necesitamos puesmanipular ambos campos del subformulario.

Para ello vamos a seleccionar el campo [Compuesto] del subformulario (ojo: debe quedarseleccionado y es el campo del subformulario, no del formulario) y en su evento “Al hacer clic”generamos el siguiente código:

…Private Sub Compuesto_Click() With Me.Parent .Compuesto.Value = Me.Compuesto.Value .Compuesto.SetFocus End WithEnd Sub…

Y ahora seleccionamos el campo [Caracteristica] del subformulario y en su evento “Al hacerclic” generamos el siguiente código:

…Private Sub Caracteristica_Click() Call Compuesto_ClickEnd Sub…

Quinta idea: si ahora hiciéramos clic en otro campo el subformulario no desaparecería, como sílo haría la lista de un combo. Para ello sacamos las propiedades de la sección detalle deFProduccion (ojo, de la sección detalle) y generamos en el evento

…Private Sub Detalle_Click() Call Form_CurrentEnd Sub…

7Visítame en http://neckkito.siliconproject.com.ar

Page 8: Combo Color Es

Deberíamos hacer lo mismo para el mismo evento en los campos de que disponemos. Así, parael campo [Producto] y el campo [Unidades] escribimos:

…Private Sub Producto_Click() Call Form_CurrentEnd Sub

Private Sub Unidades_Click() Call Form_CurrentEnd Sub…

Sexta idea: al desplegar el combo nuestro cursor debería verse como una flecha, no como unabarra de edición. Si a vosotros se os ve como una flecha, pues fantástico, pero en Access 2013el cursor cambia a edición. Para evitar eso lo que podemos hacer es situarsubFormCompuestos en vista diseño, y en la propiedad de formulario “Al cargar” le escribimosel siguiente código:

…Private Sub Form_Load() Screen.MousePointer = 1End Sub…

Y con esto ya tenemos nuestro combo preparado.

La verdad es que da bastante bien el pego. Cuando abrimos nuestro formulario FProduccion loque vemos es

Y cuando hacemos clic sobre la flecha del pseudocombo lo que vemos es:

8Visítame en http://neckkito.siliconproject.com.ar

Page 9: Combo Color Es

¿SE PODRÍA MEJORAR ALGUNA COSA?Por supuesto que sí. Se podría intentar hacer que al pasarel mouse sobre los registros estos adquirieran otro color defondo. Eso sería muy sencillo si el subformulario noestuviera en vista de formularios continuos. Sin embargo, alestar en este tipo de vista la cosa se complica y tendría queestudiar cómo podría hacerse. Como de entrada heconsiderado que esto era un “mal menor” y ya no dispongode más tiempo para dedicarle a este ejemplo pues... ahíqueda como idea.

Evidentemente, si alguien se anima y descubre cómo hacerlo seré el primero en escuchar sussugerencias.

PARA FINALIZAR EL EJEMPLOBueno. Espero que os haya gustado el ejemplo. A pesar del número de páginas la cosa essencilla, aunque un tanto trabajosa. En fin... todo sea por hermosear nuestro Access.

Un saludo, y....

¡suerte!

9Visítame en http://neckkito.siliconproject.com.ar