Muitas pessoas pensam que o Delphi é uma ferramenta RAD, inclusive eu, que era tendencioso contra o Delphi quando estava na escola. Agora que saí da "torre de marfim", ele cobriu uma gama mais ampla de áreas e encontrou mais problemas, e. Aos poucos ganhei meu próprio ponto de vista. Na verdade, Delphi é uma ferramenta de desenvolvimento baseada na linguagem Object Pascal, o que significa que Delphi é essencialmente uma ferramenta de linguagem e é verdadeiramente orientada a objetos. O exemplo que dou abaixo é um miniaplicativo de bandeja implementado em Delphi. O programa é curto e conciso, com um contexto claro. Explicarei as partes principais em detalhes. Assim como o Sr. Hou Junjie descascando o MFC camada por camada, hoje também tenho que “cozinhar o boi”.
No Delphi, quando se trata de programação de sistema, as funções API devem ser chamadas sem exceção. Existem protótipos das funções API a serem usadas na unidade ShellAPI.pas.
Exercícios práticos:
um. Crie uma nova aplicação: Arquivo->Nova Aplicação. Defina uma constante de mensagem na seção Interface: const WM_NID=WM_USER+1000 O sistema estipula que as mensagens para os usuários podem ser customizadas a partir de WM_USER;
dois. Defina uma variável global: NotifyIcon:TNotifyIconData é uma variável muito importante. Todo o programa gira basicamente em torno desta variável. TNotifyIconData é um tipo de registro. Mantenha pressionada a tecla Ctrl e clique duas vezes em TNotifyIconData para entrar na unidade ShellAPI.pas. (Nota: No Delphi, esta é uma maneira muito boa de analisar o código-fonte. O código-fonte fala por si. Se você quiser conhecer a história por trás do programa, a melhor maneira é analisar o código-fonte!) Neste vez, aparece o seguinte Declaração de atribuição:
TNotifyIconData = TNotifyIconDataA, este significado é muito óbvio, ou seja, TNotifyIconData e TNotifyIconDataA são do mesmo tipo de dados, e então olhe para baixo:
TNotifyIconDataA = _NOTIFYICONDATAA, o significado é o mesmo de antes, olhe para baixo:
tipo
_NOTIFYICONDATAA = registro
cbTamanho: DWord;
Wnd: HWND;
uID: UINT;
uFlags: UINT;
uCallbackMessage: UINT;
hÍcone: HICON;
szTip: array [0..63] de AnsiChar;
fim;
Isso é realmente “sair depois de ser chamado por muito tempo, mas ainda segurando a pipa meio escondendo o rosto”. Agora todos estão muito claros. A variável global NotifyIcon que acabamos de definir é na verdade uma variável de tipo de registro contendo 7 componentes, que é equivalente à variável de estrutura em C/C++ (os programadores de C/C++ devem estar bem familiarizados com ela). Vamos explicar as funções de cada uma das sete partes do tipo de registro, uma por uma.
1> cbSize é o tamanho da variável NotifyIcon que você definiu, que pode ser obtida usando SizeOf(TNotifyIconData). Se você é um programador C/C++ qualificado, deve estar familiarizado com ela. Em C/C++, sempre que você quiser alocar memória para uma variável de estrutura, você deve usar SizeOf(Struct type) para saber quanta memória é necessária para armazenar tal variável de estrutura.
2> Wnd é um identificador. Qual formulário você deseja que as mensagens geradas pelo programa de bandeja manipulem?
Por exemplo: quando você quiser clicar no pequeno ícone da bandeja da barra de tarefas para alternar o formulário entre “mostrar” e “ocultar”, aponte para o formulário principal.
3> uID: Se você deseja criar vários miniaplicativos de bandeja, como distingui-los? É diferenciado por este número de identificação.
3> uFlags é um bit de sinalização que indica as propriedades do programa de bandeja atualmente criado:
NIF_ICON indica que o ícone definido atualmente (ou seja, o valor de hIcon) é válido
NIF_MESSAGE indica que a mensagem do sistema atualmente definida (ou seja, o valor de uCallBackMessage) é válida
NIF_TIP indica que a barra de dicas atualmente definida (ou seja, o valor de szTip) é válida.
4> uCallBackMessage Esta é a mais importante entre as 7 partes. Especifique aqui uma mensagem de retorno de chamada, ou seja, defina um nome de mensagem aqui. Ao clicar ou clicar com o botão direito no ícone da bandeja, um nome de mensagem definido em uCallBackMessage será enviado para o formulário apontado por Wnd, e então você define um. função de saída de mensagem no programa para processar esta mensagem. Desta forma, todo o conjunto de mensagens relacionadas ao Windows é processado.
6> hIcon é o identificador do ícone da bandeja. Com base nesse identificador, você pode adicionar, modificar e excluir ícones.
7> szTip é a mensagem de prompt que aparece quando o mouse é colocado sobre o pequeno ícone na bandeja da barra de tarefas.
Aqui gastei muita tinta apresentando a história interna do TNotifyIconData. Assim que esta parte for esclarecida, o resto se encaixará.
três. Clique duas vezes no formulário principal para entrar na área de código do FormCreate:
TForm1.FormCreate(Remetente:TObject);
Começar
//NotifyIcon é uma variável global e foi definida no início do programa
com NotifyIcon faça
começar
cbSize:=SizeOf(TNotifyIconData);
Wnd:=Handle; //Handle apontando para o formulário atual Form1
uID:=1;
uFlags:=NIM_ICON ou NIM_MESSAGE ou NIM_TIP;
uCallBackMessage:=WM_NID;
hIcon:=aplicativo.Icon.Handle;
szTip:=”O jovem malvado da família Zhang”;
fim;.
//Adiciona a variável definida NotifyIcon ao sistema para processamento
Shell_NotifyIcon(NIM_ADD,@NotifyIcon);
Fim;
Quatro. O próximo passo é definir uma função de processamento de mensagens: quando o sistema envia uma mensagem para o formulário, ela é processada pela seguinte função. Cada função de processamento de mensagens processa um determinado tipo de mensagem. Observe mais de perto a diferença entre a definição do corpo da função abaixo e a definição geral da função: a função de processamento de mensagens deve adicionar o nome da mensagem no final, para que quando o sistema envia Quando uma mensagem WM_NID chega, a função de processamento de mensagens WMNID é acionada automaticamente.
PRocedure WMNID(var msg:TMessage);mensagem WM_NID;
começar
caso msg.LParam de
WM_LBUTTONUp;Form1.Visible:=não Form1.Visible;
WM_RBUTTONUP: ShowMessage('Você clicou com o botão direito');
Fim;
Fim;
Bem, nasceu o programa mais simples. Todos podem definir seus ícones favoritos.
Projeto->Opções, selecione a página Aplicativo e carregue seu ícone favorito no item Ícone, para que quando o programa estiver sendo executado, seu ícone favorito seja exibido na barra de tarefas. Ao clicar no ícone, o formulário Form1 irá alternar entre visível e invisível, ou seja, clique para exibi-lo e clique novamente para ocultá-lo. Ao clicar com o botão direito no ícone, uma mensagem aparecerá: "Você clicou com o botão direito."
cinco. Por fim, lembre-se de liberar o programa da bandeja criado ao fechar o aplicativo, caso contrário ele ocupará recursos do sistema.
TForm1.FormDestroy(Remetente:TObject);
Começar
Shell_NotifyIcon(NIM_DELETE,@NotifyIcon);
Fim;
Já se passou quase meio ano desde que me formei. Ainda não consigo entender muitas coisas na escola e meu entendimento não é profundo o suficiente. Quando saio para a sociedade, conheci muitos amigos taoístas e me beneficiei muito. sempre que tenho uma experiência, sempre quero escrevê-la em palavras para resumir o que aprendi. Em segundo lugar, vamos nos comunicar com todos.
E_Mail: [email protected] QQ: 8133413 O bad boy da família Zhang