jueves, 28 de junio de 2012

Detectar MouseEnter en la capa inferior de un gráfico

Buenas,

Hoy estaba un compañero bloqueado con un problema un tanto peliagudo.

Estamos desarrollando una Addin para Excel, en donde construimos un mapa de España dividido por provincias, y encima de cada uno de los polígonos se añaden TextBox con el nombre, un valor y dos imágenes que son unos indicadores de otros valores.


El problema venía que cuando te pones encima del objeto o los valores, debe salir un Tooltip con datos. Y el programador anterior (Dios lo tenga en el infierno) no se le ocurrió otro modo de conseguir verlo cuando nos situamos encima del texto o el número o los indicadores que añadiendo tooltip a cada uno con la misma información. Es decir, por cada polígono llenaba de información el tooltip de cuatro controles más.

Entonces, necesitaba eliminar los tooltip de más y decir de alguna forma, a la aplicación, que no controlara si el ratón se ponía encima de cualquier cosa que no fuera el polígono base.

¿Y cómo hago eso?

Lo intenté preguntandole al sender del evento OnMouseEnter a ver si me traía una colección de los objetos sobre el que estaba situado el ratón. También se lo pregunté al MouseButtonEventArgs. Y por este camino yo llegue a ningún lado.

Asi que, en un momento de inspiración me puse a mirar los métodos y propiedades de los controles y me encontré con la solución:

Control.IsHitTestVisible = false

Esto hace que el objeto sea transparente para los eventos lanzados por el ratón. Lo cual produce que para el ratón solamente exista el polígono de fondo. En el ejemplo que he traído esto lo conseguí con:


imageIndicador1.IsHitTestVisible = false;
imageIndicador2.IsHitTestVisible = false;
valor1.IsHitTestVisible = false;
nombre.IsHitTestVisible = false;
path.IsHitTestVisible = true;


Espero que os sea útil.

lunes, 11 de junio de 2012

Descubrir los Atributos del Directorio Activo

En la entrada anterior, resolví el problema que tenía para dar de alta cientos de usuarios en el directorio activo por medio de un script.

Ahora el problema es que necesito rellenar más atributos que el nombre de usuario en el Directorio Activo y no tengo forma de saber cómo se llaman ni el formato esperado.

Pero para ello también hay una solución sencilla (mira que he dado vueltas hasta llegar a los más fácil): activar una consola y añadirle el módulo adecuado.

Lo primero abro un "Símbolo de Sistema", escribo mmc y pulso Enter.

Se me abre una bonita consola con la Raíz vacía.


Aquí pulso en el menú Archivo -> Agregar o quitar elemento. Y se me abre una nueva ventana en donde debo pulsar el botón de Agregar.


En el listado que me sale busco y escojo el que dice "Esquema de Active Directory" y me pongo a pulsar en los botones de "Agregar" y "Aceptar" que me vaya encontrando.

Y así obtengo una completa lista de todos los atributos que puedo utilizar para manipular mi Directorio Activo.

Acabo de encontrar unos enlaces muy buenos:
Atributos del Directorio Activo de la A la Z


Espero que sea útil.


Dando de alta usuarios en el directorio activo de forma automática por script

Estoy haciendo una carga de datos en el Directorio Activo que requiere +600 usuarios. Lo cual, obviamente, es un auténtico tostón hacerlo a mano.

Por lo cual me he puesto a buscar el cómo y me he encontrado el siguiente script realizado en Visual Bascit script:



Set objRootDSE = GetObject("LDAP://rootDSE")

Set objContainer = GetObject("LDAP://cn=Users," & _
    objRootDSE.Get("defaultNamingContext"))

For i = 1 To 10
    Set objLeaf = objContainer.Create("User", "cn=Prefijo" & i)
    objLeaf.Put "sAMAccountName", "Prefijo" & i
    objLeaf.SetInfo
Next

WScript.Echo i-1 & " Users created."

Esto me va a introducir 10 usuarios de nombre PrefijoXX en la carpeta User de mi Directorio Activo.

Para lanzar el script, debo guardara el código en un fichero con extensión .vbs y lanzarlo dándole un doble click.

Pero, y aquí llega el intringulis, debo saber cómo se llaman los atributos (o campos) de mi Directorioa Activo. Y hete aquí que es diferente para cada uno dependiendo de múltiples factores.

Por lo cual, en la siguiente entrada hablaré de ello.

Espero que sea de utilidad.