?? dos.htm
字號:
<!--FAST--><!DOCTYPE HTML PUBLIC "-//SoftQuad//DTD HTML 2.0 + extensions for HoTMetaL Light 3.0 19960703//EN"
>
<HTML>
<HEAD>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=windows-1252">
<META NAME="Generator" CONTENT="Microsoft Word 97">
<TITLE>Más sobre mensajes y eventos</TITLE></HEAD>
<BODY BGCOLOR="ffffff">
<P><B><FONT SIZE="6"></FONT></B></P>
<H1>Más sobre mensajes y eventos.</H1>
<P><FONT SIZE="2"></FONT></P>
<P>Hasta ahora prácticamente no has programado nada, pero no desesperes,
porque lo poco que has aprendido hace referencia a la base de toda programación
en Windows, los mensajes y sus eventos.</P>
<P>Te habrás dado cuenta que cuando se ejecuta el programa no ocurre
nada, hasta que se genera un evento. Bien los puede generar el sistema, o el
usuario. Cuando ocurre el evento nuestro programa ha de reaccionar. </P>
<P>Según esto hay tres grandes bloques de eventos, que básicamente
todos los controles reaccionan a ellos, hay algunos que reaccionan a todos y
otros a algunos, también los hay que tiene sus propios eventos aparte de
estos.</P>
<P> </P>
<P><B></B></P>
<P>Principales eventos ratón</P>
<P> </P>
<P ALIGN="LEFT"></P>
<TABLE BORDER="BORDER" CELLSPACING="1" CELLPADDING="4" WIDTH="406">
<TR>
<TD WIDTH="35%" VALIGN="TOP"><B><FONT SIZE="2"></FONT></B>
<P ALIGN="CENTER">Nombre.</P></TD>
<TD WIDTH="65%" VALIGN="TOP"><B><FONT SIZE="2"></FONT></B>
<P ALIGN="CENTER">Acción.</P></TD></TR>
<TR>
<TD WIDTH="35%" VALIGN="TOP"><FONT SIZE="2"></FONT>
<P>OnDlClik</P></TD>
<TD WIDTH="65%" VALIGN="TOP"><FONT SIZE="2"></FONT>
<P>Doble clic de ratón.</P></TD></TR>
<TR>
<TD WIDTH="35%" VALIGN="TOP"><FONT SIZE="2"></FONT>
<P>OnClick</P></TD>
<TD WIDTH="65%" VALIGN="TOP"><FONT SIZE="2"></FONT>
<P>Un clic de ratón.</P></TD></TR>
<TR>
<TD WIDTH="35%" VALIGN="TOP"><FONT SIZE="2"></FONT>
<P>OnMouseMove</P></TD>
<TD WIDTH="65%" VALIGN="TOP"><FONT SIZE="2"></FONT>
<P>El ratón pasa por encima del control.</P></TD></TR>
<TR>
<TD WIDTH="35%" VALIGN="TOP"><FONT SIZE="2"></FONT>
<P>OnMouseDown</P></TD>
<TD WIDTH="65%" VALIGN="TOP"><FONT SIZE="2"></FONT>
<P>Es pulsado un botón del ratón.</P></TD></TR>
<TR>
<TD WIDTH="35%" VALIGN="TOP"><FONT SIZE="2"></FONT>
<P>OnMouseUp</P></TD>
<TD WIDTH="65%" VALIGN="TOP"><FONT SIZE="2"></FONT>
<P>Es liberado el botón anteriormente pulsado</P></TD></TR></TABLE>
<P><FONT SIZE="2"></FONT></P>
<P> </P>
<P><B></B></P>
<P>Principales eventos de teclado.</P>
<P> </P>
<P ALIGN="LEFT"></P>
<TABLE BORDER="BORDER" CELLSPACING="1" CELLPADDING="4" WIDTH="406">
<TR>
<TD WIDTH="35%" VALIGN="TOP"><B><FONT SIZE="2"></FONT></B>
<P ALIGN="CENTER">Nombre</P></TD>
<TD WIDTH="65%" VALIGN="TOP"><B><FONT SIZE="2"></FONT></B>
<P ALIGN="CENTER">Acción</P></TD></TR>
<TR>
<TD WIDTH="35%" VALIGN="TOP"><FONT SIZE="2"></FONT>
<P>OnKeyPress</P></TD>
<TD WIDTH="65%" VALIGN="TOP"><FONT SIZE="2"></FONT>
<P>Es pulsada una tecla y se ha liberado</P></TD></TR>
<TR>
<TD WIDTH="35%" VALIGN="TOP"><FONT SIZE="2"></FONT>
<P>OnKeyDown</P></TD>
<TD WIDTH="65%" VALIGN="TOP"><FONT SIZE="2"></FONT>
<P>Una tecla ha sido pulsada.</P></TD></TR>
<TR>
<TD WIDTH="35%" VALIGN="TOP"><FONT SIZE="2"></FONT>
<P>OnKeyUp</P></TD>
<TD WIDTH="65%" VALIGN="TOP"><FONT SIZE="2"></FONT>
<P>La tecla anteriormente pulsada ha sido liberada</P></TD></TR></TABLE>
<P><B><FONT SIZE="2"></FONT></B></P>
<P> </P>
<P>Principales eventos del sistema.</P>
<P> </P>
<P ALIGN="LEFT"></P>
<TABLE BORDER="BORDER" CELLSPACING="1" CELLPADDING="4" WIDTH="406">
<TR>
<TD WIDTH="35%" VALIGN="TOP"><B><FONT SIZE="2"></FONT></B>
<P ALIGN="CENTER">Nombre</P></TD>
<TD WIDTH="65%" VALIGN="TOP"><B><FONT SIZE="2"></FONT></B>
<P ALIGN="CENTER">Acción</P></TD></TR>
<TR>
<TD WIDTH="35%" VALIGN="TOP"><FONT SIZE="2"></FONT>
<P>OnActivate</P></TD>
<TD WIDTH="65%" VALIGN="TOP"><FONT SIZE="2"></FONT>
<P>El formulario se activa, "toma el protagonismo"</P></TD></TR>
<TR>
<TD WIDTH="35%" VALIGN="TOP"><FONT SIZE="2"></FONT>
<P>OnClose</P></TD>
<TD WIDTH="65%" VALIGN="TOP"><FONT SIZE="2"></FONT>
<P>El formulario se cierra, "es hora de abandonar el barco".</P></TD></TR>
<TR>
<TD WIDTH="35%" VALIGN="TOP"><FONT SIZE="2"></FONT>
<P>OnCloseQuery</P></TD>
<TD WIDTH="65%" VALIGN="TOP"><FONT SIZE="2"></FONT>
<P>Se ha solicitado cerrar el formulario</P></TD></TR>
<TR>
<TD WIDTH="35%" VALIGN="TOP"><FONT SIZE="2"></FONT>
<P>OnCreate</P></TD>
<TD WIDTH="65%" VALIGN="TOP"><FONT SIZE="2"></FONT>
<P>El formulario se crea.</P></TD></TR>
<TR>
<TD WIDTH="35%" VALIGN="TOP"><FONT SIZE="2"></FONT>
<P>OnDesactive</P></TD>
<TD WIDTH="65%" VALIGN="TOP"><FONT SIZE="2"></FONT>
<P>El formulario pierde protagonismo, pero sigue existiendo.</P></TD></TR>
<TR>
<TD WIDTH="35%" VALIGN="TOP"><FONT SIZE="2"></FONT>
<P>OnDestroy</P></TD>
<TD WIDTH="65%" VALIGN="TOP"><FONT SIZE="2"></FONT>
<P>El formulario es destruido, es hora de devolverle la memoria usada a
Windows.</P></TD></TR>
<TR>
<TD WIDTH="35%" VALIGN="TOP"><FONT SIZE="2"></FONT>
<P>OnPaint</P></TD>
<TD WIDTH="65%" VALIGN="TOP"><FONT SIZE="2"></FONT>
<P>En formulario necesita ser pintado, porque algo ha cambiado en él.</P></TD></TR>
<TR>
<TD WIDTH="35%" VALIGN="TOP"><FONT SIZE="2"></FONT>
<P>OnResize</P></TD>
<TD WIDTH="65%" VALIGN="TOP"><FONT SIZE="2"></FONT>
<P>Ha cambiado el tamaño del formulario.</P></TD></TR></TABLE>
<P><FONT SIZE="2"></FONT></P>
<P> </P>
<P><B><FONT SIZE="6"></FONT></B></P>
<H1>Cuadros de Mensajes.</H1>
<P><FONT SIZE="2"></FONT></P>
<P>Tu primer programa no hace nada, simplemente muestra un texto un luego sale.
La verdad es que es un poco mal educado, porque cuando pulsas el botón
para salir, sale sin más. Quizás te hayas equivocado y deseabas
seguir, o cuando lo estabas cerrando llega alguien y quieres enseñarle tu
obra maestra de programación. La solución esta en preguntar al
usuario si esta seguro. Los programas sin que el usuario tome parte pues no
suelen ser muy agradables, y si una cosa tiene Windows es que se pasa el día
mostrando mensajes al usuario. </P>
<P>Por si estas aun algo despistado con el concepto de cuadro de Mensajes, te
comento que un cuadro de mensajes es esa ventanita que saca Windows cuando
decides salir de tu procesador de textos sin guardar los cambios, por ejemplo.
Te habrás fijado que no te deja otra opción que contestar, porque
sino este hará caso omiso. Esa característica de los cuadros de
mensajes se llama <B>Modal</B>, y en general es aplicable a todas las ventanas.
Cuando se activa una ventana modal el programa que invocó a esa ventana
se detiene en espera de que se cierre esta, y si es el caso devuelva un
resultado, que normalmente es la acción del usuario.</P>
<P>Los tipos de cuadros de mensajes que existen son:</P>
<UL>
<LI>ShowMessage</LI>
<LI>ShowMessagePos</LI>
<LI>MessageDlg</LI>
<LI>MessageDlgPos</LI>
<LI>MessageBox</LI></UL>
<P>ShowMessage es el más sencillo de todos ellos. El cuadro aparece por
defecto en el centro, el título del mismo es el nombre de la aplicación,
el texto lo indicamos nosotros, y tiene solo un botón. Vamos a probarlos,
en una aplicación nueva pon un boton, haz doble clic en él para
que aparezca el editor de código en el evento doble clic, y dentro de él
escribe esto: <EM>ShowMessage ('!Super cuadro a la vista!');</EM></P>
<P>Ejecuta la apliación y si todo va bien, al pulsar el botón
veras un cuadro en el centro de la apliación. Pulsa el boton y cierra la
aplicación, que vamos a compliacarlo un poquito más con una
variante de showMessage, que es ShowMessagePos.Esta tipo es igual al anterior
pero tiene dos detalles más, que son dos valores que indican las
coordenadas donde se mostrará el cuadro. Para indicar unas coordenadas
dentro de la pantalla tienes que conocer el tamaño de la misma. Esto se
puede obtener preguntando al sistema por el ancho y el largo de la pantalla. Hay
un objeto llamado Tscreen que contiene estas propiedades, pero no te voy a liar
la cabeza con cosas de programación orientada al objeto, si tienes algo
de conocimiento de programación "clásica" imaginate, en
este caso, que es algo así como un registro, sino tienes ni idea de esto,
pues simplemente piensa que es una función o un servicio de windows, como
los cuadros que estamos viendo, que los invocas y windows se ocupa de todo. Pues
a lo que iba, si pones Screen.Height, obtienes el valor del alto de la pantalla,
y lo mismo para Screen.Width pero para el ancho. </P>
<P>Así que el ShowMessagePos necesita que le indiques el texto, y además
las coordenas, primero el ancho y luego el largo. Añade un nuevo botón
al proyecto y en su evento dobleclic pon esta línea: <EM>ShowMessagePos
('Cuadro con Coordenadas', Screen.Width div 3,Screen.Height div 3);</EM> </P>
<P> Prueba el programa y veras que el cuadro sale en el centro, eso es porque
las coordenadas, prueba a cambiar estos datos. </P>
<P>La verdad es que mostrar un mensaje y no dejar que el probre usuario pueda
expresar su opinion al respecto es un poco dictador, así que para saber
lo que piensa al respecto pues nada mejor que un referendum. La posibilidad se
nos brinda con MessageDlg, pero por contra se complica un poco, pero no mucho.
De nuevo el primer dato que recibe la función es el texto que deseamos
mostrar, luego el tipo de cuadro que mostraremos segun una lista prédefinida
por windows, el tercero es son los botonos que se van a mostrar, y para terminar
el cuarto es indice que esta relacionado con la ayuda de la apliacción
que creemos si colocamos un botón de ayuda en el cuadro.</P>
<P>Los tipos de cuadro que exiten estan indicados en la lista que a continuacíon
muestro, ten en cuenta que según el tipo de cuadro windows pinta un icono
en tu cuadro, por ejemplo un cuadro de información mostrará un
icono de exclamación.</P>
<UL>
<LI>mtIformation</LI>
<LI>mtWarning</LI>
<LI>mtError</LI>
<LI>mtConfirmation</LI>
<LI>mtCustom</LI></UL>
<P>Los tipos de botones que podemos poner son los siguientes:</P>
<UL>
<LI>mbYes</LI>
<LI>mbNo</LI>
<LI>mbOk</LI>
<LI>mbCancel</LI>
<LI>mbAbort</LI>
<LI>mbRetry</LI>
<LI>mbIgnore</LI>
<LI>mbAll</LI>
<LI>mbHelp</LI></UL>
<P>Cuando pones los tipos de botones que deseas debes ponerlos entre corchetes
([ ]), y seguidos de una coma. Otra opción es poner un serie de botones
predefinidos, pero si lo haces no pongas los corchetes. Los tipos de botones
predefinidos son:</P>
<UL>
<LI>mbYesNoCancel</LI>
<LI>mbAbortRetryIgnore</LI>
<LI>mbOkCancel</LI></UL>
<P>Pon otro botón en el proyecto y escribe dentro de su evento doble
clik lo siguiente:<BR><EM>If MessageDlg ('¿Es chuli mi apliaciación?',
mtwarning,[mbyes,mbno],0) = mrYes Then ShowMessage ('¡Guai!') <BR>
else<BR> ShowMessage ('Mal amigo');</EM></P>
<P>Observa que aqui hay más novedades, y es que MessageDlg deuvelve el
valor del botón pulsado por el usuario. El valor devuelto es una
constante que puede tomar los siguientes valores:</P>
<UL>
<LI>mrNone</LI>
<LI>mrAbort</LI>
<LI>mrYes</LI>
<LI>mrOk</LI>
<LI>mrRetry</LI>
<LI>mrNo</LI>
<LI>mrCancel</LI>
<LI>mrIgnore</LI>
<LI>mrAll</LI></UL>
<P>Observa que el valor de la constante tiene el nombre del botón
pulsado, así en el ejemplo cuando es pulsado el botón mbYes, el
valor devuelto es mrYes. Ten cuidado no vallas a esperar la pulsación de
un botón que nos has puesto en el cuadro, porque nunca te devolverá
ese valor la función. Un inciso para los lectores con menos
conocimientos, y es una breve explicación de la instrucción If.<BR>La
instrucción if comprueba condiciones, así en el ejemplo estoy
evaluando el valor que existe a la derecha del if, con el de la izquierda. Si
la condición es igual ejecuta la linea que ahi inmediatamente debajo, en
otro caso (else) ejecuta la linea que hay despues del else.Tambien se puede
omitir el else, pero no tendriamos una segunda alternativa. Para más
información mira la ayuda de delphi, o un libro de metodología de
la programación si es que no tienes conocimientos previos de programación.
</P>
<P>La variante de MessageDlg es MessageDlgPos, que es igual pero tiene un par
de datos más, que es, al igual que ShowMessagePos, las coordenadas donde
se situará el cuadro cuando se muestre. Su formato es: <BR>MessageDlgPos
('texto',tipo de cuadro,botones,indice de ayuda, coordenada X, coordenada Y);</P>
<P>Te habrás dado cuenta que todos estos cuadros estan en inglés,
pero tenemos la opción de ponerlos en castellano, y es usando
MessageBox, pon esta linea en otro boton:<BR><EM>Application.MessageBox
('Mensaje','Titulo',mb_okCancel+mb_IconExclamation);</EM><BR>Fijate de nuevo el
mensaje a mostrar, luego el titulo, despues los botones que queremos poner, y el
icono también a nuestra voluntad. No voy a entrar en detalles sobre este
tipo de cuadro, ya que este individuo es una llamada a la api de windows, ese es
el motivo porque saque los textos de los botones en castellanos, si lo pruebas
sin cambiar nada en un ordenador con un windows en otro idioma, los botones
saldran en ese otro idioma.</P>
<P>Fiajate que si deseas comprobar el tipo de boton que devuelve la función
debes usar estas constantes, no las anteriores:<BR></P>
<UL>
<LI>IdAbort</LI>
<LI>IdCancel</LI>
<LI>IdIgnore</LI>
<LI>IdNo</LI>
<LI>IdOk</LI>
<LI>IdRetry</LI>
<LI>IdYes</LI></UL>
<P>Los botones que puedes utilizar son solo las combinaciones de botones
predefinidas que listé más arriba. Y los tipos de iconos son:<BR></P>
<UL>
<LI>Mb_IconAsterisk</LI>
<LI>Mb_IconError</LI>
<LI>Mb_IconExclamation</LI>
<LI>Mb_iconHand</LI>
<LI>Mb_IconInformation</LI>
<LI>Mb_IconQuestion</LI>
<LI>Mb_IconStop</LI>
<LI>Mb_IconWarning</LI></UL>
<P>En esta página has aprendido los cuadros de mensajes predefinidos, la
próxima página explica como hacer un cuadro de dialogo propio, que
funciona igual que estos, pero le puedes poner lo que quieras. Ahora si quieres
puedes bajar los ficheros de un programa que realiza todo lo que he explicado
aqui. Te invito a que experimentes todas las variaciones que se te ocurran sobre
los ejemplos que he puesto. </P>
<HR>
<P><A
HREF="uno.htm" Target="centro"><IMG SRC="atras.gif" BORDER="0"></A><A HREF="ventana.htm" Target="centro"><IMG
SRC="sigue.gif" BORDER="0"></A></P>
<P>17 de Noviembre de 1997</P></BODY></HTML>
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -