Fórum Usar componentes de um Form em Outro #272449

15/03/2005

0

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


Isaiasn

Isaiasn

Responder

Posts

16/03/2005

Massuda

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.


Responder

Gostei + 0

16/03/2005

Somar

Se eu entendi ..

crie um frame para o dbgrid e assim vc pode colocar em qualquer form.


Responder

Gostei + 0

17/03/2005

Silviogs

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


Responder

Gostei + 0

17/03/2005

Isaiasn

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.


Responder

Gostei + 0

30/03/2005

Isaiasn

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


Responder

Gostei + 0

30/03/2005

Massuda

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;
...você está atribuindo o nome contido na string Form1 (que pode ser qualquer coisa) ao form referenciado pela variável Formulario.

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.


Responder

Gostei + 0

30/03/2005

Isaiasn

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


Responder

Gostei + 0

30/03/2005

Massuda

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


Responder

Gostei + 0

31/03/2005

Isaiasn

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


Responder

Gostei + 0

31/03/2005

Massuda

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.


Responder

Gostei + 0

31/03/2005

Isaiasn

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.


Responder

Gostei + 0

31/03/2005

Massuda

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?


Responder

Gostei + 0

31/03/2005

Isaiasn

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 +


Responder

Gostei + 0

31/03/2005

Massuda

É 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;



Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar