Por asterion, hace 11 años y 5 meses

Programando con APIS en Delphi cap.02

Leido 8567 veces

Advertisements

Message Box

En el próximo programa usaremos las famosas MessageBox para lograr alguna intervención del usuario. Si ahora buscamos la función en el Win32s Programmer's References, encontraremos sus parámetros y su forma de uso:
int MessageBox(

HWND hWnd, // handle of owner window, osea el handle de la ventana principal
LPCTSTR lpText, // address of text in message box, osea el texto en la ventana
LPCTSTR lpCaption, // address of title of message box , el titulo de la ventana
UINT uType // style of message box, se refiere al estilo que tendra la ventana
);

El primer parámetro es el nombre de la ventana principal de nuestro programa, ya que una vez que cerremos el messagebox el systema le dará el enfoque de teclado a la ventana que se encuentre especificada acá; si no tenemos una ventana después de ella ponemos el valor a 0. Los dos parámetros cuya funcion esta especificada en el comentario que puse al lado son del tipo PChar. El cuarto parámetro es de tipo cardinal, en el podemos incluso usar valores numéricos usando las banderas. Hay básicamente 2 parámetros que debemos incluir en esta zona, el primero es el tipo de Botón que tendrá la ventana y el segundo es el tipo de Icono. Ahora veamos el código de un messagebox:
MessageBox(hMainWindow, 'Hay un error en alguna parte',' Error', MB_OK or MB_ICONERROR);
Esto creara una ventana con un botón de OK y con el icono de Error. Si por ejemplo usásemos los parámetros «MB_OKCANCEL or MB_ICONQUESTION» generaremos un botón de OK, un botón de CANCELAR y un icono de signo de Interrogación. Pero existen muchas formas de usar los Messageboxes, si leemos la ayuda de Delphi encontraremos los parámetros que debemos incluir para controlar la forma de despliegue de la ventana, los botones y los iconos; podemos divertirnos probando cada una de ellas.
Usando las banderas
Se pueden usar en lugar del cuarto parámetro valores numéricos que tengan el mismo resultado. En el fichero window.pas algunas de las Banderas de los messagesboxes se definen asi:
const
MB_OK = $00000000;
MB_OKCANCEL = $00000001;
MB_ABORTRETRYIGNORE = $00000002;
MB_YESNOCANCEL = $00000003;
MB_YESNO = $00000004;
MB_RETRYCANCEL = $00000005;

MB_ERROR = $00000010;
MB_ICONQUESTION = $00000020;
MB_ICONWARNING = $00000030;
MB_ICONASTERISK = $00000040;

MB_DEFBUTTON1 = $00000000;
MB_DEFBUTTON2 = $00000100;
MB_DEFBUTTON3 = $00000200;

MB_APPLMODAL = $00000000;
MB_SYSTEMMODAL = $00001000;
MB_TASKMODAL = $00002000;
El valor numérico de MB_OK, MB_DEFBUTTON1 y MB_APPLMODAL son todos igual a 0 (hex $00000000). Esto es porque todos éstas son opciones de la función Predefinidas, mientras que poniendo el MB_OK en el parámetro u omitiéndolo, realmente no cambie el valor pero le da un indicador en su código de lo que la función hará. vamos con un poco de código para entender esto:
MessageBox(hWindow,'Tenemos un error', ' ERROR', MB_OK or MB_ICONERROR);
O
MessageBox(hWindow,'Tenemos un error', ' ERROR', 16); //16 es el valor en decimal de MB_ERROR = $00000010;
Podemos usar el OR para sumar propiedades que queramos darle a nuestros botones por ejemplo:
MB_OKCANCEL or MB_ERROR or MB_OKCANCEL es igual a 17
1 or 16 or 1 = 17 , , , pero
MB_OKCANCEL + MB_ERROR + MB_OKCANCEL es igual a 18
1 + 16 + 1 = 18
Si queremos un messagebox con 4 botones en él, un botón de «OK» y un botón de la Cancelación y un «Sí» el botón y un «No», para lo que usaríamos «MB_OKCANCEL or MB_YESNO or MB_ERROR». Esto no produciría una messagebox con 4 botones, lo que usted conseguiría es solo 2 botones, un botón del Reintento y un botón de la Cancelación. ¿Y eso por qué? porque MB_OKCANCEL or MB_YESNO es igual a 5 (1 or 4 = 5) y 5 es el valor constante de Reintento y boton de Cancelación. ¿Qué si usted combinara el MB_OKCANCEL or MB_YESNOCANCEL, qué botones conseguiríamos? Si usted piensa que serian los botones de «SI» y «NO» (MB_YESNO = 4) estaría equivocado, porque «1 or 3 = 3». El «OR» trabaja en forma binaria (bit), el decimal «1 or 3» es binario «0001 o 0011», (para esto debemos leer un poco sobre operaciones binarias) y tenemos que el bit 0001 ya se encuentra en 0011 por lo que no lo podemos poner alli de nuevo. Así que debemos usar sólo una sola bandera. Esto es por qué en la ayuda de las API dice «Especifique una de las banderas siguientes para indicar los botones contenidos en la caja del mensaje (o messagebox): » Muchos de los valores están ya combinados tendrán los valores del bitmask de 0, 1, 2, 4, 8, 16, 32, 64, 128, 256, etc... Esto es por que las constantes se definen en Hexadecimal en el cual es mas fácil de ver las relaciones binarias que si lo tuviésemos en decimal.

No hay comentarios

Sé el primero en escribir un comentario a esta entrada.

Escribir un comentario

Si quieres añadir tu comentario a esta entrada, simplemente rellena el siguiente formulario:





* Campos requeridos

Puedes usar estas etiquetas XHTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>.

No hay trackbacks

Para notificar de una mención en tu blog a esta entrada, habilita la notificación automática (Opciones > Discusión en WordPress) o especifica esta url de trackback: http://​asterion.almadark.com/​2006/​11/​16/​programando-con-apis-en-delphi-cap02/​trackback/