La Red de Conocimientos Pedagógicos - Conocimientos matemáticos - Cómo implementar menú dinámico en PowerBuilder

Cómo implementar menú dinámico en PowerBuilder

He visto en algunos libros que el método de usar el lenguaje C para implementar menús dinámicos requiere llamar a una gran cantidad de funciones API, pero aquí quiero cambiar el método para usar las propiedades y algoritmos recursivos proporcionados por. PowerBuilder para realizar el proceso de creación de menús dinámicos Cabe señalar que el menú dinámico discutido aquí tiene una estructura de menú que se ha definido en una fuente de datos externa y el objeto de menú no tiene ningún elemento de menú que deba generarse. por el programa.

Definición de la estructura de datos del menú

Para implementar un menú dinámico, primero diseñe una estructura de datos de menú razonable. La fuente de datos puede ser cualquier DBMS o incluso un archivo de texto TXT. (Siempre que se pueda establecer una estructura jerárquica razonable)

El menú es como Un control de árbol tiene una estructura secuencial jerárquica, por lo que al definir la estructura de datos, debe elegir un modelo que pueda representar vívidamente la relación. entre padre, hijo y hermano, el control que mejor puede reflejar la estructura del menú es la vista de árbol de control, y la definición se basa en una progresión de dos dígitos. La forma de la estructura de datos es para determinar el número de capas por nivel. relación entre hermanos por número de serie y determine la relación padre-hijo mediante progresión de dos dígitos. Por ejemplo, la estructura de datos correspondiente del menú como se muestra en la figura es la siguiente

Así La estructura del menú es muy adecuada para usar algoritmos recursivos al establecer la estructura del menú. Luego, podemos crear un objeto de menú estructurado en árbol de acuerdo con el algoritmo transversal del árbol.

A continuación, defina la estructura de datos del menú. La estructura de datos del menú debe incluir lo siguiente Elemento básico Nombre del menú Tipo de menú Número de serie del menú Texto del elemento del menú ID del elemento del menú El código de ejecución del elemento del menú El estilo de visualización del menú se describe en la siguiente tabla

2. Dinámicamente menú creado

Diagrama de flujo

Descripción del proceso

Como se muestra en la figura anterior, todo el proceso de creación de un menú se divide en dos partes: inicializar el menú y configurar las propiedades del menú. La inicialización del menú utiliza un algoritmo recursivo para leer los datos del menú desde la fuente de datos. Cada vez que se lee un elemento del menú, se crea un menú. El objeto del elemento utiliza el método de creación en powerbuilder para crear un menú nivel por nivel. Primero, defina un objeto de instancia de menú. El menú aquí se refiere al menú principal en lugar del menú emergente. Debido a la diferencia, el procesamiento del menú emergente se presentará más adelante. muy simple. Solo hay cuatro oraciones para crear un objeto de menú. El elemento del menú primero se oculta y luego se muestra:

integer? menú de parámetros de función recursiva am_obj //El objeto de menú se pasa como un parámetro de función recursiva? m_menu_item? lam_root? //El objeto de menú m_menu_item es un objeto de menú predefinido //Este objeto no tiene un elemento de menú //Crear un menú. object lam_root item[ai_item_serial_no] = create m_menu_item?//Enganche el nuevo objeto de menú a am_obj = lam_root item[ai_item_serial_no] en un objeto de menú existente //Las dos oraciones siguientes se utilizan para mostrar el menú creado lam_root Hide()?// ¿Ocultar el objeto de menú? lam_root Show()?//Mostrar el objeto de menú

Coloque la declaración anterior en un proceso recursivo para construir toda la estructura del menú

En el proceso de creación del menu, necesita obtener el ID del elemento del menú. Este atributo es el único identificador utilizado para capturar la acción de respuesta del menú. Solo conociendo el ID del elemento del menú podemos saber qué evento del elemento del menú se activó.

El método para obtener el ID del elemento del menú se encontró después de repetidas pruebas en diferentes sistemas. Se encuentra un patrón regular. El ID del elemento del menú principal se incrementa desde el principio. El ID del elemento del menú se incrementa secuencialmente desde el principio. De acuerdo con el algoritmo recursivo, el ID de elemento de cada elemento del menú de cada capa se genera y almacena en la base de datos.

Configurar el estilo de visualización del menú consiste en configurar tres elementos después de crear el menú.

Un estilo de visualización, estilo de texto, estilo de imagen, un método de visualización mixto de texto e imágenes Para mejorar la eficiencia, al configurar cada estilo de menú, no configure todos los menús principales, elementos de menú invisibles y elementos de menú que no tienen un estilo definido. mostrar imagen, porque el estilo de texto es el estilo predeterminado y no es necesario cambiarlo. Esta parte del programador utiliza principalmente tres funciones API

Getsubmenu se utiliza para obtener el identificador del elemento de menú especificado SetMenuItemBitmaps. se utiliza para configurar el estilo de visualización del texto o configurar el estilo de la imagen. La diferencia entre los dos casos son los dos últimos dígitos de la función. Si es así, elimine los dos últimos dígitos del mapa de bits en el elemento del menú. manejar, agregue el mapa de bits al elemento del menú. ModifyMenu se usa para configurar el estilo de visualización de la imagen.

Después de repetidas pruebas, se descubrió que si el nombre de la imagen para mostrar especificado, aparecerán nombres ilegales como ***bmp. mostrar un separador

