Beruflich Dokumente
Kultur Dokumente
Se define como la Notificacin de un acontecimiento o requerimiento que se suscita en el sistema o en un objeto.. Ejemplos de acontecimientos: Mover el Mouse, cambiar el tamao de la ventana, llegada de informacin por el puerto serial, tecla oprimida por el usuario, etc. Ejemplos de requerimientos: Arrancar un programa, leer un archivo, cerrar una ventana, etc.
Evento
Mensaje
Accin
Un Evento produce el envo de un Mensaje... Si el Mensaje es atrapado, el objeto procesa el Mensaje mediante... - La ejecucin de alguna(s) Accion(es) - El mensaje contina por defecto o puede detenerse
SQLWindows
33
Acciones de Aplicacin Ejemplo: Declaraciones Globales ... Application Actions On SAM_AppStartup Call InitGlobals() OnSAM_AppExit Call Cleanup() On SAM_SqlError ...maneja el error...
SQLWindows:
Mensajes dirigidos por evento: (anlogo al mensaje Windows? WM_TIMER) Mensajes generados: (desde Windows WM_LBUTTONDOWN y WM_LBUTTONUP)
SAM_Click
Los eventos son identificados por una constante numrica (Nmero Hexadecimal: 1 a 0xFFFF). Microsoft defini todos los mensajes que las aplicaciones pueden recibir en ambiente Windows, listndolos y asignando un nmero nico a cada uno de ellos. Algunos valores estn descritos a continuacin:
SQLWindows 34
/* Mouse input messages */ #define WM_MOUSEMOVE #define WM_LBUTTONDOWN #define WM_LBUTTONUP #define WM_LBUTTONDBLCLK #define WM_RBUTTONDOWN #define WM_RBUTTONUP #define WM_RBUTTONDBLCLK #define WM_MBUTTONDOWN #define WM_MBUTTONUP
Windows Message
0x0200 0x0201 0x0202 0x0203 0x0204 0x0205 0x0206 0x0207 0x0208 0x0209
#define WM_MBUTTONDBLCLK
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 notificacin de que el usuario movi el ratn, si el valor del mensaje fuera otro nmero 300, 320, 450, no importara porque sigue significando lo mismo. La notificacin de eventos se puede ver claramente en el siguiente diagrama:
Windows Mensaje Aplicacin 1 Aplicacin 2
Mensaje
SQLWindows
35
Windows monitorea los diferentes dispositivos y en el momento de recibir una notificacin decide a quien corresponde y le enva 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 aplicacin pueden definirse como sigue: #define MI_MENSAJE_1 #define MI_MENSAJE_2 . #define MI_MENSAJE_n WM_USER + n WM_USER + 1 WM_USER + 2
De igual forma SQLWindows tiene una nmero 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
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 botn derecho izquierdo del Mouse.
SAM_SetFocus
0x0209
SQLWindows
37
Que hace un objeto cuando recibe un mensaje ? El mensaje es enviado al objeto que afecta, el control del programa va a la seccin de atencin de mensajes (Message Actions) del objeto y busca la clusula On que corresponde al mensaje.
SQLWindows
38
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
Existen ciertos eventos que afectan a toda la aplicacin y no a la ventana en especifico, el cdigo para atenderlos se coloca en la seccin Application Actions dentro de Global Declarations.
Algunos de ellos: SAM_AppStartup Es el primer evento que ocurre, este mensaje lo recibe la aplicacin al momento de ejecutarse y SAM_AppExit SAM_SqlError antes de crear cualquier ventana. Este evento se recibe cuando todas las ventanas de la aplicacin han sido cerradas. Este mensaje se recibe cuando una funcin de SQLWindows regresa FALSE indicando que fallo su ejecucin.
SQLWindows 40
Notas: Los objetos que se emplean para la captura de informacin pueden manipularse como variables, como el Data Field. Algunos mensajes se reciben por la ventana padre y despus por los hijos, el mensaje SAM_Create por ejemplo.
Quien envia los Mensages ? Mensajes definidos por Usuarios enviados va funciones SQLWindows
Funcin SalPostMsg() Descripcin Agrega un mensaje a la cola de mensajes para un objeto de window. La transmisin del mensaje es asincrnica. Enva un mensaje inmediatamente y su transmisin es sincrnica. Enva un mensaje inmediatamente a los hijos de una ventana padre Nombre Nom msje. Info. adicional
41
SalSendMsg() SalSendMsgToChildren()
SQLWindows
Descripcin: SalxxxMsg(Objeto, Ejemplos de Evento y Mensaje Evento Inicio de aplicacin Creacin box de revisin Click del botn Escribir caracter en campo Elegir una ventana Form Salir de la aplicacin Un error SQL Creacin de ventana Form Ejemplo de Acciones Evento Inicio de aplicacin Creacin box de chequeo Click de un botn Escribir caracter en campo Cerrar una ventana Form Salir de aplicacin Error de SQL Creacin de ventana Form
Mensaje,
Nmero, Nmero )
Accin Conctese a base de datos Inhabilite seleccin Asigne valor al campo de datos Habilite botn de llamada Indique fn de aplicacin Desconctese de la base Despliegue error a usuario Inicialice objetos hijos
SQLWindows
42
El Propsito de esta aplicacin es sencillo, cuando el usuario presione el botn sumar se suma uno al valor desplegado en el Data Filed.
EL programa inicializa el Data Field con cero (0) cuando la ventana se crea, es decir cuando la ventana recibe el mensaje SAM_Create.
SQLWindows
43
El programa suma 1 al Data Field cuando el usuario hace Click en el botn, es decir cuando el Push Botn recibe el mensaje SAM_Click.
Notas adicionales:
Los objetos que se emplean para la captura de informacin Algunos mensajes se reciben por la ventana padre y despus por
Cree una forma nueva desde el Customizar o del Tool Box. Configrela 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 pngala como frmMain (Va de acuerdo a la nomenclatura vista), y la propiedad de Accessories = No, al igual que pngale ttulo a su forma en la propiedad de Object Title.
3. 4. 5.
Ahora implemente el men de File con una nica opcin que sea Salir. A continuacin agregue el Background Text para Contador. Coloque y configure para el tipo de dato numrico el DataField, al igual de ponerle su respectivo identificador (dfContador). Ahora deber insertar el Push Button de sumar (pbSumar) y configurar sus propiedades de nombre y tamao.
6.
Agregue clusulas On SAM_Create para cada objeto y en cada una de ellas inicialice el valor del Data Field Que valor prevalece?
SQLWindows 44
Aunque la primera versin del programa contador funciona (y funciona bien), el cdigo no sigue los principios de OOP recomendados a continuacin: Encapsulamiento: Cada objeto debe ser responsable de sus propios datos, un objeto por lo tanto no debe Comunicacin por mensajes: manipular los datos de otro objeto. Para lograr su propsito 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, tambin se agiliza la labor de depuracin pues no es necesario rastrear todo el programa para encontrar la causa del problema. El encapsulamiento de datos obliga que los objetos se comuniquen entre s, valo de tal forma: en una sala de cine el operador es el nico de montar el film, cuando el gerente quiere cambiar la pelcula no lo hace directamente, sino que le enva una notificacin 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 botn enve un mensaje para indicarle que debe hacer la suma. Primero se debe declarar el mensaje de usuario.
SQLWindows
46
Para enviar un mensaje se utiliza la funcin: SalSendMsg( hWndVentana, nMensaje, wParam, Iparam ) En donde:
hWndVentana Es el identificador del objeto al que se enva el mensaje. nMensaje wParam lparam El identificador del mensaje. Primer parmetro del mensaje (2 Bytes, sin signo) Segundo parmetro del mensaje (4 Bytes, con signo)
Segunda versin del programa (versin optimizada). En este segundo programa, el Data Field es el nico que modifica el valor.
SQLWindows
47
Ejercicio: 1. Modifique el programa del contador para incluir otro botn. 2. En este caso el botn indicar que contador se decremente. En la seccin de constans en User de Global Declarations declare el siguiente mensaje:
48
SQLWindows
Agregue el nuevo Push button y configrelo seleccionando el botn con el cursor y haciendo click derecho aparecer el Customizer, en Object Name ponga pbRestar.
4.
Evaluacin:
1. Un ________________________ se identifica con un cdigo ya establecido. 2. Los mensajes ___________ son mensajes definidos en SQLWindows, mientras los mensajes ____________ son mensajes que el programador define para las operaciones de la aplicacin.
3.
El
programador
define
sus
propios
mensajes
en
la
seccin
_______________________.
SQLWindows
49
4. Los mensajes definidos por el programador pueden tener asignado el mismo valor numrico. Cierto 5. Los
6.
objetos
atienden
los
______________________. Los mensajes son enviados a todos los objetos de una ventana sin importar su tipo. Cierto desplegada. Cierto
8.
Falso
Los objetos que se utilizan para capturar datos pueden usarse como ______________________ en el cdigo del programa.
9. A la caracterstica de que cada objeto es responsable de sus propios actos se le denomina ________________________________. 10. 11. Un objeto enva un mensaje a otro utilizando la funcin Cuando se necesita enviar datos referentes al evento se pueden ______________________________________. utilizar parmetros _________________ y ___________________.
SQLWindows
50
SQLWindows
51