GARANTIR DESCONTO

Fórum Envio de mensagems para o Windows PostMessage #344043

03/08/2007

0

Tenho uma classe aonde tenho como componentes... ENtre les um Edit

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

Marco Salles

Responder

Posts

03/08/2007

Massuda

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?


Responder

Gostei + 0

03/08/2007

Marco Salles

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


Responder

Gostei + 0

03/08/2007

Massuda

Explique melhor que tipo de processamento você quer fazer através da mensagem. Eventualmente, é melhor usar um timer.


Responder

Gostei + 0

07/08/2007

Marco Salles

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


Responder

Gostei + 0

09/08/2007

Marco Salles

up...

:cry: :cry: :cry:


Responder

Gostei + 0

09/08/2007

Massuda

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.


Responder

Gostei + 0

10/08/2007

Marco Salles

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..


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar