Ir para conteúdo
Fórum Script Brasil
  • 0

Problema 2 Aplicações X Mouse


McBlade

Pergunta

4 respostass a esta questão

Posts Recomendados

  • 0

opa

da uma olhada nesse exemplo

The 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=18590

voce precisa ter uma conta, se não tiver é só criar...

repara o KeyPad, ele nunca pega focus...

abraço

Link para o comentário
Compartilhar em outros sites

  • 0

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.

Link para o comentário
Compartilhar em outros sites

  • 0

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;

Link para o comentário
Compartilhar em outros sites

  • 0

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 por McBlade
Link para o comentário
Compartilhar em outros sites

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.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152k
    • Posts
      651,8k
×
×
  • Criar Novo...