Windows - mensagens

Top  Previous  Next

Todo descendente de TControl possui um método chamado WndProc.

Este método é a rotina da janela ( Window Proc ), ou seja, é o endereço

passado na rotina que registra a classe da janela ( RegisterClass - API ).

Ela é o tratador padrão de todas as mensagens que são endereçadas

ao controle ( Window ).

 

Caso vc queira interceptar alguma mensagen, mas não quer criar "event Handlers",

ou mesmo, não sabe, basta que vc crie o seguinte:

 

Uma propriedade ( variável ) do tipo TWndMethod

Um método ( procedure ) do tipo: procedure (var Message: TMessage)

 

No Oncreate vc joga na propriedade TWndMethod o enderço de WndProc,

e atribui a WndProc o endereço do método.

 

Exemplo:

 

Public

  OldWndProc: TWndMethod;

  Procedure NewWndProc(var Message: TMessage);

End;

 

..OnCreate(..)

Begin

  OldWndProc := Form1.WndProc;

  Form1.WndProc := NewWndProc;

End;

 

Método Novo:

 

procedure TForm1.NewWndProc(var Message: TMessage);

begin

  if Message.Msg = WM_PAINT then

    Begin

       // Interceptei a WM_PAINT

    End

  else  // O Else é opcional - Só use se for tratar a mensagem vc mesmo, sem

          // que o Windows trate

    OldWndProc(Message);  // Chamo a original,para as msgs que não quero

                                         // tratar

end;

 

Para enviar uma mensagem pode usar o Perform, o PostMessage ou o SendMessage

Vc pode criar tuas mensagens também ex:

 

SAULO_MINHA_MSG = WM_USER + 1;

 

E tratá-la como outra qualquer do Windows, mas esse assunto deixa pro tio Italo

explicar