Mucha gente piensa que Delphi es una herramienta RAD, incluyéndome a mí, que tenía prejuicios contra Delphi cuando estaba en la escuela. Ahora que salí de la "torre de marfil", cubrió una gama más amplia de áreas y encontró más problemas. Poco a poco he ido adquiriendo mi propio punto de vista. De hecho, Delphi es una herramienta de desarrollo basada en el lenguaje Object Pascal, lo que significa que Delphi es esencialmente una herramienta de lenguaje y está verdaderamente orientada a objetos. El ejemplo que doy a continuación es un subprograma de bandeja implementado en Delphi. El programa es breve y conciso, con un contexto claro. Explicaré las partes clave en detalle. Al igual que el Sr. Hou Junjie pelando el MFC capa por capa, hoy yo también tengo que "cocinar el buey".
En Delphi, cuando se trata de programación de sistemas, las funciones API deben llamarse sin excepción. Existen prototipos de las funciones API que se utilizarán en la unidad ShellAPI.pas.
Ejercicios prácticos:
uno. Cree una nueva aplicación: Archivo->Nueva aplicación Defina una constante de mensaje en la sección Interfaz: const WM_NID=WM_USER+1000 El sistema estipula que los mensajes se personalizan para los usuarios a partir de WM_USER.
dos. Defina una variable global: NotifyIcon: TNotifyIconData. NotifyIcon es una variable muy importante. Básicamente, todo el programa gira en torno a esta variable. TNotifyIconData es un tipo de registro. Mantenga presionada la tecla Ctrl y haga doble clic en TNotifyIconData para ingresar a la unidad ShellAPI.pas. (Nota: en Delphi, esta es una muy buena manera de analizar el código fuente. El código fuente habla por sí solo. Si desea conocer la historia interna detrás del programa, ¡la mejor manera es analizar el código fuente!) Al mismo tiempo, aparece lo siguiente Declaración de asignación:
TNotifyIconData = TNotifyIconDataA, este significado es muy obvio, es decir, TNotifyIconData y TNotifyIconDataA son del mismo tipo de datos, y luego mire hacia abajo:
TNotifyIconDataA = _NOTIFYICONDATAA, el significado es el mismo que antes, mira hacia abajo:
tipo
_NOTIFYICONDATAA = registro
cbTamaño: DWord;
Viento: HWND;
uID: UINT;
uFlags: UINT;
uMensaje de devolución de llamada: UINT;
hIcono: HICON;
szTip: matriz [0..63] de AnsiChar;
fin;
Esto realmente es "salir después de haber sido llamado durante mucho tiempo, pero aún sosteniendo la pipa medio ocultando la cara". Ahora todo el mundo lo tiene muy claro. La variable global NotifyIcon que acabamos de definir es en realidad una variable de tipo registro que contiene 7 componentes, que es equivalente a la variable de estructura en C/C++ (los programadores de C/C++ deberían estar muy familiarizados con ella). Expliquemos las funciones de cada una de las siete partes del tipo de registro una por una.
1> cbSize es el tamaño de la variable NotifyIcon que definiste, que se puede obtener usando SizeOf(TNotifyIconData). Si eres un programador experto en C/C++, deberías estar familiarizado con ella. En C/C++, siempre que desee asignar memoria para una variable de estructura, debe usar SizeOf (tipo de estructura) para saber cuánta memoria se necesita para almacenar dicha variable de estructura.
2> Wnd es un identificador. ¿Qué formulario desea que manejen los mensajes generados por el programa de bandeja? Simplemente deje que Wnd apunte a ese formulario.
Por ejemplo: cuando desee hacer clic en el pequeño icono de la bandeja en la barra de tareas para cambiar el formulario entre "mostrar" y "ocultar", apunte Wnd al formulario principal.
3> uID: si desea crear varios subprogramas de bandeja, ¿cómo distinguirlos? Se distingue por este número de identificación.
3> uFlags es un bit de bandera, que indica las propiedades del programa de bandeja creado actualmente:
NIF_ICON indica que el icono configurado actualmente (es decir, el valor de hIcon) es válido
NIF_MESSAGE indica que el mensaje del sistema configurado actualmente (es decir, el valor de uCallBackMessage) es válido
NIF_TIP indica que la barra de sugerencias actualmente configurada (es decir, el valor de szTip) es válida.
4> uCallBackMessage Esta es la más importante de las 7 partes. Especifique un mensaje de devolución de llamada aquí, es decir, defina un nombre de mensaje aquí. Cuando hace clic o hace clic con el botón derecho en el icono de la bandeja, se enviará un nombre de mensaje definido en uCallBackMessage al formulario señalado por Wnd, y luego usted define un. función de salida de mensaje en el programa para procesar este mensaje. De esta forma se procesa todo el conjunto de mensajes relacionados con Windows.
6> hIcon es el identificador del ícono de la bandeja. Según este identificador, puede agregar, modificar y eliminar íconos.
7> szTip es el mensaje emergente que aparece cuando se coloca el mouse sobre el pequeño ícono en la bandeja de la barra de tareas.
Aquí he dedicado mucha tinta a presentar la historia interna de TNotifyIconData. Una vez que se aclare esta parte, el resto encajará.
tres. Haga doble clic en el formulario principal para ingresar al área de código de FormCreate:
TForm1.FormCreate(Remitente:TObject);
Comenzar
//NotifyIcon es una variable global y se ha definido al principio del programa
con NotifyIcon hacer
comenzar
cbSize:=TamañoDe(TNotifyIconData);
Wnd:=Handle; //Manejador que apunta al formulario actual Form1
uID:=1;
uFlags:=NIM_ICON o NIM_MESSAGE o NIM_TIP;
uCallBackMessage:=WM_NID;
hIcon:=aplicación.Icon.Handle;
szTip:=”El joven malvado de la familia Zhang”;
fin;.
//Agrega la variable establecida NotifyIcon al sistema para su procesamiento
Shell_NotifyIcon(NIM_ADD,@NotifyIcon);
Fin;
Cuatro. El siguiente paso es definir una función de procesamiento de mensajes: cuando el sistema envía un mensaje al formulario, es procesado por la siguiente función. Cada función de procesamiento de mensajes procesa un determinado tipo de mensaje. Observe más de cerca la diferencia entre la definición del cuerpo de la función a continuación y la definición de función general: la función de procesamiento de mensajes debe agregar el nombre del mensaje al final, para que cuando el sistema envía Cuando llega un mensaje WM_NID, la función de procesamiento de mensajes WMNID se activa automáticamente.
Procedimiento WMNID(var msg:TMessage);mensaje WM_NID;
comenzar
caso msg.LParam de
WM_LBUTTONUp; Formulario1.Visible:=no Formulario1.Visible;
WM_RBUTTONUP: ShowMessage('Hiciste clic en el botón derecho');
Fin;
Fin;
Bueno, nace el programa más simple. Cada uno puede configurar el icono que desee.
Proyecto->Opciones, seleccione la página Aplicación y cargue su ícono favorito en el elemento Icono, de modo que cuando el programa se esté ejecutando, su ícono favorito se muestre en la barra de tareas. Al hacer clic en el icono, el formulario Form1 cambiará entre visible e invisible, es decir, haga clic para mostrarlo y haga clic nuevamente para ocultarlo. Cuando hace clic derecho en el icono, aparece un mensaje: "Hiciste clic en el botón derecho".
cinco. Por último, recuerda liberar el programa de la bandeja creado al cerrar la aplicación, de lo contrario ocupará recursos del sistema.
TForm1.FormDestroy(Remitente:TObject);
Comenzar
Shell_NotifyIcon(NIM_DELETE,@NotifyIcon);
Fin;
Ha pasado casi medio año desde que me gradué. Todavía no puedo entender muchas cosas en la escuela y mi comprensión no es lo suficientemente profunda. Cuando salgo a la sociedad, he conocido a muchos amigos taoístas y me he beneficiado mucho. Cada vez que tengo una experiencia, siempre quiero escribirla con palabras para resumir lo que he aprendido. En segundo lugar, comuniquémonos con todos.
Correo electrónico: [email protected] QQ: 8133413 El chico malo de la familia Zhang