Olá amigos. 

Passei a tarde toda pesquisando a respeito de treads, inclusive recente mente 
fiz um curso oficial na TDS em São Paulo, abordamos treads, até fiz uns 
exemplos , funcionou tudo certinho, mas não consegui resolver este caso 
específico.

Estou desenvolvendo um sistema n-tier com acesso via web (Delphi 7 e Firebird 
1.5) e nos forms dos módulos em geral tenho tabelas auxiliares (bairros, 
cidades, etc.) e a melhor maneira de operacionalizar isso foi abrindo estas 
tabelas quando cria o form, consecutivamente na primeira carga do form o 
processo fica um pouco lento, porém da segunda carga em diante o tempo fica 
aceitável, para amenizar isso e dar ao cliente a impressão de que o mesmo está 
navegando pela net em um browse, resolvi colocar no Statusbar do form principal 
um ProgressBar em movimento todas as veses que criar um form, também pensei em 
criar o mesmo efeito quando fizer uma consulta no banco de dados. Bem mas o meu 
problema é o seguinte:

Com a procedure abaixo crio os forms:

procedure TFrmCliPrincipal.CriaForm(FormClass: TFormClass; var vForm);
var Ativado : Boolean;
    N       : Integer;
begin
  Ativado := False;
  with FrmCliPrincipal do begin
    for N := MDIChildCount -1 downto 0 do
      if MDIChildren[N] = TForm(vForm) then Ativado := True;
    if Ativado then begin
      if ActiveMDIChild <> TForm(vForm) then begin
        if TForm(vForm).WindowState = wsMinimized then
          TForm(vForm).WindowState := wsNormal;
        TForm(vForm).BringToFront;
        end;
      end
    else
      Application.CreateForm(FormClass, TForm(vForm));
    end;
end; //CriaForm

Como eu faria para colocar a criação dos forms em Threads para simultâneamente 
poder acionar o efeito durante a carga das tabelas auxiliares? (o efeito eu 
consegui achar na net, testei e ficou legal). E de quebra como faço também para 
colocar na thread a consulta a baixo segue a procedure que aciona a consulta ao 
banco :

procedure TFrmClasse.TlBtnFiltraClick(Sender: TObject);
begin
  if wIncrmntlSrchClasseLocalizacao.Text = '' then
    MessageDlg('É necessário digitar algo para executar o filtro no banco de 
dados.',mtInformation,[mbOk],0)
  else begin
    with (DtSrcLocalizacao.DataSet as TClientDataSet) do begin
      DisableControls;
      Close;
      with wIncrmntlSrchClasseLocalizacao do
        CommandText := 'Select * from vws_'+ sTabela +' where upper(' + 
SearchField + ') like upper('+chr(39)+'%' + Text + '%'+chr(39)+')';
      Open;
      EnableControls;
      StsBrCadastro.Panels[0].Text := IntToStr(RecordCount) + ' Registro(s) 
selecionado(s)';
      end;
    end;
end;



Antecipadamente agradeço pela atenção.
Cordialmente
Frota C. Júnior
www.apoio.eti.br

[As partes desta mensagem que não continham texto foram removidas]

Responder a