Creando un control ActiveX (OCX)

Escrito por Dr. Crow el Lunes 16 de Diciembre de 2002 a las 00:00hs

Bueno, no vamos a teorizar demasiado, porque es aburrido. Para crear un control OCX, vamos a abrir VB como todos los días y vamos a crear un proyecto "EXE Estandar" y le vamos a agregar uno de tipo "Control ActiveX". De tal forma que nos quede formado un Grupo de Proyectos que los incluya a los dos. El control que crearemos será uno que nos permita apagar win, reiniciarlo, etc.

Seleccionamos la propiedad "InvisibleAtRunTime" y la ponemos en true, ya que nuestro control no será visible durante la ejecución del proyecto en el que se encuentre.

Podemos ver que nuestro control es como un form normal, pero sin bordes, ahora inserta un image (Image1) y ponle como picture un icono que te parezca representativo de lo que va a hacer nuestro control.

En el evento "Resize" del UserControl pon lo siguiente...

Private Sub UserControl_Resize()
Image1.Top = 0
Image1.Left = 0
UserControl.Height = Image1.Height
UserControl.Width = Image1.Width
End Sub

Esto hará que el control se vea en el form como si fuera solo el icono del image (igual a lo que pasa con un control Timer).

Ahora debemos crear los Metodos que poseerá nuestro control, para eso ve al menú "Complementos", de ahí a "Administrador de Complementos" y haz doble clic sobre "Asistente para interfaz de controles ActiveX de VB" de forma que al lado diga "Cargado", pulsa "Aceptar".

El "Asistente para interfaz de controles ActiveX de VB" es un asistente que nos guiará paso a paso en la asignación de métodos para nuestro control. Otra vez ve a "Complementos", allí te aparecerá una nueva opción, que es el asistente. Ábrelo y pulsa "Siguiente". En el cuadro "Nombres Disponibles" tienes todos los métodos mas comunes que puedes insertar, en "Nombres Seleccionados" no dejes nada y pulsa "Siguiente". En esta nueva ventana podemos definir métodos personalizados.

Clic en "Nuevo" y crea estos métodos...

  1. "Dialogo_Apagar"
  2. "Cerrar_Sesion"
  3. "Apagar_Sistema"
  4. "Reiniciar_Sistema"
  5. "Forzar_Apagado"

No te olvides de poner a cada uno como "Metodo" en el cuadro "Tipo". Dale a "Siguiente", en el cuadro siguiente no hacemos nada, así que "Siguiente" de nuevo.

El cuadro que nos salteamos te permite decir a cual de los componentes insertados en tu control corresponden los métodos que tengas puestos (de los que aparecían en "Nombres Disponibles") ya que hay métodos que lo tienen mas de uno de los controles insertados y esto se presta a confusiones.

En la ventana en la que nos encontramos ahora podemos agregarle una descripción a cada cosa y designar que valor retorna una función. Pongan una descripción a cada método si quieren, aunque los nombres que tienen son bastante descriptivos. No cambien nada en lo de "Tipo Devuelto". Denle a "Siguiente" y a "Finalizar".

Vamos al código de control. Tenemos que declarar las APIs que realizaran las operaciones necesarias:

Esta nos permitirá mostrar el dialogo de "Apagar el Sistema":

Private Declare Function SHShutDownDialog Lib "shell32" Alias "#60" (ByVal YourGuess As Long) As Long

Esta ejecutara las demás operaciones...

Private Declare Function ExitWindowsEx Lib "user32" (ByVal uFlags As Long, ByVal dwReserved As Long) As Long

Const EWX_LOGOFF = 0
Const EWX_SHUTDOWN = 1
Const EWX_REBOOT = 2
Const EWX_FORCE = 4


Ya tenemos las declaraciones, ahora fíjense abajo y vera que dice:

Public Function Dialogo_Apagar() As Variant
End Function


Y así para las demás funciones.

Ahora debemos poner las llamadas a las APIs dentro de cada función...

Public Function Dialogo_Apagar() As Variant
SHShutDownDialog 0
End Function

Public Function Cerrar_Sesion() As Variant
ExitWindowsEx EWX_LOGOFF, 0
End Function

Public Function Apagar_Sistema() As Variant
ExitWindowsEx EWX_SHUTDOWN, 0
End Function

Public Function Reiniciar_Sistema() As Variant
ExitWindowsEx EWX_REBOOT, 0
End Function

Public Function Forzar_Apagado() As Variant
ExitWindowsEx EWX_FORCE, 0
End Function


No elimines los comentarios ni el resto del código que haya generado automáticamente VB.

Nuestro OCX esta casi listo

Dale a guardar y pasa al form del otro proyecto (pulsando CTRL+F4 par cerrar la ventana del OCX). El ultimo icono que aparece en la barra de la izquierda es el de nuestro OCX, dibuja y ve a la ventana de código del form. Escribe "UserControl11" y pon un punto para ver los métodos del control, aparecen los nuestros mas algunos que VB pone por defecto.

Ahora vamos a darle mas "facha" a nuestra creación... Pon su propiedad "CanGetFocus" a False (nuestro control no obtiene el foco porque es invisible).

