A rotina abaixo passa por todos os eventos onkeydown dos componentes inseridos em qualquer TFrame que esteja no Formulário.
Claro que, teoricamente, pq eu não testei, hehehehe. procedure TfPrincipal2.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); var VKey : Word; VShift : TShiftState; Contador, Contador2 : Integer; begin VKey := Key; VShift := Shift; For Contador := 0 to ComponentCount 1 do begin If Components[ Contador ] is TFrame then begin For Contador2 := 0 to TFrame( Components[ Contador ] ).ComponentCount -1 do Begin If Assigned( TFrame( Components[ Contador ] ).Components[ Contador2 ].OnKeyDown ) then TFrame( Components[ Contador ] ).Components[ Contador2 ].OnKeyDown( SELF, VKey, VShift ) End End end end ---------------------------------------------- Vitor Luiz Redes ---------------------------------------------- Bureau & Redsystem Software [EMAIL PROTECTED] _____ De: delphi-br@yahoogrupos.com.br [mailto:[EMAIL PROTECTED] Em nome de Guionardo Furlan Enviada em: quinta-feira, 14 de fevereiro de 2008 14:21 Para: delphi-br@yahoogrupos.com.br; [EMAIL PROTECTED] Assunto: [delphi-br] Propagar message entre form e frame contido no form O subject ficou uma droga, por isso vou tentar explicar melhor aqui. Tenho um form principal, com um PageControl e alguns TabSheets. Em cada TabSheet, há um frame com os módulos do aplicativo. Em alguns frames (que não tem o evento onkeypress/down/up) existem componentes como TMenuItem ou TEdits que respondem a eventos de teclado. Até aí tudo bem. Mas quando, no form principal, o foco está fora do componente do frame, não há resposta aos atalhos de teclado. Então, pensei em colocar um evento onkeypress ou onkeydown no form principal e passar uma mensagem para o frame que está no tabsheet ativo, com a tecla pressionada. Achei alguma coisa com sendmessage e perform, mas não deu muito certo (erro de estouro de pilha) no fonte abaixo. procedure TfPrincipal2.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); begin if Key = VK_F6 then begin if not Assigned(fPrincipal) then Application.CreateForm(TfPrincipal, fPrincipal); fPrincipal.ShowModal; end else if Pages.ActivePage=tsJogos then FDj.Perform(WM_KEYDOWN,Key,0); FDj é o frame contido no tabsheet tsJogos Alguma idéia do que fazer? Grato pela ajuda. -- Timeo hominem unius libri Cogito ergo sum - Carpe diem []s Guionardo Furlan http://guionardo. <http://guionardo.blogspot.com> blogspot.com [As partes desta mensagem que não continham texto foram removidas]