Ir para conteúdo
Fórum Script Brasil
  • 0

(Resolvido) componetes


Guest --Sergio --

Pergunta

Guest --Sergio --

Ola amigos, preciso de uma pequena ajuda. como faço para

colocar o nome de um componente em uma variável e

depois fazer referência à esse componente utilizando a

variável

Link para o comentário
Compartilhar em outros sites

5 respostass a esta questão

Posts Recomendados

  • 0
(...) e

depois fazer referência à esse componente utilizando a variável

Vivendo&Aprendendo, ficou faltando explicar esta parte. ;)

Sergio, feito o que o colega sugeriu você acessa o componente (em um form) pelo nome utilizando o método FindComponent do form em questão e atribuí-lo a uma variável do tipo TComponent - para facilitar seu manuseio; Vamos a um exemplo:

1) em algum momento você guardou o nome do componente (conf. outro post) em uma variável chamda NomBotao (string);

2) usando esta variável, utiliza FindComponent para acessar o componente:

var
  Componente :TComponent;
begin
  Componente := FindComponent(NomBotao);  // receberá o endereço do componente se existir
  if Assigned(Componente) then  // testamos se o componente foi encontrado
  begin
   // sabendo que ele é um botão (TButton), vamos fazer um type-cast
   // para manipular uma de suas propriedades
    TButton(Componente).Caption := 'Novo caption do botão';
  end;
end;

a idéia é por aí. Detalhes, dependem da aplicação que você irá implementar.

Abraços

Link para o comentário
Compartilhar em outros sites

  • 0
Guest --Sérgio --

Ola amigo, implementei o código como você me

ensinou, mas não deu certo

O Código abaixo funciona normal

procedure TForm1.SpeedButton9Click(Sender: TObject);
begin
  DataModule2.ZQueryClientes. next;
end;
Mas da forma como você falou:
procedure TForm1.SpeedButton9Click(Sender: TObject);
var
  tabela :TComponent;
begin
  tabela := findcomponent('ZQueryClientes');
                           ou
  tabela := findcomponent('DataModule2.ZQueryClientes');

  If assigned(tabela) then
  Begin
    TZQuery(tabela).Next;
  end;
end;

O "if" não é executado e seu tiro o "if" da a seguinte mensagem

na execução embora na compilação não apresente nada.

Project teste.exe raised exception class EaccessViolation with

message 'Access Violation at address' bla bla bla...

Editado por Micheus
Incluída tag's CODE para melhorar a visualização, bem como identado o código. Utilize a identação também ;)
Link para o comentário
Compartilhar em outros sites

  • 0
amigo, implementei o código como você me

ensinou, mas não deu certo

não fez não.

Observe o que eu escrevi: "Sergio, feito o que o colega sugeriu você acessa o componente (em um form) pelo nome utilizando o método FindComponent do form em questão (...)"

Veja que o componente não está em um form, é verdade, mas está no datamodule. Logo, é neste que você dever procurar pelo componente, também usando o mesmo procedimento.

procedure TForm1.SpeedButton9Click(Sender: TObject);
var
  tabela :TComponent;
begin

  tabela := DataModule2.FindComponent('ZQueryClientes');

  If assigned(tabela) then
  Begin
    TZQuery(tabela).Next;
  end;
end;

e seu tiro o "if" da a seguinte mensagem

na execução embora na compilação não apresente nada.

Project teste.exe raised exception class EaccessViolation with

message 'Access Violation at address' bla bla bla...

o que é lógico, já que a variável está nula, ou seja, é NIL!

Abraços

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,4k
×
×
  • Criar Novo...