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 |