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