Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

skybladerox

Como reutilizar um recurso para forms diferentes?

Recommended Posts

Bom dia pessoal,

 

É o seguinte: estou tentando pegar valores de um dbgrid de um form e jogar num dbedit de outro form, até aí tudo bem eu consegui, mas não estou sabendo como reutilizar esse mesmo trecho de código para outros forms. Vou explicar:

 

- Tenho form de Clientes e outro de Fornecedores, além disso tenho um form de lista dos bairros.

 

- no form lista bairros por exemplo só tem o DBGrid com os bairros aonde clicando na célula deve fechar o form e voltar ao form anterior trazendo o bairro selecionado. Aí eu fiz:

 

procedure TfrmListaBairros.DBGrid1CellClick(Column: TColumn);
begin
frmClientes.txtBairro.text := DBGrid1.Fields[1].AsString;
frmListaBairros.Close;
end;
procedure TfrmListaBairros.DBGrid1CellClick(Column: TColumn);
begin
      frmClientes.txtBairro.text := DBGrid1.Fields[1].AsString;
      frmListaBairros.Close;
end;

 

funcionou a janela fecha e traz o bairro no dbedit do form cliente, mas e para utilizar esse mesmo código em outros forms tipo fornecedores, funcionários que eu tenho? pq notem que está com frmClientes.txtBairro.text, então só funciona para form Clientes, q q estou faezndo errado ou devo acrescentar?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Uma alternativa é você criar uma procedure numa unit auxiliar que receba os forms, o edit e o texto, e chamá-la dentro do seu dbgrid. Seria algo do tipo....

 

 

Unit funcoes;
 
....

procedure SetaTextoEdit(FormOrigem, FormDestino : TForm; Edit: TEdit; Texto: String);
begin
   with FormDestino do
        Edit.Text := Texto;
   FormOrigem.Close;
end;

No seu form, você incluiria na uses a unit de funções e chamaria a função assim:

procedure TfrmListaBairros.DBGrid1CellClick(Column: TColumn); 
begin 
   SetaTextoEdit(frmListaBairros, frmClientes, txtBairro, DBGrid1.Fields[1].AsString); 
end;

Ps.: Não testei o código, fiz de cabeça uma solução rápida pra isso... mas com certeza precisa ser melhor trabalhada e pensada, visto que há várias possibilidades diferentes pra se trabalhar nestas situações.



Tive um tempo agora pra testar essa procedure e fiz umas adaptações nela para corrigi-la e ficar ao menos funcional, incluindo uma regra pra validar se o formulário destino está criado antes de tentar executar o código. Segue abaixo:

 

 

procedure TForm1.SetaTextoEdit(FormOrigem, FormDestino : TForm; Edit, Texto: String);
var iItem : integer;
begin
   if not Assigned(FormDestino) then
   begin
     ShowMessage('Formulário destino não está criado! Abortando processamento!');
     Exit;
   end;

   with FormDestino do
   begin
      for iItem := 0 to FormDestino.ComponentCount - 1 do
          if  (FormDestino.Components[iItem].Name = Edit)
          and (FormDestino.Components[iItem] is TEdit)  then
          begin
             TEdit(FormDestino.Components[iItem]).Text := Texto;
             break;
          end;
      FormDestino.Show;
   end;
   FormOrigem.Close;
end;

 

Tome cuidado em usar este tipo de programação, porque se o FormOrigem.Close for dado no seu form principal você irá fechar sua aplicação instantaneamente e não saberá o porque num primeiro momento.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Seria legal você postar sua solução para que outros colegas que tenham a mesma dúvida possam aproveitar. :natalwink:

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.