Fórum Usar componentes de um Form em Outro #272449
15/03/2005
0
Gostaria de usar um componente (DBGRID) de um formulario que foi criado em tempo de execucao, mas estou posiconado em outro Formulario, e ai me dá um erro.
Se alguem souber eu agradeço.
Estou chamando os formularios com o seguinte Codigo:
FormClass := TFormClass(GetClass(´TFORMULARIO´));
Form := FormClass.Create(Application);
Form.Name := ´FORMULARIO´;
Form.Show;
Isaiasn
Isaiasn
Curtir tópico
+ 0Posts
16/03/2005
Massuda
Gostei + 0
16/03/2005
Somar
crie um frame para o dbgrid e assim vc pode colocar em qualquer form.
Gostei + 0
17/03/2005
Silviogs
não sei se entendi, mas se vc está usando formluário padrão e depois outros formulários usarem os memos componentes do padrão, se for isto crie o novo form herdando o form padrão. Neste caso todos os componentes serão utilizadosno novo form. Caso contrário favor explicar melhor a sua dúvida para que possamos lhe ajudar.
Atenciosamente
Silvio Guedes
Gostei + 0
17/03/2005
Isaiasn
Estou posicionado em um formulario e quero usar um componente que esta em outro formulario
Ex. Estou posicionado no F_Estado e quero dar o seguinte comando:
if F_Cadastro.DGgrib.SelectRows > 0 then
begin
end;
Como que o F_Cadastro foi criado em tempo de execucao, ele da erro.
Obrigado.
Gostei + 0
30/03/2005
Isaiasn
Acho que agora vai dar para entender.
Eu quero usar as propriedades do Form1 e nao consigo:
if Form1.Grid.SelectedRows > 1 then
begin
end
ou
if Form1.Tag = 10 then
begin
end
Ai me da o famosso erro (Access Violation);
OBS: Chamo o Form1 assim:
FormClass := TFormClass(FindClass(´T´+Form1));
Formulario := FormClass.Create(Application);
Formulario.Name := Form1;
Formulario.ShowModal;
Obrigado pela Atenção
Isaias
Gostei + 0
30/03/2005
Massuda
Formulario.Name := Form1;
Como o compilador só conhece as variáveis e não o conteúdo das variáveis quando vai gerar o código, este trecho...
Para seu código funcionar como você espera, seria preciso atribuir o valor de Formulario à Form1; se você tem múltiplos forms da mesma classe simultaneamente, então não deveria usar uma única variável global para receber todos os forms.
Não sei se ficou claro, qualquer dúvida posta aqui.
Gostei + 0
30/03/2005
Isaiasn
Olá Massuda, realmente o Form1 é uma String, mas existe um formulario na Classe com o Nome de Form1.
Então como eu atribuo o valor de formulario a Form1.
Obrigado.
Isaiasn
Gostei + 0
30/03/2005
Massuda
Gostei + 0
31/03/2005
Isaiasn
procedure TF_Menu.ChamaClick(Sender: TObject);
Var
FormClass : TformClass;
Formulario : TForm;
begin
FormClass := TFormClass(FindClass(´T´+Form1));
Formulario := FormClass.Create(Application);
Formulario.Name := Form1;
Try
Formulario.ShowModal;
Finally
Formulario.Free;
Formulario:=Nil;
end;
end;
Obrigado pela atenção.
Isaiasn
Gostei + 0
31/03/2005
Massuda
Como o form é exibido usando ShowModal, a princípio nenhuma outra parte de seu programa seria executada, exceto a do form que está visível e, totalmente desaconselhável, código executado por reentrância. Note que o problema não é o ShowModal.
Imagino que você esteja tentando acessar o form depois dele ter sido destruído. O problema é[list=1:f5d3be4080][*:f5d3be4080]O form já foi destruído[*:f5d3be4080]A variável que você está usando para acessar o form provavelmente nunca recebeu uma referência válida a um form[/list:o:f5d3be4080]Uma solução possível seria, antes de destruir o form Formulario, copiar as informações que você precisa para alguma variável e posteriormente reutilizar essas informações.
Gostei + 0
31/03/2005
Isaiasn
Depois que eu crio ele e dou um ShowModal quero usar as propriedades do Formulario que ainda esta na Tela.
Ex:
if Form1.Tag = 10 then
begin
end
Ai ele me da a mensagem (Access Violation)
Obrigado.
Gostei + 0
31/03/2005
Massuda
Gostei + 0
31/03/2005
Isaiasn
É do Form1 que foi criado pela procedure, e que esta sendo executado.
Ate +
Gostei + 0
31/03/2005
Massuda
procedure TForm1.AlgumaProcedure; begin if Tag = 10 then begin // faz alguma coisa end; end;
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)