⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dos.htm

📁 manual de delphi!!!!!!!!!!!!!!!!
💻 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&aacute;s sobre mensajes y eventos</TITLE></HEAD>
<BODY BGCOLOR="ffffff">

<P><B><FONT SIZE="6"></FONT></B></P>

<H1>M&aacute;s sobre mensajes y eventos.</H1>
<P><FONT SIZE="2"></FONT></P>
<P>Hasta ahora pr&aacute;cticamente no has programado nada, pero no desesperes,
porque lo poco que has aprendido hace referencia a la base de toda programaci&oacute;n
en Windows, los mensajes y sus eventos.</P>
<P>Te habr&aacute;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&uacute;n esto hay tres grandes bloques de eventos, que b&aacute;sicamente
todos los controles reaccionan a ellos, hay algunos que reaccionan a todos y
otros a algunos, tambi&eacute;n los hay que tiene sus propios eventos aparte de
estos.</P>
<P>&nbsp;</P>
<P><B></B></P>
<P>Principales eventos rat&oacute;n</P>
<P>&nbsp;</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&oacute;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&oacute;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&oacute;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&oacute;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&oacute;n del rat&oacute;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&oacute;n anteriormente pulsado</P></TD></TR></TABLE>
<P><FONT SIZE="2"></FONT></P>
<P>&nbsp;</P>
<P><B></B></P>
<P>Principales eventos de teclado.</P>
<P>&nbsp;</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&oacute;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>&nbsp;</P>
<P>Principales eventos del sistema.</P>
<P>&nbsp;</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&oacute;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, &quot;toma el protagonismo&quot;</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, &quot;es hora de abandonar el barco&quot;.</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 &eacute;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&ntilde;o del formulario.</P></TD></TR></TABLE>
<P><FONT SIZE="2"></FONT></P>
<P>&nbsp;</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&oacute;n
para salir, sale sin m&aacute;s. Quiz&aacute;s te hayas  equivocado y deseabas
seguir, o cuando lo estabas cerrando llega alguien y quieres ense&ntilde;arle tu
obra maestra de programaci&oacute;n. La soluci&oacute;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&iacute;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&aacute;s fijado que no te deja otra opci&oacute;n que contestar, porque
sino este har&aacute; caso omiso. Esa caracter&iacute;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&oacute; 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&oacute;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&aacute;s sencillo de todos ellos. El cuadro aparece por
defecto en el centro, el t&iacute;tulo del mismo es el nombre de la aplicaci&oacute;n,
el texto lo indicamos nosotros, y tiene solo un bot&oacute;n. Vamos a probarlos,
en una aplicaci&oacute;n nueva pon un boton, haz doble clic en &eacute;l para
que aparezca el editor de c&oacute;digo en el evento doble clic, y dentro de &eacute;l
escribe esto: <EM>ShowMessage ('!Super cuadro a la vista!');</EM></P>
<P>Ejecuta la apliaci&oacute;n y si todo va bien, al pulsar el bot&oacute;n
veras un cuadro en el centro de la apliaci&oacute;n. Pulsa el boton y cierra la
aplicaci&oacute;n, que vamos a compliacarlo un poquito m&aacute;s con una
variante de showMessage, que es ShowMessagePos.Esta tipo es igual al anterior
pero tiene dos detalles m&aacute;s, que son dos valores que indican las 
coordenadas donde se mostrar&aacute; el cuadro. Para indicar unas coordenadas
dentro de la pantalla tienes que conocer el tama&ntilde;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&oacute;n orientada al objeto, si tienes algo
de conocimiento de programaci&oacute;n &quot;cl&aacute;sica&quot;  imaginate, en
este caso, que es algo as&iacute; como un registro, sino tienes ni idea de esto,
pues simplemente piensa que es una funci&oacute;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&iacute; que el ShowMessagePos necesita que le indiques el texto, y adem&aacute;s
las coordenas, primero el ancho y luego el largo. A&ntilde;ade un nuevo bot&oacute;n
al proyecto y en su evento dobleclic pon esta l&iacute;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&iacute; 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&oacute;n es el texto que deseamos
mostrar, luego el tipo de cuadro que mostraremos segun una lista pr&eacute;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&oacute;n
que creemos si colocamos un bot&oacute;n de ayuda en el cuadro.</P>
<P>Los tipos de cuadro que exiten estan indicados en la lista que a continuac&iacute;on
muestro, ten en cuenta que seg&uacute;n el tipo de cuadro windows pinta un icono
en tu cuadro, por ejemplo un cuadro de informaci&oacute;n mostrar&aacute;  un
icono de exclamaci&oacute;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&oacute;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&oacute;n en el proyecto y escribe dentro de su evento doble
clik lo siguiente:<BR><EM>If MessageDlg ('&#191;Es chuli mi apliaciaci&oacute;n?',
mtwarning,[mbyes,mbno],0) = mrYes Then     ShowMessage ('&#161;Guai!')  <BR>  
else<BR>     ShowMessage ('Mal amigo');</EM></P>
<P>Observa que aqui hay m&aacute;s novedades, y es que MessageDlg deuvelve el
valor del bot&oacute;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&oacute;n
pulsado, as&iacute; en el ejemplo cuando es pulsado el bot&oacute;n mbYes, el
valor devuelto es mrYes. Ten cuidado no vallas a esperar la pulsaci&oacute;n de
un bot&oacute;n que nos has puesto en el cuadro, porque nunca te devolver&aacute;
ese valor la funci&oacute;n. Un inciso para los  lectores con menos
conocimientos, y es una breve explicaci&oacute;n de la instrucci&oacute;n If.<BR>La
instrucci&oacute;n if comprueba condiciones, as&iacute; en el ejemplo estoy
evaluando el valor que existe a la derecha del if,  con el de la izquierda. Si
la condici&oacute;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&aacute;s
informaci&oacute;n mira la ayuda de delphi, o un libro de metodolog&iacute;a de
la programaci&oacute;n si es que no tienes conocimientos previos de programaci&oacute;n.
 </P>
<P>La variante de MessageDlg es MessageDlgPos, que es igual pero tiene un par
de datos m&aacute;s, que es, al igual que ShowMessagePos, las coordenadas donde
se situar&aacute; 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&aacute;s dado cuenta que todos estos cuadros estan en ingl&eacute;s,
pero tenemos la opci&oacute;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&eacute;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&oacute;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&eacute; m&aacute;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&aacute;gina has aprendido los cuadros de mensajes predefinidos, la
pr&oacute;xima p&aacute;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 + -