Manuales Originales Centura Builder 2

26
3. Programación por Eventos. 3.1. Evento. Se define como la Notificación de un acontecimiento o requerimiento que se suscita en el sistema o en un objeto.. Ejemplos de acontecimientos: Mover el Mouse, cambiar el tamaño de la ventana, llegada de información por el puerto serial, tecla oprimida por el usuario, etc. Ejemplos de requerimientos: Arrancar un programa, leer un archivo, cerrar una ventana, etc. Flujo Acción Evento Mensaje. SQLWindows 33 Evento Mensaj e Acción

Transcript of Manuales Originales Centura Builder 2

Page 1: Manuales Originales Centura Builder 2

3. Programación por Eventos.

3.1. Evento.

Se define como la Notificación de un acontecimiento o requerimiento

que se suscita en el sistema o en un objeto..

Ejemplos de acontecimientos:

Mover el Mouse, cambiar el tamaño de la ventana, llegada de

información por el puerto serial, tecla oprimida por el usuario, etc.

Ejemplos de requerimientos:

Arrancar un programa, leer un archivo, cerrar una ventana, etc.

Flujo Acción Evento Mensaje.

Un Evento produce el envío de un Mensaje...

Si el Mensaje es atrapado, el objeto procesa el Mensaje mediante...

- La ejecución de alguna(s) Accion(es)

- El mensaje continúa por “defecto” o puede detenerse

SQLWindows 33

Evento Mensaje Acción

Page 2: Manuales Originales Centura Builder 2

Donde se Envían los Mensajes

A la Aplicación misma A objetos de una Aplicación

Acciones de Aplicación Acciones de Mensaje

Ejemplo:

Declaraciones Globales

...

Application Actions

On SAM_AppStartup

Call InitGlobals()

OnSAM_AppExit

Call Cleanup()

On SAM_SqlError

...maneja el error...

Ejemplo: Form Window frmMain Contents Pushbutton: pbOK Message Actions !mensajes del pushbutton On SAM_Create Call SalDisableWindow (pbOK) Message Actions !mensajes de la Form Window

On SAM_Close ...pregunta al usuario si va salir

Quien Envía los Mensajes

Windows: Ejemplos:

Mensajes dirigidos por evento: WM_KEYUP

Mensajes generados WM_PAINT

SQLWindows:

Mensajes dirigidos por evento:

(análogo al mensaje Windows?

WM_TIMER)

SAM_Timer

Mensajes generados:

(desde Windows’

WM_LBUTTONDOWN y

WM_LBUTTONUP)

SAM_Click

Los eventos son identificados por una constante numérica (Número

Hexadecimal: 1 a 0xFFFF). Microsoft definió todos los mensajes que las

SQLWindows 34

Page 3: Manuales Originales Centura Builder 2

aplicaciones pueden recibir en ambiente Windows, listándolos y asignando un

número único a cada uno de ellos. Algunos valores están descritos a

continuación:

/* Mouse input messages */

#define WM_MOUSEMOVE 0x0200

#define WM_LBUTTONDOWN 0x0201

#define WM_LBUTTONUP 0x0202

#define WM_LBUTTONDBLCLK 0x0203

#define WM_RBUTTONDOWN 0x0204

#define WM_RBUTTONUP 0x0205

#define WM_RBUTTONDBLCLK 0x0206

#define WM_MBUTTONDOWN 0x0207

#define WM_MBUTTONUP 0x0208

#define WM_MBUTTONDBLCLK 0x0209

El valor asignado al mensaje no tiene relevancia, salvo que debe

identificar un solo evento, el único atributo del mensaje de importancia es su

significado, por ejemplo WM_MOUSEMOVE es una notificación de que el

usuario movió el ratón, si el valor del mensaje fuera otro número 300, 320,

450, no importaría porque sigue significando lo mismo.

La notificación de eventos se puede ver claramente en el siguiente

diagrama:

SQLWindows 35

Mensaje

Windows

Mensaje

Windows Message

Page 4: Manuales Originales Centura Builder 2

Windows monitorea los diferentes dispositivos y en el momento de

recibir una notificación decide a quien corresponde y le envía el mensaje

correspondiente.

Debido a que en general las aplicaciones necesitan de mensajes extra

para realizar su tarea, Microsoft definió una constante a partir de la cual se

pueden colocar mensajes propios, esta constante se llama WM_USER, y los

mensajes propios de la aplicación pueden definirse como sigue:

#define MI_MENSAJE_1 WM_USER + 1

#define MI_MENSAJE_2 WM_USER + 2

.

#define MI_MENSAJE_n WM_USER + n

De igual forma SQLWindows tiene una número de mensajes

predefinidos identificados con el prefijo SAM (SQLWindows Aplication

Message), este conjunto de mensajes no es tan vasto como el de Windows y

solo se usa para objetos dentro de SQLWindows, el flujo es como sigue:

SQLWindows 36

MensajeWindows

Windows

Aplicación 1

Aplicación 1SQLWindows

Aplicación 2

Aplicación 2

MensajeWindows

MensajeSAM

MensajeSAM

Page 5: Manuales Originales Centura Builder 2

Los mensajes de Windows son diferentes de los mensajes de SAM y en

general no se pueden utilizar en forma indistinta. Algunos mensajes de

SQLWindows son:

SAM_Create 0x1001

Se refiere por un objeto cuando este se crea en la memoria pero antes de

que sea visible.

SAM_Click 0x2006

Lo reciben algunos objetos (Push button, Combo Box, Picture, etc.)

cuando el usuario coloca el cursor en el objeto y presiona y suelta el

botón derecho izquierdo del Mouse.

SAM_SetFocus 0x0209

Lo reciben los objetos cuando el Focus es colocado en ellos.

3.2. Mensajes definidos de Usuarios.

El programador puede agregar mensajes de usuario a partir del número

SAM_User. Los mensajes definidos por el usuario se registran generalmente

con las siglas PAM (Programmer Aplication Message), los mensajes

SQLWindows 37

Ventana 1

Ventana 2

Page 6: Manuales Originales Centura Builder 2

definidos por el usuario se registran como constantes en la sección Global

Declarations.

¿ Que hace un objeto cuando recibe un mensaje ?

El mensaje es enviado al objeto que afecta, el control del programa va a

la sección de atención de mensajes (Message Actions) del objeto y busca

la cláusula On que corresponde al mensaje.

SQLWindows 38

Page 7: Manuales Originales Centura Builder 2

Algunos mensajes no son recibidos por todos los objetos: por ejemplo

un Data Field no recibe el mensaje SAM_Click, un Push Button no recibe un

SAM_AnyEdit.

Ejemplos de algunos mensajes:

Form Window

SAM_Create

SAM_CreateComplete

Data Field

SAM_AnyEdit

SAM_Validate

SQLWindows 39

Page 8: Manuales Originales Centura Builder 2

Existen ciertos eventos que afectan a toda la aplicación y no a la

ventana en especifico, el código para atenderlos se coloca en la sección

Application Actions dentro de Global Declarations.

Algunos de ellos:

SAM_AppStartup Es el primer evento que ocurre, este mensaje lo

recibe la aplicación al momento de ejecutarse y

antes de crear cualquier ventana.

SAM_AppExit Este evento se recibe cuando todas las ventanas

de la aplicación han sido cerradas.

SAM_SqlError Este mensaje se recibe cuando una función de

SQLWindows regresa FALSE indicando que

SQLWindows 40

Page 9: Manuales Originales Centura Builder 2

fallo su ejecución.

Notas:

Los objetos que se emplean para la captura de información pueden

manipularse como variables, como el Data Field.

Algunos mensajes se reciben por la ventana padre y después por los hijos,

el mensaje SAM_Create por ejemplo.

