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]

Responder a