Clonar form em tempo de execução

Delphi

26/06/2006

Caros amigos;
Criei um único formulário para fazer consultas (Consulta de clientes, fornecedores, cidades, etc...). Quero saber se existe a possibilidade de fazer um clone desse formulário em tempo de execução. Pois em alguns casos o usuário terá que abrir a procura de clientes e ao mesmo tempo a procura de cidades.

Abraço!


Vispo

Vispo

Curtidas 0

Respostas

Micheus

Micheus

26/06/2006

[b:ba203cbb54]vispo[/b:ba203cbb54], vc utiliza data-module ou colocou os componentes no form junto ao DBGrid?
Se a resposta for a segunda opção e considerando que vc mostre seu form de consulta utilizando ShowModal bastaria fazer algo assim:
procedure TForm1.Button1Click(sender :TObject);
var
  FormConsulta :TFormConsulta; // aqui é a classe do seu form de consulta
begin
  FormConsulta := TFormConsulta.Create(Self);
  try
   // algum procedimento para inicializar a consulta adequada
   // a seguir mostrar o form
    FormConsulta.ShowModal;
  finally
    FormConsulta.Free;
  end;
end;
Como vc utiliza a variável local (FormConsulta definida no procedimento onclick), não averá problemas, visto que vc abandonaria o uso da variável global definida no código de seu form de consulta.

Se vc utilizar apenas Show, acho que deve ser considerada a possibilidade de definir as variaveis no form principal (tipo: FrmConsultaCliente, FrmConsultaFornecedor :TFormConsulta), criá-las e mostrá-las conforme a situação.

Se vc utilizar Data-module, talvez tenham que ser considerados outros detalhes.

Utilizando ShowModal, eu costumo fazer algo assim:
- no form de consulta, crio funções da seguinte forma:
TFrmConsulta = class(TForm)
  ...
  // para este campo movo o valor da chave quando de 
  //um duplo-click no DBGrid
  CodSelecionado :Variant;
  function CnsCliente :TModalResult;
  ...
  function CnsCidade :TModalResult;
end;

function TFrmConsulta.CnsCliente :TModalResult;
begin
  Qry.SQL.Text := ´select codCli, nomCli from clientes order by nomCli´;
  Qry.Open;
  try
    Result := ShowModal;
  finally
    Qry.Close;
  end;
end;
...
- daí no código do programa que chama este form, seguindo o que está mais acima, coloco:
FrmConsulta := TFrmConsulta.Create(Self);
try
  if FrmConsulta.CnsCliente = mrOk then
    TbVendasCodCliente.value := FrmConsulta.CodSelecionado;
finally
  FrmConsulta.Free
end;



GOSTEI 0
Vispo

Vispo

26/06/2006

Valeu pela resposta [b:7e4841345e]micheus[/b:7e4841345e], não estou usando data module, coloquei todos os componentes direto no form padrão. Eu uso um procedimento parecido com o seu, passo uma série de parâmetros para o formulário e monto a tela de procura de acordo com o desejado. Usei a dica das variáveis que vc deu para criar os clones dae ficou 100¬.

Abração!


GOSTEI 0
POSTAR