Red de conocimiento informático - Problemas con los teléfonos móviles - Editor de menú de control VB activex ocx

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ú

Primero abra VB6 0. Seleccione el control Activex en el nuevo proyecto. En este momento, aparecerá una interfaz similar a un formulario en la ventana de diseño. Este es su diseñador ocx, con el nombre predeterminado de UserControl1.

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

Puede notar que la ventana "Propiedades" de menuControl es similar pero diferente de la ventana "Propiedades" del formulario estándar de VB. Recuerde, ¡ahora estamos diseñando un control ocx, no un formulario en VB!

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

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

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

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.