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]