McBlade Postado Dezembro 1, 2006 Denunciar Share Postado Dezembro 1, 2006 Seguinte... Eu tenho a minha aplicação em FormStyle StayOnTop mas eu gostaria que quando você clicasse com o mouse nela, o foco continuasse na aplicação anterior... Como fazer?? Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Churc Postado Dezembro 1, 2006 Denunciar Share Postado Dezembro 1, 2006 opada uma olhada nesse exemploThe example shows how to create and use a form that acts as a virtual numeric keypad. "-> The form is topmost and will not take the focus when clicked upon. <-"Clicks on its "buttons" will create key events that go to whatever control in the active window that has the focus.http://codecentral.borland.com/Item.aspx?id=18590voce precisa ter uma conta, se não tiver é só criar...repara o KeyPad, ele nunca pega focus...abraço Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Thales Pontes Martins Postado Dezembro 1, 2006 Denunciar Share Postado Dezembro 1, 2006 você pode também processar a menssagem WM_ACTIVATE. Se sua janela recebe essa mensagem com Low WParam igual a WA_ACTIVE ou WA_CLICKACTIVE então não passe essa mensagem ao WindowProc da janela e mande uma mensagem WM_ACTIVATE para o handle indicado em LParam com Low WParam igual a WA_CLICKACTIVE, High WParam igual a 0 e LParam igual ao handle da sua janela. dessa forma sua janela nunca terá foco.Mate a mensagem WM_ACTIVATEAPP por via das dúvidas também. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Micheus Postado Dezembro 1, 2006 Denunciar Share Postado Dezembro 1, 2006 Thales, seria algo assim?procedure TForm1.WndProc(var Message: TMessage); begin case Message.Msg of WM_ACTIVATEAPP : begin Message.Result := 0; Exit; end; WM_ACTIVATE : case Message.WParamLo of WA_ACTIVE, WA_CLICKACTIVE : begin PostMessage(Message.LParam, Message.Msg, WA_ACTIVE, Handle); Message.Result := 0; Exit; end; end; WM_MOUSEACTIVATE : begin Message.Result := MA_NOACTIVATEANDEAT; // MA_NOACTIVATE Exit; end; end; inherited; end; É o que eu tinha testado, mas o melhor que consegui foi não ativar com o click do mouse. E mesmo assim, o foco não volta para a aplicação anterior (nem enviando WM_SETFOCUS). Quando a janela é apresentada na execução do programa ela ganha o foco; Quando você clica no icone dela na barra de tarefas, ela tambem ganha o foco. Que será que tá errado? Naquele exemplo postado pelo Churc, basicamente o form (keypad) é criado com:Procedure TNumericKeypad.CreateParams(var params: TCreateparams); Begin inherited; params.style := params.style and not WS_CAPTION; params.exstyle := params.exstyle and WS_EX_NOACTIVATE; End; { TNumericKeypad.CreateParams } e manipula duas mensagens:Procedure TNumericKeypad.WMMouseActivate(var msg: TWMMouseActivate); Begin msg.Result := MA_NOACTIVATEANDEAT; FMouseDown := true; End; { TNumericKeypad.WMMouseActivate } Procedure TNumericKeypad.WMEnable(var msg: TWMEnable); Begin inherited; If not msg.enabled Then EnableWindow( handle, true ); End; Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 McBlade Postado Dezembro 1, 2006 Autor Denunciar Share Postado Dezembro 1, 2006 (editado) O funcionamento do KeyPad é exatamente o que eu queria, ele mantém o foco da minha outra janela, porém, o meu programa é uma espécie de um contador que ficará no canto próximo ao relógio então ele é apenas uma janela só...-------Fechei galera no OnMouseMove:Cursor := crNone;então quando a pessoa parar o mouse em cima do form o mouse some e ela não poderá clicá-lo... conseqüentemente não há foco... Agora só falta esconder do Alt+Tab :lol: Editado Dezembro 1, 2006 por McBlade Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
McBlade
Seguinte... Eu tenho a minha aplicação em FormStyle StayOnTop mas eu gostaria que quando você clicasse com o mouse nela, o foco continuasse na aplicação anterior... Como fazer??
Link para o comentário
Compartilhar em outros sites
4 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.