Jump to content
Fórum Script Brasil
  • 0

Problema 2 Aplicações X Mouse


McBlade
 Share

Question

4 answers to this question

Recommended Posts

  • 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 to comment
Share on other 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 to comment
Share on other 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 to comment
Share on other 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:

Edited by McBlade
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share



  • Forum Statistics

    • Total Topics
      151k
    • Total Posts
      649.1k
×
×
  • Create New...