Com aplicativos de desktop (Windows), um caixa de mensagem (caixa de diálogo) é usado para alertar o usuário do aplicativo de que alguma ação precisa ser executada, que alguma operação foi concluída ou, em geral, para chamar a atenção dos usuários.
Dentro Delphi, existem várias maneiras de exibir uma mensagem para o usuário. Você pode usar qualquer uma das mensagens prontas que exibem rotinas fornecidas no RTL, como ShowMessage ou InputBox; ou você pode criar sua própria caixa de diálogo (para reutilização): CreateMessageDialog.
Um problema comum com todas as caixas de diálogo acima é que elas requer que o aplicativo esteja ativo para ser exibido ao usuário. "Ativo" refere-se a quando seu aplicativo tem o "foco de entrada".
Se você realmente quer chamar a atenção do usuário e impedi-lo de fazer qualquer outra coisa, você precisa ser capaz de exibir uma caixa de mensagem superior do sistema-modal, mesmo quando seu aplicativo não estiver ativo.
Caixa de mensagens superior ao sistema-modal
Mesmo que isso possa parecer complicado, na realidade não é.
Como o Delphi pode acessar facilmente a maioria das chamadas da API do Windows, executar a função da API do Windows "MessageBox" fará o truque.
Definido na unidade "windows.pas" - a incluída por padrão na cláusula uses de todos os formulários Delphi, a Caixa de mensagem A função cria, exibe e opera uma caixa de mensagem. A caixa de mensagem contém uma mensagem e um título definidos pelo aplicativo, juntamente com qualquer combinação de ícones e botões predefinidos.
Veja como a MessageBox é declarada:
função Caixa de mensagem(
hWnd: HWND;
lpText,
lpCaption: PAnsiChar;
uType: Cardinal): inteiro;
O primeiro parâmetro, hwnd, é o identificador da janela do proprietário da caixa de mensagem a ser criada. se você criar uma caixa de mensagem enquanto uma caixa de diálogo estiver presente, use um identificador para a caixa de diálogo como o hWnd parâmetro.
o lpText e lpCaption especifique a legenda e o texto da mensagem que é exibido na caixa de mensagem.
Última é a uType parâmetro e é o mais interessante. Este parâmetro especifica o conteúdo e o comportamento da caixa de diálogo. Este parâmetro pode ser uma combinação de vários sinalizadores.
Exemplo: Caixa de aviso modal do sistema quando a data / hora do sistema é alterada
Vamos dar uma olhada em um exemplo de criação de uma caixa de mensagem superior modal do sistema. Você vai lidar com a mensagem do Windows despachado para todos os aplicativos em execução quando o alterações de data / hora do sistema- por exemplo, usando o miniaplicativo "Painel de controle de propriedades de data e hora".
A função MessageBox será chamada como:
Janelas. Caixa de mensagem(
lidar com,
'Esta é uma mensagem modal do sistema' # 13 # 10 'de um aplicativo inativo',
'Uma mensagem de um aplicativo inativo!',
MB_SYSTEMMODAL ou MB_SETFOREGROUND ou MB_TOPMOST ou MB_ICONHAND);
A peça mais importante é o último parâmetro. O "MB_SYSTEMMODAL ou MB_SETFOREGROUND ou MB_TOPMOST" garante que a caixa de mensagem seja modal do sistema, superior e se torne a janela do primeiro plano.
- MB_SYSTEMMODAL O sinalizador garante que o usuário responda à caixa de mensagem antes de continuar o trabalho na janela identificada pelo parâmetro hWnd.
- MB_TOPMOST O sinalizador especifica que a caixa de mensagem deve ser colocada acima de todas as janelas não superiores, e deve permanecer acima delas, mesmo quando a janela estiver desativada.
- MB_SETFOREGROUND O sinalizador garante que a caixa de mensagem se torne a janela em primeiro plano.
Aqui está o código de exemplo completo (TForm chamado "Form1" definido na unidade "unit1"):
unidade Unidade 1;
interface
usa
Windows, Mensagens, SysUtils, Variantes, Classes,
Gráficos, controles, formulários, caixas de diálogo, ExtCtrls;
tipo
TForm1 = classe(TForm)
privado
procedimento WMTimeChange (var Msg: TMessage); mensagem WM_TIMECHANGE;
público
{Declarações públicas}
fim;
var
Formulário1: TForm1;
implementação{$ R * .dfm}
procedimento TForm1.WMTimeChange (var Msg: TMessage);
início
Janelas. Caixa de mensagem(
lidar com,
'Esta é uma mensagem modal do sistema' # 13 # 10 'de um aplicativo inativo',
'Uma mensagem de um aplicativo inativo!',
MB_SYSTEMMODAL ou MB_SETFOREGROUND ou MB_TOPMOST ou MB_ICONHAND);
fim;
fim.
Tente executar este aplicativo simples. Verifique se o aplicativo está minimizado ou pelo menos se algum outro aplicativo está ativo. Execute o applet do painel de controle "Propriedades de data e hora" e altere a hora do sistema. Assim que você pressionar o botão "Ok" (no applet), a caixa de mensagem superior modal do sistema do seu aplicativo inativo será exibida.