En lo que hay que centrarse durante todo el proceso de creación del menú es en el método de acceso a los datos del algoritmo del programa y en el control de errores

) El algoritmo del programa se refiere principalmente al algoritmo recursivo. Hay dos algoritmos para la recursividad, a saber, el método de bucle FOR y el método de bucle DO... while. Ambos son algoritmos de bucle pero tienen diferentes eficiencias. Se recomienda que los usuarios elijan el método de acuerdo con sus propias capacidades y eviten escribir un infinito. bucle For loop. El método es relativamente simple e intuitivo. El bucle controla el número de recorridos y luego se llama a sí mismo dentro del bucle para implementar la llamada recursiva DO... El método del bucle while determina principalmente las hojas o ramas (es decir, el padre). node) dentro del bucle. Las hojas y ramas se procesan por separado y las llamadas internas también son necesarias para implementar la recursividad

) Elegir un método de acceso a datos razonable y seguro también es muy importante para establecer un. Menú estable Defina un objeto de almacén de datos (almacenamiento de datos) para almacenar todos los datos extraídos de la base de datos en el objeto de almacén de datos al inicializar el menú y luego almacenarlos en el objeto de almacén de datos. No se realizan más operaciones en la base de datos hasta el final. Es necesario enviar los datos del menú modificados (como itemid) a la base de datos en el formulario de actualización del almacén de datos. Antes de eso, se filtran todos los datos que deben obtenerse del almacén de datos, es decir, setfilter () y filter (). ) Debe tenerse en cuenta que, de acuerdo con las reglas de programación de pares, después de filtrar y utilizar los datos en el almacén de datos, un par de condiciones de filtrado deben ser cadenas vacías para filtrarse de la siguiente manera: setfilter (condición) filter ()... proceso de procesamiento... setfilter ( ) Filter()

De esta manera, los datos también se pueden restaurar al estado inicial a tiempo para la siguiente llamada al módulo

Usando el almacén de datos, puede mantener la seguridad de los datos durante el período de creación del menú y no verse afectado por la base de datos. Puede mejorar la eficiencia y eliminar operaciones repetidas de lectura y escritura en la base de datos

) Debido a la importancia de los menús, el control de errores es importante. Particularmente importante al crear menús. Debemos considerar tantos errores potenciales como sea posible al crear menús de forma recursiva. Nadie puede garantizar que los datos de la estructura del menú en la base de datos estén libres de errores, aunque la definición correcta no es una cuestión de construir el módulo. Especialmente la estructura de datos jerárquica progresiva de dos bits del menú. Si hay un error, puede provocar que todo el proceso de creación falle. Peor aún, el programa se cerrará de forma anormal, por lo que el programa debe tenerse en cuenta al diseñar el manejo de errores. Ya sea para finalizar el proceso u omitir el enlace incorrecto y continuar, sugiero que el programa tenga un cierto grado de redundancia y capacidades de corrección de errores, es decir, los datos erróneos se pueden corregir al valor correcto según el entorno. los problemas que pueden ignorarse no se tratan para mejorar la eficiencia

Cabe señalar que después de repetidas pruebas, se descubre que si el atributo del menú es un tipo de carácter, no se puede asignar un valor nulo. De lo contrario, debe ser una cadena vacía si es un número entero. Al tipo no se le puede asignar un valor nulo. De lo contrario, debe ser un número entero predeterminado; de lo contrario, el programa informará un error de excepción y saldrá. p>

Se puede ver que las pruebas repetidas son muy importantes, no solo para encontrar errores de sintaxis y garantizar la exactitud del algoritmo. Se pueden encontrar muchos errores que nos resultan difíciles de inferir.

Tres pares. de procesamiento especial de menús emergentes

Dado que la definición de objeto y el método de llamada de los menús emergentes son diferentes de los de los menús principales, primero se requiere algún procesamiento especial.

Defina un objeto de instancia de menú. Este objeto debe tener un solo menú raíz. Todos los elementos del menú emergente deben estar conectados al elemento del menú raíz. El menú emergente debe llamarse en el evento del botón derecho del mouse de la ventana. El menú debe llamarse en el evento de inicialización de la ventana antes de llamar al menú emergente. Necesita conocer las coordenadas X e Y del punto emergente y luego mostrarlas usando la función popmenu()

Procesamiento. de los cuatro eventos de respuesta del menú

Dado que los eventos de respuesta del menú se definen en la estructura de datos, es necesario crear el menú. Después de eso, cuando el usuario hace clic en un menú, solo necesita obtener el identificador. del menú para saber qué menú se activó. Luego puede encontrar la definición de evento correspondiente en la base de datos y comenzar a ejecutar la acción. Lo importante es cómo obtener el identificador del menú. ventana donde se encuentra el menú. ue_mouse_clicked EVENT_ID pbm_menuselect. Hay dos parámetros disponibles en este evento: itemid y flag itemid es el identificador del objeto de menú que se activa. Cuando este indicador no es igual a, se activa el evento del menú, por lo que podemos definir una variable de instancia que guarda el itemid y se puede llamar al evento del menú. También hay una pregunta clave: ¿cuándo activar el evento ue_mouse_clicked? el evento en el que se hizo clic del objeto de instancia de menú definido por el usuario si? is_ItemID definido por iw_win se usa para guardar la variable de instancia de tipo cadena postEvent del itemid del menú. Finalmente, el procesamiento de respuesta se coloca en el evento del menú, para no obstaculizar las acciones previamente definidas lishixinzhi/Article/program/SQL/201311/. 16396