En Paint u otro programa de dibujo crea un BMP de 16 x 15 pixels, similar al icono del Image1. Esa imagen que creaste ponla en "ToolBoxBitmap", ese es el icono que aparecerá en la barra de la izquierda (la barra de herramientas), en lugar del icono por defecto.

En la propiedad "Nombre" ponle algo que quieras (yo lo llamé "DC_Shut"), de modo que cuando dibuje un control en un form, lo ponga como DC_Shut1, DC_Shut2, etc. Ve al menú "Proyecto" y a "Propiedades de Proyecto2" (proyecto2 es el proyecto del OCX, no el otro). En "Nombre del Proyecto" pon lo que quieras que aparezca en el cuadro de componentes (algo como el nombre pero un poco mas descriptivo), yo le puse "DC_Shutdown_Control".

Ve al Form1, borra el que control que pusiste antes y el código que escribiste (si escribiste algo) e inserta uno nuevo. Pon en el form varios botones (uno que llame a cada funcion del OCX). Guarda todo y pruébalo (recuerda que apagara tu maquina así que GUARDA todo).

¿Todo OK?

Entonces procedamos a compilar el OCX, elige el proyecto y ve al menú "Archivo" y a "Generar DC_Shut.OCX". Elige donde lo quieres guardar, pon un nombre (Si se llama DC_Shut, ponle DC_Shut.OCX). Ve a "Opciones" y agrega la info que quieras, pa que quede claro que eres TU el creador de este SUPERESPECTACULARULTRACOOLOCX.

Compila y listo calixto
Ya tienes tu primer OCX, corre a contarle a los amigos de barrio.


comentarios



  1. esta bacan tu ejemplo, gracia ah
    me gustaria arender mas sobre vb y vb.net son los prg k mas me gustan ,ayudame ps.bueno comunicate conigo apenas leas este mesnaje bye cdte racia ah



  2. Antes que nada agradescon este atriculo que es muy interesante, y se nota qoe lo hiceieron de una forma que se ve muy sencillo, y facil de comprender.



  3. Muy bueno, gracias.
    SIn mucho tecnicismo, desde luego.
    Ahora tengo que aprender a hacerlo con VB .NET si es que se puede.
    ¿Se puede?

  4. BRAHIAN GERMAN FRANCO BLEY:
    Martes 22 de Mayo de 2007 a las 05:54hs


    8 años utilizando vb y recien aprendi esto
    fue censillo
    grasias
    ahora a relizar mi propio gunbound online
    (TESIS) :)



  5. Hola a todos, una vez que se tiene compilado el OCX, lo registro, levanto una aplicacion VB, me aparecen en la caja de controles, pero como lo invoco.

    Si tengo una pagina JSP y quiero llamar este control, alguien sabe como invocarlos.

    Agradecido



  6. Tengo el siguiente problema quizás me puedan ayudar.
    -VB6 sp2-
    Después de que tengo el ocx funcionando y listo, creo un programita q lo utiliza, este programa se los mando a mis clientes pero no puedo mandarles paquetes de instalación, así q les mando solo las versiones nuevas de los exe y las .ocx. La primera vez que lo utilizan les da error 429 por q las .ocx no están registradas, tá hasta aquí todo bien, registran las ocx la primera vez y funciona todo lindo. Ahora el problema es cuando al mes siguiente tengo q mandar una versión nueva de la ocx, debo sobrescribir la ocx anterior y después de eso, todos los exe q usan dicha ocx dejan de funcionar (Error 429).
    La pregunta seria ¿como puedo hacer xa registrar la ocx de modo que cada vez que mando una nueva, el SO la registre como una actualización de la vieja y que todo siga funcionando?

    Gracias



  7. Bueno vamos a ver, veo que hace unos meses que no postean pero no pierdo nada con preguntarte para salir de dudas. Primeramente estoy buscando la manera de desarrollar un controlador OCX a partir de un aplicación existente.

    La cosa mas al detalle; hace unos días compre un captahuella con la ilusión de configurarlo para una aplicación que estoy desarrollando en VB6, para mi sorpresa dicho equipo solo registra contraseñas de cosas muy especificas en el Windows (Login, Screen Saver, cuentas hotmail, etc.) y lo que quiero es aprovechar el mismo componente pero hacerlo funcionar dentro de mi aplicación.

    La verdad no se si el OCX sea el mejor camino o exista una manera de invocar una API a partir de los controladores del dispositivo ya configurado, con tood esto no te estoy pidiendo que me lo hagas ni mucho menos, solo queria saber si me podias dar una noción básica de como puedo arrancar para poder modificar y adaptar el dispositivo a mis necesidaeds.

    De antemano muchas gracias

    Saludos



  8. ola alguien ke me diga para ke sirve los controles activeX porfa
    mi correo es vagabundo_man@hotmail.com
    y unos ejemplos de ke programas puedo hacer con ellos..
    se los agradeceria mucho.



  9. Muchas gracias por su tutorial! me ha servido para crear mi propio ocx para reproducir video con la Api mciSendString :D :D

agregar comentario


Se permiten las etiquetas HTML <b>, <i> y <p>. Si ingresa alguna dirección web o dirección de email serán convertidos en enlaces automáticamente.





publicidad