- Começarei com um pequeno exemplo de utilização de mensagens do windows;
(O segundo form é chamado em modal, utilizarei mensagens para ativar métodos da tela anterior).
- Crie dois forms e uma unit.
- Fonte do exemplo:
unit u_principal;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, StdCtrls, u_ativa, u_constantes;
type
Tf_principal = class(TForm)
btn_abrirForm: TButton;
lbl_tempo: TLabel;
tmr_tempo: TTimer;
lbl_Mensagem: TLabel;
edt_mensagem: TEdit;
procedure tmr_tempoTimer(Sender: TObject);
procedure btn_abrirFormClick(Sender: TObject);
private
{ Private declarations }
procedure AtivaDesativaCronometro(var Msg: TMessage); message WM_ATIVACRONOMETRO;
procedure DesativaDesativaCronometro(var Msg: TMessage); message WM_DESATIVACRONOMETRO;
procedure MensagemRecebida(var Msg: TMessage); message WM_ENVIAMENSAGEM;
public
{ Public declarations }
end;
var
f_principal: Tf_principal;
implementation
{$R *.dfm}
procedure Tf_principal.AtivaDesativaCronometro(var Msg: TMessage);
begin
tmr_tempo.Enabled:= True;
end;
procedure Tf_principal.btn_abrirFormClick(Sender: TObject);
begin
Tf_ativa.CriaForm(Self.Handle);
end;
procedure Tf_principal.DesativaDesativaCronometro(var Msg: TMessage);
begin
tmr_tempo.Enabled:= False;
end;
procedure Tf_principal.MensagemRecebida(var Msg: TMessage);
begin
msg.Result := 1;
edt_mensagem.Text:= PChar(msg.lParam);
end;
procedure Tf_principal.tmr_tempoTimer(Sender: TObject);
begin
lbl_tempo.Caption:= IntToStr(StrToIntDef(lbl_tempo.Caption, 0) + 1);
end;
end.
unit u_ativa;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, u_constantes;
type
Tf_ativa = class(TForm)
btn_AtivaCronometro: TButton;
btn_mandaMensagem: TButton;
edt_mensagem: TEdit;
procedure btn_AtivaCronometroClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure btn_mandaMensagemClick(Sender: TObject);
private
FHandleAnterior: THandle;
FStatusCronometro: Boolean;
procedure SetHandleAnterior(const Value: THandle);
procedure SetStatusCronometro(const Value: Boolean);
{ Private declarations }
public
{ Public declarations }
class procedure CriaForm(const AHandle: THandle);
property HandleAnterior: THandle read FHandleAnterior write SetHandleAnterior;
property StatusCronometro: Boolean read FStatusCronometro write SetStatusCronometro default False;
end;
var
f_ativa: Tf_ativa;
implementation
{$R *.dfm}
{ TForm2 }
procedure Tf_ativa.btn_AtivaCronometroClick(Sender: TObject);
begin
StatusCronometro:= not StatusCronometro;
if StatusCronometro then
SendMessage(HandleAnterior, WM_ATIVACRONOMETRO, 0, 0)
else
SendMessage(HandleAnterior, WM_DESATIVACRONOMETRO, 0, 0)
end;
procedure Tf_ativa.btn_mandaMensagemClick(Sender: TObject);
begin
SendMessage(HandleAnterior, WM_ENVIAMENSAGEM, 0, DWORD(PChar(Trim(edt_mensagem.Text))));
end;
class procedure Tf_ativa.CriaForm(const AHandle: THandle);
begin
with Self.Create(Application) do
begin
try
HandleAnterior:= AHandle;
ShowModal;
finally
Free;
end;
end;
end;
procedure Tf_ativa.FormCreate(Sender: TObject);
begin
FStatusCronometro:= False;
end;
procedure Tf_ativa.SetHandleAnterior(const Value: THandle);
begin
FHandleAnterior := Value;
end;
procedure Tf_ativa.SetStatusCronometro(const Value: Boolean);
begin
FStatusCronometro := Value;
end;
end.
unit u_constantes;
interface
uses
Messages;
const
WM_ATIVACRONOMETRO = WM_APP + 500;
WM_DESATIVACRONOMETRO = WM_APP + 501;
WM_ENVIAMENSAGEM = WM_APP + 502;
implementation
end.
>> Qualquer duvida é só postar..., fiz esse post com um pouco de pressa, tentarei melhorar nos próximos, obrigado, até a próxima...
Nenhum comentário:
Postar um comentário