Envio de mensagems para o Windows PostMessage
Tenho uma classe aonde tenho como componentes... ENtre les um Edit
Pois bem , utilizo esse Edit como ponteiro para o Edit do Formulario que faz a chamada ...
Preciso fazer algum processamento no Evento Onchange.. Porém Alem desse processamento preciso mandar uma mesagem para posteriormente ser processada pelo Windows...
procedure TMinhaClass.WmUser(var msg: TMessage);
begin
//Processar qualquer coisa
end;
e em algum método da minha classe , envio a mensagem
So que não estou conseguindo enviar esta mensagem de dentro da minha Classe
Isto é .... Compila , mas os codigo não é executado...
P:S Uso como Handle o Handle do Formulario Chamador... Passo Form1.Handle como Parametro ???
[b:2dd190821b]Pergunto : O que çao estou fazendo ou o que estou fazendo de Errado[/b:2dd190821b]
:?: :?: :?: :?:
Type
TMinhaClass = Class
private
myEdit:Edit;
procedure EventosOnChange(sender:Tobject);
[b:2dd190821b] Procedure WmUser(var msg:TMessage); message wm_user;[/b:2dd190821b]public
Constructor Create(p:Parametros);
etcc...
end;
Pois bem , utilizo esse Edit como ponteiro para o Edit do Formulario que faz a chamada ...
Preciso fazer algum processamento no Evento Onchange.. Porém Alem desse processamento preciso mandar uma mesagem para posteriormente ser processada pelo Windows...
procedure TMinhaClass.WmUser(var msg: TMessage);
begin
//Processar qualquer coisa
end;
e em algum método da minha classe , envio a mensagem
procedure Da Minha Classe
begin
[b:2dd190821b]postMessage(Handle,Wm_User,0,0);[/b:2dd190821b]
end;
So que não estou conseguindo enviar esta mensagem de dentro da minha Classe
Isto é .... Compila , mas os codigo não é executado...
P:S Uso como Handle o Handle do Formulario Chamador... Passo Form1.Handle como Parametro ???
[b:2dd190821b]Pergunto : O que çao estou fazendo ou o que estou fazendo de Errado[/b:2dd190821b]
:?: :?: :?: :?:
Marco Salles
Curtidas 0
Respostas
Massuda
03/08/2007
O código que vc mostrou não vai funcionar. Antes mais nada, sua idéia é que [b:70d87dd577]sua[/b:70d87dd577] classe receba a mensagem ou a mensagem é destinada a algum form?
GOSTEI 0
Marco Salles
03/08/2007
código que vc mostrou não vai funcionar. Antes mais nada, sua idéia é que sua classe receba a mensagem ou a mensagem é destinada a algum form?
veja , na minha classe tem um edit.. Este edit nada mais é do que um ponteir para o edit do form
Este edit Associo a um evento onChange..
Tem tb o Evento OnkeyDow , que é acionado primeiro que o evento
OnChange do Edit..
Ai que entra a mensagem : Preciso capturar o valor do Edit.text , apos o evento OnChange
Tipo isto:
No evnto OnKeyDown escrevo
If [b:95546da3e5]Condicao Especial [/b:95546da3e5]then
begin
enviar uam mensagem para ser processada com um certo Delay
end;
Evento OnChange é processado... Pois Teclas foram pressionadas no Edit
No fim Capturo e processo a mensagem
[b:95546da3e5]é este ultimo passo que não estou conseguindo [/b:95546da3e5], quando encapsulo o codigo original numa classe :cry: :cry: :cry: :cry:
Muito obrigado massuda
GOSTEI 0
Massuda
03/08/2007
Explique melhor que tipo de processamento você quer fazer através da mensagem. Eventualmente, é melhor usar um timer.
GOSTEI 0
Marco Salles
03/08/2007
Explique melhor que tipo de processamento você quer fazer através da mensagem. Eventualmente, é melhor usar um timer.
com timer eu ja tinha feito e deu beleza.. Mas não estou conseguindo endenter como fazer usando mensagems
Suponha esta classe em uma Unit
Type
TmyEdit = class
private
handle:THandle;
procedure Wmuser(var mes:TMessage);message Wm_User;
public
procedure Change(Sender: TObject);
constructor Create(edt:Tedit;Handle:Thandle);
destructor Destroy; Override;
end;
implementation
uses Unit1;
{ TmyEdit }
var
componente:TEdit;
procedure TmyEdit.Change(Sender: TObject);
begin
if Tedit(sender).Text = ´´ Then
begin
Showmessage(´vazio´);
componente:=(sender as Tedit);
postMessage(Handle,Wm_User,0,0);
end;
end;
constructor TmyEdit.Create(edt:Tedit;Handle:Thandle);
begin
Tedit(edt).OnChange:=Change;
end;
destructor TmyEdit.Destroy;
begin
inherited;
end;
[b:a7501474ce]procedure TmyEdit.Wmuser(var mes: TMessage);
begin
[color=red:a7501474ce]Quero Aqui Alterar o Valor do Text Do Edit 1 Do Form1[/color:a7501474ce]
Pensei que puderia fazer com o Codigo
TEdit(Componente).text:=´Qualquer coisa;
Mas esta linha não é executada...
end;[/b:a7501474ce]
No Form Principal
var myEdit:TMyEdit; procedure TForm1.Button1Click(Sender: TObject); begin myEdit:=TmyEdit.Create(edit1,Form1.Handle); end;
Obrigado massuda
GOSTEI 0
Marco Salles
03/08/2007
up...
:cry: :cry: :cry:
:cry: :cry: :cry:
GOSTEI 0
Massuda
03/08/2007
O problema básico é que sua classe não implementa um loop de mensagens e nem possui uma tabela de despacho de mensagens.
O primeiro problema pode ser resolvido atraves das funções relacionadas a loop de mensagens do Windows ou derivando sua classe de algum componente visual, já que toda janela (no sentido Windows) possui um loop de mensagens. O segundo problema só pode ser contornado se você derivar sua classe de um componente visual.
Independente do que fizer, isso já adiciona complexidade e consumo de recursos do SO que acho não ser justificável para uma classe que trata um OnChange de um edit. Se for muito importante fazer isso, eventualmente seria melhor escrever seu próprio edit.
O primeiro problema pode ser resolvido atraves das funções relacionadas a loop de mensagens do Windows ou derivando sua classe de algum componente visual, já que toda janela (no sentido Windows) possui um loop de mensagens. O segundo problema só pode ser contornado se você derivar sua classe de um componente visual.
Independente do que fizer, isso já adiciona complexidade e consumo de recursos do SO que acho não ser justificável para uma classe que trata um OnChange de um edit. Se for muito importante fazer isso, eventualmente seria melhor escrever seu próprio edit.
GOSTEI 0
Marco Salles
03/08/2007
Independente do que fizer, isso já adiciona complexidade e consumo de recursos do SO que acho não ser justificável para uma classe que trata um OnChange de um edit.
sim massuda.. Mas levantei esta questão porque me deparei com este problema e não consegui resolver.. Como eu disse anteriormente com o timer foi tranquilo...Mas acho que aprender a tecnica pode ser interressante em situações aonde se deve de fato usar este tipo de procedimento
sua classe não implementa um loop de mensagens e nem possui uma tabela de despacho de mensagens.
eu não tenho idéia de como fazer isto :cry: :cry: :cry:
obrigado..
GOSTEI 0