Editor de menú de control VB activex ocx
El control ocx resultará familiar para los amigos que han desarrollado aplicaciones de Windows. Proporciona un potente soporte para programas en forma de componentes externos, como cuadros de imágenes, etiquetas, imágenes, etc. en la barra de herramientas de VB. control. Sin embargo, es difícil desarrollar su propio OCX. En el pasado, la mayoría de los programadores usaban CDK (kit de desarrollo de control) para diseñar, pero esto requiere dominar considerables habilidades en el lenguaje C. De hecho, VB ha apoyado el desarrollo de control OCX desde VB 5.0. Puede comenzar desde VB. Encontré algunos ejemplos en los ejemplos. Sin embargo, estos ejemplos son relativamente abstractos y difíciles de entender. Síganme para crear un control ocx muy práctico. ¡Solo necesita conocer algunos conceptos básicos de programación de VB!
Todo el mundo está muy familiarizado con los menús de Windows. Este formato unificado de menús grises a veces no puede cumplir con los requisitos de algunas aplicaciones, especialmente aquellos diseños multimedia que tienen requisitos de interfaz más altos. El problema es que los editores de menú proporcionados en VC y VB no admiten la función de menú gráfico. ¡No se preocupe, desarrollaremos uno nosotros mismos!
Cree un proyecto de menú
1. Haga clic en "Propiedades del proyecto1" en el menú "Proyecto" para abrir el cuadro de diálogo "Propiedades del proyecto". Seleccione la pestaña "General" y cambie el nombre del proyecto a menús
2 Haga clic en la propiedad "Nombre" en la ventana "Propiedades" de UserControl1 y cambie el nombre del control de usuario a menuControl
Agregar un proyecto de prueba
Dado que el proyecto .ocx no se puede ejecutar de forma independiente, agregaremos un proyecto de prueba. Cargar el proyecto de diseño (proyecto de menús) y el proyecto de prueba (proyecto de prueba) en el mismo grupo de proyectos será muy útil para depurar componentes en ejecución.
1. Haga clic en "Agregar proyecto" en el menú "Archivo" para abrir el cuadro de diálogo "Agregar proyecto".
Nota: No haga clic en "Abrir proyecto" o "Nuevo proyecto" porque esto cerrará el proyecto de control.
2. Haga doble clic en el icono "EXE estándar" para agregar un proyecto .exe normal (es decir, nuestro proyecto de prueba).
El nuevo proyecto se convierte inmediatamente en el proyecto de "inicio" para este grupo de proyectos. La ventana "Explorador de proyectos" identifica los proyectos "iniciales" mostrando su nombre en negrita.
Nota: Los proyectos de control ActiveX no se pueden utilizar como proyectos de inicio.
3. Haga clic en "Guardar grupo de proyectos" en el menú "Archivo" para guardar el proyecto de prueba y el grupo de proyectos.
amp; ocx code designamp;
1. Agregue el siguiente código en el módulo del proyecto de menú:
Escriba menuRect 'Crear tipo definido por el usuario.
izquierda como entero
arriba como entero
derecha como entero
abajo como entero
Tipo de fin< / p>
2. Agregue un control de cuadro de imagen en la ventana de diseño del control y asígnele el nombre bmpmenu.
Agregue otro control de cuadro de imagen a bmpmenu y asígnele el nombre menuitem.
Nota: menuitem es un subcontrol de bmpmenu. Además, la propiedad
AutoSize de estos dos cuadros de imagen está establecida en Verdadero y la propiedad BorderStyle está establecida en Ninguno.
3. Agregue el siguiente código en General-gt; Declaraciones en la ventana de diseño de control:
Public g_selectedItem As String
Dim g_fileName As String 'Menu file. Nombre
Dim g_height As Integer 'La altura del control ocx
Dim g_width As Integer 'El ancho del control ocx
Dim bmpRects() Como menuRect 'bmpRects() Se utiliza para registrar las posiciones de todos los elementos del menú
Atenuar currentItemNumbers como entero
Atenuar currentItemNumber como entero
Evento público MENUITEMDOWN()
Nota: MENUITEMDOWN es un evento que agregamos al control. Su función detallada se presentará en detalle más adelante.
4. Agregue dos propiedades a nuestro control de menú: Children y BmpName.
La propiedad childs representa el número de elementos del menú del control de menú y la propiedad BmpName representa el nombre del archivo del menú. del control de menú
p>
Primero, abra la ventana de código de menuControl. Haga clic en "Agregar proceso" en el menú "Herramientas" para abrir el cuadro de diálogo "Agregar proceso". Ingrese el nombre de los niños en el cuadro "Nombre". Haga clic en "Propiedades" y "Público ***" y luego haga clic en "Aceptar".
Verá el siguiente código:
Propiedad pública Obtener hijos() como variante
Propiedad final
Propiedad pública Let del1 ( ByVal vNewValue As Variant)
End Property
Luego, cambie nuestro proceso de propiedad recién creado en la ventana de código (la parte modificada se muestra en negrita):
Propiedad pública Obtener niños() como entero
childs = currentItemNumbers
Propiedad final
Propiedad pública Dejar niños(ByVal vNewValue As Integer)
currentItemNumbers = vNewValue
PropertyChanged "childs"
PopAndResize ' Este es un subproceso
Propiedad final
Cuando cambias los hijos El proceso Property Let se ejecuta cuando se asigna un nuevo valor a una propiedad, y el proceso Property Get se ejecuta cuando se recupera el valor de propiedad de la propiedad secundaria.
Lo mismo se hace para el atributo BmpName. Su parte de código es la siguiente:
Propiedad pública Obtener BmpName() como cadena
BmpName = g_fileName
Propiedad final
Propiedad pública Let BmpName(ByVal vNewValue As String)
g_fileName = vNewValue
PropertyChanged "BmpName"
PopAndResize
End Property
5. Para inicializar el control ocx, en el procedimiento de evento UserControl_InitProperties
agregue el siguiente código:
Private Sub UserControl_InitProperties ()
BmpName = ""
childs = 0
End Sub
Agregue el siguiente código en el proceso del evento UserControl_Resize:
End Sub
p>
Private Sub UserControl_Resize()
If g_height lt; Determine el tamaño del control en el estado de diseño
UserControl.Height = 300
p>UserControl.Width = 300
Else
UserControl.Height = g_height 'Determina el tamaño del control en el estado de ejecución
UserControl.Width = g_width
End If
End Sub
Nota: el diseño de control de ocx implica muchos conceptos importantes y todos deben practicarlos personalmente para comprenderlos verdaderamente.
La siguiente es una breve introducción al diseño de procesos de eventos de ocx.
A diferencia de los objetos programables generales, los controles ocx tienen comportamientos tanto en tiempo de diseño como en tiempo de ejecución. Es decir, cuando un desarrollador coloca un control en un formulario durante el diseño, se ejecutará parte del código del control.
Por ejemplo, cuando el control de menú que diseñamos se coloca en el formulario del proyecto de prueba, el código colocado en el proceso de evento UserControl_Resize se ejecutará cuando el proyecto de prueba entre en el estado de ejecución; También se ejecutará el proceso del evento UserControl_Resize. Por lo tanto, utilizo la instrucción If...Else en el proceso UserControl_Resize para determinar el tamaño del control de menú en el estado de diseño y en el estado de ejecución, respectivamente.
6. Bien, nuestro control ocx está a punto de completarse, espera un poco más (¡ocx es un poco difícil, pero representa el último concepto de diseño técnico!)
Agregue el siguiente subprocedimiento a la parte del código del diseñador ocx:
Sub popbmpMenu(xposition As Integer, yposition As Integer, itemNumbers As_ Integer, fileName As String)
ReDim bmpRects ( itemNumbers)
bmpmenu.Visible = False
g_fileName = fileName
bmpmenu.Picture = LoadPicture(g_fileName ".bmp")
menuitem.Visible = False
currentItemNumbers = itemNumbers
itemHeight = Int(bmpmenu.Height / itemNumbers)
Para i = 0 A itemNumbers - 1 p >
bmpRects(i).left = xposition
bmpRects(i).right = bmpmenu.Width
Si i = 0 entonces
bmpRects ( i).top = yposition
Else
bmpRects(i).top = bmpRects(i - 1).bottom
Finalizar si
bmpRects(i).bottom = itemHeight * (i 1)
Siguiente i
bmpmenu.ZOrder 0
bmpmenu.left = 0 p >
bmpmenu.top = 0
bmpmenu.Visible = True
g_height = bmpmenu.Height 'El archivo de mapa de bits del menú determina el tamaño del control ocx
g_width = bmpmenu.Width
End Sub
Sub PopAndResize()
menuitem.Visible = False
Si los niños gt ; 0 Y BmpName lt;gt; "" Luego
Llamar a popbmpMenu(0, 0, Children, BmpName)
Fin
UserControl.Height = g_height 'Ajustar el tamaño del control ocx
UserControl.Width = g_width
End Sub
Private Sub GetSelectedItem() 'Determinar qué elemento del menú está seleccionado p>
g_selectedItem = right(g_fileName, 2) "-" LTrim(Str(currentItemNumber))
End Sub
Finalmente algo de código en los dos cuadros de imagen:<
/p>
Sub privado bmpmenu_MouseMove(Botón como entero, Mayús como entero, X como único, _
Y como único)
menuitem.Visible = False
Para i = 0 Para currentItemNumbers - 1
Si X gt; bmpRects(i).left Y Y bmpRects(i).top Y X lt; /p>
Y Y lt; bmpRects(i).bottom Entonces
currentItemNumber = 0
menuitem.Picture = LoadPicture(g_fileName "-" LTrim(Str(i 1) )) ".bmp")
currentItemNumber = i 1
menuitem.Move bmpRects(i).left , bmpRects(i).top
menuitem. Visible = Verdadero
Salir del sub
Finalizar si
Siguiente i
Fin del sub
Submenú privadoitem_MouseDown( Botón como entero, Mayús como entero, X como único, _
Y como único)
GetSelectedItem
menuitem.Visible = False
'Iniciar el evento MENUITEMDOWN El código de ejecución de este evento no está escrito en ocx
', sino en la aplicación que llama a este ocx.
RaiseEvent MENUITEMDOWN
End Sub
amp; Test ocx control amp;
OK, ¡nuestro ocx finalmente está completo! ¡Es hora de probarlo!
Cree un archivo bmp de menú, su nombre es c2.bmp y tiene 5 elementos de menú.
Cree mapas de bits de estado de activación para 5 elementos del menú y asígneles el nombre c2-1.bmp, c2-2.bmp, c2-3.bmp, c2-4.bmp, c2-5.bmp
Almacene estos archivos de mapa de bits en la misma carpeta que el grupo de proyectos.
Cierre la ventana del diseñador ocx y abra la ventana ocxTest. Encontramos que hay un nuevo control en la barra de herramientas de ToolBox. Este es el control de menú que diseñamos.
Coloque un control menuControl en la ventana ocxTest y luego complete el siguiente programa en la ventana de código:
Private Sub Form_Click()
menuControl1.BmpName = App.Path "\c2 "
menuControl1.childs = 5
menuControl1.Visible = True
End Sub
Sub privado Form_Load()
menuControl1.Visible = False
Submenú final
Submenú privadoControl1_MENUITEMDOWN()
menuControl1.Visible = False
Atenuar selectMenu Como entero
selectMenu = Val(Trim(Mid(menuControl1.g_selectedItem, 4, 2)))
Seleccione caso selectMenu
Caso 1
'Se selecciona el primer elemento del menú
Caso 2
'Se selecciona el segundo elemento del menú
Caso 3
' Se selecciona el tercer elemento del menú
Caso 4
'Se selecciona el cuarto elemento del menú
Caso 5
'El quinto ¿Qué tal? End Select
End Sub
cuando se selecciona un elemento del menú. ¡La llamada es bastante simple! Esta es la ventaja del diseño de componentes propuesto por Microsoft. Sí, el diseño ocx es algo difícil, pero una vez diseñado, es muy conveniente llamarlo. La reutilización y la facilidad de mantenimiento de ocx merecen la pena dedicar más tiempo al diseño. Más importante aún, a medida que el diseño del software se vuelve cada vez más complejo, es particularmente crítico adoptar las ideas correctas de diseño de componentes.
Compilar ocx amp. ;
Si todo va bien, podemos compilar ocx.
1. Haga clic en "menús" en la ventana "Explorador de proyectos" para seleccionar el proyecto.
2. Haga clic en "Generar menuControl.ocx" en el menú "Archivo".
Nota: Si necesita que su control ocx tenga una licencia, puede hacer lo siguiente
En el menú "Proyecto", haga clic en "menús Propiedades" para abrir las "Propiedades del proyecto". "cuadro de diálogo". Seleccione la pestaña "General", seleccione "Requerir palabra clave de licencia" y luego haga clic en "Aceptar".
De esta manera, incluso si alguien copia tu ocx, no podrá usarlo. ¡No tienes que preocuparte de que tu arduo trabajo sea violado!
amp; Utilice ocx controlamp;
Dado que nuestro ocx se ha compilado correctamente, ahora podemos llamar a nuestro menuControl.ocx como si utilizaramos los controles estándar del sistema.
Salga del grupo de proyectos durante el diseño, cree un nuevo proyecto estándar de VB, haga clic en "Componentes" en el menú "Proyecto", en la pestaña Controles, marque "menús" y luego haga clic en "Seguro". Ahora el control menuControl se trata de la misma manera que Label, TextBox y otros controles, ¡excepto que el menuControl está diseñado por nosotros!
Existen ciertas reglas para nombrar archivos gráficos de menú. Solo necesita mirar el programa. para entender. Por supuesto, los lectores también pueden manejar los nombres de los archivos como quieran.
amp; Postscriptamp;
El diseño de control OCX también implica muchos aspectos. Debido al espacio limitado, no entraré en detalles aquí (de hecho, todos son lo suficientemente pacientes si pueden persistir). aquí) ! (-_-) ). Todavía quedan muchas áreas de mejora en menuControl, que se mejorarán gradualmente en el futuro.