¿ Quien envia los Mensages ?

Mensajes definidos por Usuarios enviados vía funciones

SQLWindows

Función Descripción

SalPostMsg() Agrega un mensaje a la cola de mensajes para un

objeto de window. La transmisión del mensaje es

asincrónica.

SalSendMsg() Envía un mensaje inmediatamente y su transmisión es

sincrónica.

SQLWindows 41

Page 10: Manuales Originales Centura Builder 2

SalSendMsgToChildren() Envía un mensaje inmediatamente a los hijos de una

ventana padre

Descripción:

Nombre Nom msje. Info. adicional

SalxxxMsg(Objeto, Mensaje, Número, Número )

Ejemplos de Evento y Mensaje

Evento Mensaje

Inicio de aplicación SAM_AppStartup

Creación box de revisión SAM_Create

Click del botón SAM_Click

Escribir caracter en campo SAM_AnyEdit

Elegir una ventana Form SAM_Close

Salir de la aplicación SAM_AppExit

Un error SQL SAM_SqlError

Creación de ventana Form PM_Init

(NOTA: SAM_* = MSJE. SqlWindows; PM_Init = Msje.defin.usuario)

Ejemplo de Acciones

Evento Acción

Inicio de aplicación Conéctese a base de datos

Creación box de chequeo Inhabilite selección

Click de un botón Asigne valor al campo de datos

Escribir caracter en campo Habilite botón de llamada

Cerrar una ventana Form Indique fín de aplicación

Salir de aplicación Desconéctese de la base

Error de SQL Despliegue error a usuario

SQLWindows 42

Page 11: Manuales Originales Centura Builder 2

Creación de ventana Form Inicialice objetos hijos

Ejercicio.

Considere la interfaz mostrada en la imagen siguiente.

El Propósito de esta aplicación es sencillo, cuando el usuario presione

el botón sumar se suma uno al valor desplegado en el Data Filed.

SQLWindows 43

Page 12: Manuales Originales Centura Builder 2

Primera versión del programa.

¿Qué hace el programa?

EL programa inicializa el Data Field con cero (0) cuando la ventana

se crea, es decir cuando la ventana recibe el mensaje SAM_Create.

El programa suma 1 al Data Field cuando el usuario hace Click en el

botón, es decir cuando el Push Botón recibe el mensaje SAM_Click.

Notas adicionales:

Los objetos que se emplean para la captura de información pueden

manipularse como variables, como el Data Field.

Algunos mensajes se reciben por la ventana padre y después por los

hijos, el mensaje SAM_Create por ejemplo.

Cree la interface del programa para el contador de la siguiente forma:

1. Cree una forma nueva desde el Customizar o del Tool Box.

2. Configúrela para que no tenga accesorios (si es que tiene), entonces

haciendo click derecho sobre la forma aparecerá el Customizer o

Asistente, la propiedad de Object Name póngala como frmMain (Va de

SQLWindows 44

Page 13: Manuales Originales Centura Builder 2

acuerdo a la nomenclatura vista), y la propiedad de Accessories = No, al

igual que póngale título a su forma en la propiedad de Object Title.

3. Ahora implemente el menú de File con una única opción que sea Salir.

4. A continuación agregue el Background Text para Contador.

5. Coloque y configure para el tipo de dato numérico el DataField, al igual

de ponerle su respectivo identificador (dfContador).

6. Ahora deberá insertar el Push Button de sumar (pbSumar) y configurar

sus propiedades de nombre y tamaño.

7. Programe ahora el código ya visto para que la aplicación funcione

correctamente.

Agregue cláusulas On SAM_Create para cada objeto y en cada una de

ellas inicialice el valor del Data Field ¿Que valor prevalece?

SQLWindows 45

Page 14: Manuales Originales Centura Builder 2

3.3. Principios de OOP (Programación Orientada a Objetos)

Cada objeto en SQLWindows tiene una sección de descripción.

