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...
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.
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
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.
Muy bueno, gracias.
SIn mucho tecnicismo, desde luego.
Ahora tengo que aprender a hacerlo con VB .NET si es que se puede.
¿Se puede?
8 años utilizando vb y recien aprendi esto
fue censillo
grasias
ahora a relizar mi propio gunbound online
(TESIS) :)
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
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
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
ola alguien ke me diga para ke sirve los controles activeX porfa
mi correo es
y unos ejemplos de ke programas puedo hacer con ellos..
se los agradeceria mucho.
Muchas gracias por su tutorial! me ha servido para crear mi propio ocx para reproducir video con la Api mciSendString :D :D
Buenas quisiera saber como si yo quisiera registrar un OCX en VISUAL BASIC tengo esta declaracion pero ella supo que el OCX esta en C:WindowsSystem
Public Declare Function Regactskin4 Lib "XXXXX.ocx" Alias "DllRegisterServer" () As Long
aja pero yo quisiera saber si a esa declaracion yo le podria decir o darle una direccion cual quiera osea que si yo quisiera poner ese OCX en la carpeta de la aplicacion como podira declarar eso de ante mano muchas gracias
Hola a todos. Mi inquietud es la siguiente: quiero que la vecina de la casa de al lado deje de provocarme desnuda cuando toma sol en su patio trasero, y mi esposa desde la cocina de mi casa me pregunta que carajo hago observando por la ventana... Tengo 56 años y no conozco mucho de computación, ¿puedo hacer esto con una de esas OCX? Para peor la vecina solo tiene 19 años y unas curvas tremendas. Si alguien me puede orientar con esto de las OCX les agradecería. Saludos. Roberto.
hola muy bueno el programita...... pero solo me queda un problema en los botones no me resulto la codificacion para llamar a acada funcion......
por ejemplo: puse en un comand_click (Cerrar_Sesion) y lo mismo con los demas........
le ruego porfavor si me pueden ayudar y mandar la codificacion.....
gracias
Muchas gracias, interesante tu ejemplo, y como se ve que eres un capo en la programación con vb, quisiera saber si tendrás un ejemplo de como hacer una calculadora pero mediante un control ActiveX, si me respondes hoy sería xevere. Gracias de todas maneras. Bye
Xacto
Saludos
Antes que todo muchas gracias por este minitutorial que hace ver la creacion de OCX muy sencilla.
Ahora bien... ¿se han dado cuenta que nadie contesta las preguntas de los que tienen dudas? [Se darían cuenta si leyeran los comentarios] Entonces, ¿para qué seguir preguntando?
Saludos desde SLP, México.
Cual es la forma de crear un .ocx que permita generar codigos de barra, para integrarlos a la aplicación. Gracias por sus comentarios...
donde coloco no entiendo muy bien que hago en que parte pongo
Private Declare Function SHShutDownDialog Lib "shell32" Alias "#60" (ByVal YourGuess As Long) As Long
esto es medio viejo pero si esta luis pr ahi es algo asi
a mi me funciono
Private Sub Command1_Click()
DC_Shut.Dialogo_Apagar
End Sub
Chevere