Form sem receber focus

Delphi

15/01/2009

Bom dia pessoal, eu tenho uma aplicação que envia caracteres para outras aplicações por meio de mensagens.

Está tudo perfeito....mas tem uma coisa q eu quero fazer e não consigo...

Qdo eu clico no botão da minha aplicação para enviar um caracter, o meu form ganha focus e qdo ele envia o caracter a outra aplicação tbm ganha focus...e então fica essa troca d focus....o meu form está como fsStayOnTop....eu vi algumas aplicações q não tem esse problema...

Essas aplicações ficam sempre a frente das outras aplicações, mas qdo vc clica nelas, as mesma nunca ganham focus...

alguém sabe como eu posso fazer isso???


Estou usando o Delphi7

Mt obrigado a todos


Wdrocha

Wdrocha

Curtidas 0

Respostas

Micheus

Micheus

15/01/2009

Essas aplicações ficam sempre a frente das outras aplicações, mas qdo vc clica nelas, as mesma nunca ganham focus...

[b:236bd8c2f1]WDRocha[/b:236bd8c2f1], não lembro de ter visto algo assim (a aplicação ficar ativa sem ganhar o foco). Agora uma coisa que sei acontece, seria tendo sua aplicação uma tela principal e uma outra tela (esta tipo um teclado virtual - stay on top) se clicar em outra aplicação, a sua janela (stay on top) fica emcoberta, ou seja, ela fica apenas sobre todas as janelas da sua aplicação.
Então, em um caso destes, supondo que esta janela devesse ficar sobre todas as outras aplicações também, este efeito poderia ser obtido definindo como [i:236bd8c2f1]Parent[/i:236bd8c2f1] deste form o [i:236bd8c2f1]DeskTop[/i:236bd8c2f1]. Isto é feito usando a função da API SetParent (unit windows) e passando o handle do desktop que é obtido por outra função da API chamada [i:236bd8c2f1]GetDesktopWindow[/i:236bd8c2f1].

Tenho um exemplo disto neste link: [URL=http://www.4shared.com/file/80795590/72dd4299/Form_no_topo_de_todas_as_aplicacoes.html]Form no topo de todas as aplicacoes.zip[/URL]


GOSTEI 0
Wdrocha

Wdrocha

15/01/2009

Boa tarde Micheus....

eu consegui fazer....

passei um email para o Nildo e ele me deu uma dica...ele me falow sobre a função CreateParams...

eu procurei um pouco e encontrei....

consegui...

é para ficar como o teclado virtual do Windows...se vc prestar atenção qdo vc clica em algum botão do mesmo...o focus do teclado continua na janela ativa....e o focus nunca vai para o teclado....

mt obrigado cara.....

fico grato pela ajuda....


vlw


GOSTEI 0
Woinch

Woinch

15/01/2009

Olá WDRocha, poderia postar o código para que os outros usuários possam ver também como funciona?

Achei muito interessante seu tópico.

Abraços.


GOSTEI 0
Wdrocha

Wdrocha

15/01/2009

Olá WDRocha, poderia postar o código para que os outros usuários possam ver também como funciona? Achei muito interessante seu tópico. Abraços.


Claro q sim....com esta função e com a função KEYBD_EVENT é possível fazer um teclado virtual...

type
  TForm1 = class(TForm)
  private
    { Private declarations }
  protected
    procedure CreateParams(var Params: TCreateParams); override;
  public
    { Public declarations }
  end;

procedure TForm1.CreateParams(var Params: TCreateParams);
const
  WS_EX_NOACTIVATE = $8000000;
begin
  inherited;
  Params.ExStyle := Params.ExStyle + WS_EX_NOACTIVATE;
end;




Espero ter ajudado e ter contribuído para o conhecimento dos colegas..

qualquer coisa...eu dou um exemplo d como fazer isso..


flw..


GOSTEI 0
Woinch

Woinch

15/01/2009

Fiz um teste aqui... Muito legal. Isso pode ser muito útil para diversas coisas.

Obrigado pela dica.


GOSTEI 0
Wdrocha

Wdrocha

15/01/2009

Blz...qdo vc tiver uma idéia legal...posta aew tbm... :-)

abraços...


GOSTEI 0
POSTAR