Aunque la primera versión del programa contador funciona (y funciona

bien), el código no sigue los principios de OOP recomendados a continuación:

Encapsulamiento: Cada objeto debe ser responsable de sus propios

datos, un objeto por lo tanto no debe

manipular los datos de otro objeto.

Comunicación por

mensajes:

Para lograr su propósito los objetos deben

comunicarse utilizando mensajes.

El encapsulamiento permite crear entes independientes, las cuales pueden

volverse a utilizar, al hacer que un objeto sea el único que modifique su

valor, también se agiliza la labor de depuración pues no es necesario

rastrear todo el programa para encontrar la causa del problema.

SQLWindows 46

Page 15: Manuales Originales Centura Builder 2

El encapsulamiento de datos obliga que los objetos se comuniquen entre sí,

véalo de tal forma: en una sala de cine el operador es el único de montar el

film, cuando el gerente quiere cambiar la película no lo hace directamente,

sino que le envía una notificación al operador para que lo haga.

Ya que el Data Field debe ser el único que inicialice y modifique el valor,

es necesario que el botón envíe un mensaje para indicarle que debe hacer la

suma.

Primero se debe declarar el mensaje de usuario.

Para enviar un mensaje se utiliza la función:

SalSendMsg( hWndVentana, nMensaje, wParam, Iparam )

En donde:

hWndVentana Es el identificador del objeto al que se envía el mensaje.

nMensaje El identificador del mensaje.

wParam Primer parámetro del mensaje (2 Bytes, sin signo)

lparam Segundo parámetro del mensaje (4 Bytes, con signo)

SQLWindows 47

Page 16: Manuales Originales Centura Builder 2

Segunda versión del programa (versión optimizada).

En este segundo programa, el Data Field es el único que modifica el

valor.

Trate de implementar el programa contar/decrementar utilizando un solo

mensaje.

SQLWindows 48

Page 17: Manuales Originales Centura Builder 2

Ejercicio:

1. Modifique el programa del contador para incluir otro botón.

2. En este caso el botón indicará que contador se decremente.

En la sección de constans en User de Global Declarations declare el

siguiente mensaje:

Number: PAM_Decrementa = SAM_User + 2

3. Agregue el nuevo Push button y configúrelo seleccionando el botón

con el cursor y haciendo click derecho aparecerá el Customizer, en

Object Name ponga pbRestar.

4. Agregue el siguiente código en el Datafield:

SQLWindows 49

Page 18: Manuales Originales Centura Builder 2

Evaluación:

1. Un ________________________ se identifica con un código ya establecido.

2. Los mensajes ___________ son mensajes definidos en SQLWindows,

mientras los mensajes ____________ son mensajes que el programador

define para las operaciones de la aplicación.

3. El programador define sus propios mensajes en la sección

_______________________.

4. Los mensajes definidos por el programador pueden tener asignado el mismo

valor numérico.

Cierto ž Falso ž

5. Los objetos atienden los mensajes en la sección ______________________.

6. Los mensajes son enviados a todos los objetos de una ventana sin importar

su tipo.

Cierto ž Falso ž

7. El mensaje SAM_AppStartup lo recibe una ventana antes de ser desplegada.

Cierto ž Falso ž

8. Los objetos que se utilizan para capturar datos pueden usarse como

______________________ en el código del programa.

9. A la característica de que cada objeto es responsable de sus propios actos se

le denomina ________________________________.

10. Un objeto envía un mensaje a otro utilizando la función

______________________________________.

11. Cuando se necesita enviar datos referentes al evento se pueden utilizar

parámetros _________________ y ___________________.

SQLWindows 50

Page 19: Manuales Originales Centura Builder 2

3. PROGRAMACIÓN POR EVENTOS.

3.1. Evento.

3.2. Mensajes definidos de Usuarios.

3.3. Principios de OOP (Programación Orientada a Objetos)

SQLWindows 51