Fórum Como passar qualquer form para dentro de um procedure? #191366
29/10/2003
0
Já tentei o seguinte procedure
procedure Teste(sender : TObject);
begin
with sender as TForm do
showmessage(´O nome é ´ + name);
end;
Tudo o obtenho é um ´Access violation´!! :cry:
Este procedure está numa unit comum a várias aplicações e não tem nada de visual.
Se puderem ajudar verão o rosto de bacalhau grato!!!
Abraço
bacalhau
Bacalhau
Curtir tópico
+ 0Posts
29/10/2003
Jaguarnet7
pra instanciar o objeto.
Gostei + 0
29/10/2003
Bacalhau
Este procedure tem como função abrir uma tabela e ler algumas propriedades que o form deverá ter (fontes, cores, tamanhos, posições, etc).
Finalmente deverá aplicar essas propriedades ao form que foi passado como parametro.
Gostei + 0
29/10/2003
Marcelo Saviski
procedure Teste(Sender : TForm); begin if Assigned(Sender) then with sender do showmessage(´O nome é ´ + name); end;
ou
procedure Teste(Sender : TObject); begin if Assigned(Sender) then if Sender is TForm then with TForm(Sender) do showmessage(´O nome é ´ + name); end;
ou
procedure Teste(Sender : TObject); begin if Assigned(Sender) then if Sender is TForm then with Sender as TForm do showmessage(´O nome é ´ + name); end;
Gostei + 0
29/10/2003
Josemarlourenco
Uma pergunta básica:
Antes de enviar o Form para a procedure, você criou o objeto (criou uma instância deste form)?
Exemplo:
Var FrmCliente: TFrmCliente;
Begin
FrmCliente := TFrmCliente.Create(Application);
Teste(FrmCliente);
End;
Outra coisa: Se sua procedure vai receber sempre Forms, o parâmetro pode ser do tipo TForm. Ou seja, não precisa fazer ´Type Cast´.
Exemplo:
procedure Teste(sender : TForm);
begin
with sender do
showmessage(´O nome é ´ + name);
end;
Josemar
Gostei + 0
29/10/2003
Bacalhau
É uma coisa mais ou menos assim. No form TFormDocumento existe um procedure FormCreate e lá dentro algo parecido com isto:
procedure FormCreate(sender : TObject);
begin
// aqui faz umas coisas
Teste(FormDocument);
// continua a fazer mais coisas
end;
A dificuldade está em fazer funcionar noutro Form, digamos o XPTO. Não sei como fazer funcionar algo como
Teste(XPTO);
sem modificar o procedure Teste
Infelizmente o exemplo enviado dá Access Violation
procedure Teste(sender : TForm);
begin
with sender do
showmessage(´O nome é ´ + name);
end;
Gostei + 0
29/10/2003
Marcelo Saviski
Gostei + 0
29/10/2003
Bacalhau
Muito obrigado pela ajuda, a solução foi encontrada aqui. Alterei a chamada ao procedure. Em vez de
Teste(FormQualquer)
fiz
Teste(sender)
Mas, para dizer a verdade não sei explicar porquê :oops:
Se houver alguém que me explique porquê, render-me-ei aos seus pés humildemente.
Abraço aos que colaboraram
bacalhau
Gostei + 0
30/10/2003
Rodrigo_rcp
type
TVetorForm=array[1..5]of TForm;
var
Form1: TForm1;
VForm:TVetorForm;
implementation
uses
unit2;
{$R *.dfm}
procedure FormularioDoBacalhau(var Forms:TVetorForm);
begin
Forms[1].Color:=clBlack;
ShowMessage(Forms[1].Name);
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
VForm[1]:=Form1;
VForm[2]:=Form2;
FormularioDoBacalhau(VForm);
end;Gostei + 0
30/10/2003
Smaug_84
procedure TForm1.a(sender: TObject);
begin
ShowMessage((sender as TForm).Name);
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
a(Self);
end;
Gostei + 0
30/10/2003
Bacalhau
O que não consigo é perceber porque funciona com o parametro ´Self´ e não funciona com o parametro ´MeuForm´
Gostei + 0
30/10/2003
Marcelo Saviski
ele não cria um ´Form1´
ele cria um Form11
se repetir a operaçaõ, cria Form12, form13 e assim por diante
Self faz referencia a si mesmo, no caso o form, como está no oncreate, ao criar um form que vai guanhar o nome de Form11, self ou sender fazem referencia a Form11,
experimente fazer no onCreate (ShowMessage(Name))
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)