... Caros colegas, nessa semana estive com uma questão que gostaria de compartilhar;
Tenho um formulário, dentro do mesmo tenho um botão e no onClick do botão tenho o seguinte código;
var
MeuBotao: TButton;
begin
MeuBotao:= TButton.create(Self)
try
MeuBotao.parent:= Self;
MeuBotao.Caption:= 'Jucelio Moura';
MostraCaptionBotao(MeuBotao);
finally
MeuBotao.free;
end;
end;
Tenho uma procedure chamada MostraCaptionBotao
procedure MostraCaptionBotao(ABotao: TButton);
begin
ShowMessage(ABotao.Caption);
end;
Até ai tudo bem, porém sei que posso instanciar TButton dessa forma;
with TButton.Create(Self) do
begin
try
Parent:= Self;
Caption:= 'Jucelio Moura';
MostraCaptionBotao(?);
finally
free;
end;
end;
- O que passo como parâmetro para MostraCaptionBotao ?, Self nesse caso é o formulário.
- A solução é a seguinte;
with TButton.Create(Self) do
begin
try
Parent:= Self;
Caption:= 'Jucelio Moura';
MostraCaptionBotao(TButton(Self.Components[ComponentIndex]));
finally
Free;
end;
end;
... Olá galerinha, que ama programação, estou voltando, consegui organizar meu tempo, será um compromisso atualizar o blog...
- 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...