Usar componentes de um Form em Outro
Olá pessoal do Forum, tudo Blz;
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
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
Curtidas 0
Respostas
Massuda
15/03/2005
FormClass := TFormClass(GetClass(´TFORMULARIO´));
Form := FormClass.Create(Application);
Form.Name := ´FORMULARIO´;
Form.Show;
Não sei se esse é o problema, mas não há necessidade de atribuir um nome ao form, ou seja, deixe o Form.Name em branco. O Delphi não irá permitir que você tenha dois forms com o mesmo Form.Name. Se você realmente precisar dar nomes aos forms criados dinamicamente, gere um nome diferente para cado form criado dinamicamente.GOSTEI 0
Somar
15/03/2005
Se eu entendi ..
crie um frame para o dbgrid e assim vc pode colocar em qualquer form.
crie um frame para o dbgrid e assim vc pode colocar em qualquer form.
GOSTEI 0
Silviogs
15/03/2005
Olá amigo,
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
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
Isaiasn
15/03/2005
Deixa eu explicar melhor
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.
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
Isaiasn
15/03/2005
Olá Amigos, acho que ainda nao fui muito claro.
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
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
Massuda
15/03/2005
FormClass := TFormClass(FindClass(´T´+Form1));
Formulario := FormClass.Create(Application);
Formulario.Name := Form1;
Formulario.ShowModal;
Analisando esse pedaço de código, dá para perceber que, nesse contexto, Form1 é na verdade uma variável do tipo string e não do tipo TForm (ou derivado). Quando você faz....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...
if Form1.Grid.SelectedRows > 1 then
begin
end
ou
if Form1.Tag = 10 then
begin
end
se refere à variável Form1 do tipo TForm (ou derivado), não ao form criado através da variável Formulario.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
Isaiasn
15/03/2005
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.
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
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
Massuda
15/03/2005
...como eu atribuo o valor de formulario a Form1.
Posta aqui sua procedure/function onde você está criando o form usando a variável Formulario.GOSTEI 0
Isaiasn
15/03/2005
Eis ai a rotina....
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
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
Massuda
15/03/2005
Eis ai a rotina....
O form criado nessa procedure só existe durante a execução da procedure, já que ele é criado e destruído dentro da própria procedure.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
Isaiasn
15/03/2005
Olá Massuda, eu queria usar as propriedades do Form1 que ainda esta visilvel, e nao depois de destruilo.
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.
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
Massuda
15/03/2005
Você está tentando fazer isso...
if Form1.Tag = 10 then
begin
end
... onde exatamente? Isso é parte do código do form que foi criado pea procedure TF_Menu.ChamaClick? Ou é parte do código de outro form?GOSTEI 0
Isaiasn
15/03/2005
Você está tentando fazer isso...[quote:9a2ca42c30=´isaiasn´]if Form1.Tag = 10 then
begin
end
... onde exatamente? Isso é parte do código do form que foi criado pea procedure TF_Menu.ChamaClick? Ou é parte do código de outro form?[/quote:9a2ca42c30]É do Form1 que foi criado pela procedure, e que esta sendo executado.
Ate +
GOSTEI 0
Massuda
15/03/2005
É do Form1 que foi criado pela procedure, e que esta sendo executado.
Bom... se você está tentando acessar o form Form1 dentro do código da mesma classe TForm1, então você não precisa da variável Form1; isso deveria servir...procedure TForm1.AlgumaProcedure; begin if Tag = 10 then begin // faz alguma coisa end; end;
GOSTEI 0