Array
(
)

FindWindow e Memo

Paulocesar1301
   - 22 fev 2006

Pessoal... não sei mais que fazer... estou na faze final de um sistema de mensagens interno em minha empresa e estou apanhando dos sockets:

Meu código no server:

if sCommand = ´MSG´ then
begin
Try
wnd := FindWindow(nil, ´QCP Mensageiro 1.0´);
if wnd <> 0 then
begin
wnd := FindWindowEx(wnd, 0, PChar(´NxMemo´), nil);
AuxS := LowerCase(EnviadoPor) + ´ diz:´ + #13 + Mensagem + 13;
For i := 1 to Length(s) do
SendMessage(wnd, WM_CHAR, Word(s[i]), 0);

PostMessage(wnd, WM_KEYDOWN , VK_RETURN, 0);
end;
Finally
AThread.Connection.Disconnect;
End;
End;

O problema é que ele não consegue ´achar´ a bendita classe do memo que estou usando... já testei com edit normal, memo normal e tb não funciona... tem algo errado com esse código ???

Plz help me !

tkz


Citação:
Título editado por Massuda

Original: ´Sockets me dando uma coça !!!!´



Crash
   - 22 fev 2006

Creio que vc tenha q procurar a classe e nao o nome do objeto.

Entao seria ao Inves de Memo1, seria TMemo.


t+


Paulocesar1301
   - 22 fev 2006

Tentei a classe TNxMemo mas tb não tinha funcionado !

Alguém tem alguma idéia ?


Crash
   - 22 fev 2006

eu teria que ver o contexto... mais porque vc envia comandos de teclado para o memo e nao envia o texto para o memo? esse memo eh em outra aplicação? E o memo que vc ta tentando procurar eh um TMemo ou TNxMemo? Essa classe TNxMemo foi vc quem fez? explica direito q eu posso te ajudar.


t+


Paulocesar1301
   - 22 fev 2006

TNxMemo é a classe do ´TMemo´ do NextGrid... uma coleção de componentes que estou utilizando... mas básicamente é igual... (obs: tentei até com um memo comum e não consegui)

O NxMemo está em outra aplicação com o nome de MemoMensagens (bem básico!), mas o mesmo não recebe nem texto nem comando de teclado, na verdade... ele nem é encontrado, pois o handle vem zerado !!


Rafael Gomes
   - 22 fev 2006

olá amigo,
provavelmente o erro esta nessa linha

wnd := FindWindowEx(wnd, 0, PChar(´NxMemo´), nil);


procure no google pela palavra WinDowse.
este programa tem varios recursos interessantes e pode te ajudar a resolver seu problema.

[]ss


Nildo
   - 22 fev 2006

Porque você não pode deixar o form do Memo dentro da aplicação que recebe os dados do chat?

Assim, você não vai conseguir localizar ele pois ele é um Child. Você tem que localizar Child por Child, por exemplo:

hJanela := FindWindow( ´TSeuFormulario´, nil );
hMemo := FindWindowEx( hJanela, 0, ´TMemo´, nil );

dai sim você usa o handle localizado pelo hMemo.
Eu não lembro exatamente de cór os parâmetros dessas APIs mas to com o Delphi fechado, dai num pude testar..


Paulocesar1301
   - 23 fev 2006

o grande detalhe é que são sistemas diferentes... e precisam continuar assim por problemas outros...

vou procurar esse tal de ´WinDowse´ pra ver no que dá... vlw!

Se alguém ainda tiver alguma idéia... ou eu mesmo se achar algo nesse ´WinDowse´ do Rafa... eu posto para loucos como eu não terem o mesmo problema !!!


Paulocesar1301
   - 24 fev 2006

É povo... o WinDowse indicou a classe que eu já colocava (TNxMemo)... simplesmente não tenho mais idéias !!


Nildo
   - 24 fev 2006


Citação:
É povo... o WinDowse indicou a classe que eu já colocava (TNxMemo)... simplesmente não tenho mais idéias !!


Porque não tenta o que eu disse?


Rafael Gomes
   - 24 fev 2006

nildo, nao entendi sua sugestão ... ele nao esta fazendo exatamente o que voce sugeriu?? :roll:

[]ss


Nildo
   - 24 fev 2006


Citação:
nildo, nao entendi sua sugestão ... ele nao esta fazendo exatamente o que voce sugeriu?? :roll:

[]ss


Não está, bom, pelo menos ele nao falou se testou ou não o FindWindowEx.
É que o FindWindow funciona assim: ele localiza uma janela que não tenha parent. Então, se você tem um Memo dentro de um Form, primeiro você deve achar o handle do Form assim:

#Código

hForm := FindWindow( ´TSeuForm´, ´Seu formulário´ );
hMemo := FindWindowEx( hForm, 0, ´TNxMemo´, nil );


O FindWindowEx, como eu exemplifiquei, vai localizar uma janela Child. Seu Memo nada mais é do que um Child da janela Pai: O Formulário.

Agora dá para você ter uma idéia do que deve ser feito. Um programinha que pode te ajudar é o WinSpy, vc faz um Drag&Drop de uma imagem dentro dele para a janela que você quer e ele te informa a classe do child e do parent dele. (download: http://www.codeproject.com/threads/winspy.asp e baixe o Demo, tem apenas 20kb)

Qualquer coisa estamos ai


Rafael Gomes
   - 24 fev 2006

codigo do paulo cesar

#Código

wnd := FindWindow(nil, ´QCP Mensageiro 1.0´); 
if wnd <> 0 then
begin
wnd := FindWindowEx(wnd, 0, PChar(´NxMemo´), nil);



#Código
hForm := FindWindow( ´TSeuForm´, ´Seu formulário´ ); 
hMemo := FindWindowEx( hForm, 0, ´TNxMemo´, nil );


o que eu vi de diferente foi o nil na chamada de FindWindow e o parametro de FindWindowEx que realmente esta incorreto ...
o certo seria como o proprio nildo disse ´TNxMemo´ e nao ´NxMemo´

... agora aproveitando o topico, há algum tempo eu postei algo similar ao conteudo deste topico, mas ninguem se prontificou a ajudar

tenho uma aplicação x desenvolvida em delphi que deve enviar textos para uma aplicação y que é um emulador de terminais ...

tentei de todas as formas mas sem sucesso ...
abaixo esta a estrutura do emulador ...

[img:932f7c9256]http://www.ellas.com.br/fcunha/est.jpg[/img:932f7c9256]

a janela para qual necessito enviar o texto é EmuMdiChild

sugestoes sao bem vinda!! :lol:


Nildo
   - 24 fev 2006

Rafael Gomes, sobre sua dúvida, se você conseguiu localizar o Handle dela (handle<>0), e o SetWindowText não teve efeito, então ele deve ser um componente criado sem suporte ao wm_text do Windows.


Rafael Gomes
   - 24 fev 2006

nesse caso voce nao teria alguma sugestao??


Nildo
   - 24 fev 2006


Citação:
nesse caso voce nao teria alguma sugestao??


Não.. Eu não consigo manipular componentes que não usam mensagens do Windows


Paulocesar1301
   - 24 fev 2006

pessoal,
agradeço muito a boa vontade, mas os testes de classe foram feitos sim... coloquei a classe correta ´TNxMemo´, mas não funciona de maneira alguma... o FindWindowEx não acha o bendito


Nildo
   - 24 fev 2006


Citação:
pessoal,
agradeço muito a boa vontade, mas os testes de classe foram feitos sim... coloquei a classe correta ´TNxMemo´, mas não funciona de maneira alguma... o FindWindowEx não acha o bendito


Faz assim, com aquele programa que eu citei, o WinSpy, jogue o ´alvo´ em cima do seu Memo, e veja qual o parent dele.. Dai você usa o FindWindowEx pra achar o parent e depois pra achar ele. E veja se a classe é TNxMemo mesmo, pelo WinSpy