Então jorge, só conheço thread em conceito nunca programei uma thread no delphi, peguei um exemplo mas mesmo assim não funcionou, veja como ficou o código:
unit uEncaminhamentosAuto; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, DB, IBCustomDataSet, IBQuery, RxMemDS, Grids, DBGrids, CheckDBGrid, StdCtrls, Buttons, ImgList, ComCtrls, ToolWin, ExtCtrls, Gauges, IBStoredProc, IdComponent, IdTCPConnection, IdTCPClient, IdMessageClient, IdSMTP, IdBaseComponent, IdMessage; type TfrmEncaminhamentosAuto = class(TForm) memEmpresa: TRxMemoryData; qrEmpresa: TIBQuery; btnEnviar: TBitBtn; StatusBar1: TStatusBar; Panel1: TPanel; gauProgresso: TGauge; Bevel1: TBevel; cgridEmpresas: TCheckDBGrid; btnFechar: TBitBtn; memEmpresaEMP_FLAG: TBooleanField; memEmpresaEMP_CODIGO: TStringField; memEmpresaEMP_RAZAOSOCIAL: TStringField; dsEmpresas: TDataSource; memEmpresaEMP_CIDADE: TStringField; memEmpresaEMP_UF: TStringField; spEncaminhamentos: TIBStoredProc; memEmpresaEMP_SEGMENTO: TStringField; btnPesquisar: TBitBtn; qrTemp: TIBQuery; memEmpresaEMP_EMAIL: TStringField; edCodigoCliente: TEdit; PesqCodigoCliente: TSpeedButton; edNomeCliente: TEdit; PesqNomeCliente: TSpeedButton; Label1: TLabel; Label2: TLabel; edCurriculo: TEdit; PesqArquivo: TSpeedButton; Label3: TLabel; edHeadHunter: TComboBox; cbIncluir: TCheckBox; OpenDialog: TOpenDialog; edAssinatura: TMemo; Memo2: TMemo; edEmail: TEdit; edSenha: TEdit; IdMsgSend: TIdMessage; SMTP: TIdSMTP; edMensagemModelo: TMemo; edMensagemGerada: TMemo; btnCancelar: TBitBtn; procedure btnFecharClick(Sender: TObject); procedure FormClose(Sender: TObject; var Action: TCloseAction); procedure edCodigoClienteEnter(Sender: TObject); procedure PesqCodigoClienteClick(Sender: TObject); procedure PesqNomeClienteClick(Sender: TObject); procedure edCodigoClienteExit(Sender: TObject); procedure edCodigoClienteKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); procedure btnPesquisarClick(Sender: TObject); procedure edCodigoClienteKeyPress(Sender: TObject; var Key: Char); procedure memEmpresaBeforeEdit(DataSet: TDataSet); procedure PesqArquivoClick(Sender: TObject); procedure edCurriculoKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); procedure edCurriculoExit(Sender: TObject); procedure FormShow(Sender: TObject); procedure edHeadHunterExit(Sender: TObject); procedure edHeadHunterChange(Sender: TObject); procedure cbIncluirClick(Sender: TObject); procedure btnCancelarClick(Sender: TObject); procedure btnEnviarClick(Sender: TObject); private { Private declarations } valida_email, parar : Boolean ; public { Public declarations } end; TThreadEmail = class(TThread) protected constructor Create; procedure Execute; override; procedure EnviaEmail; end; var frmEncaminhamentosAuto: TfrmEncaminhamentosAuto; var_prospecao_sp , var_prospecao_brasil , var_prospecao_cidade , var_prospecao_uf , var_prospecao_areas : String ; implementation uses uMenuPrincipal, uPesquisa, Funcoes; {$R *.dfm} procedure TfrmEncaminhamentosAuto.btnFecharClick(Sender: TObject); begin close ; end; procedure TfrmEncaminhamentosAuto.FormClose(Sender: TObject; var Action: TCloseAction); begin frmEncaminhamentosAuto := Nil ; Action := caFree ; end; procedure TfrmEncaminhamentosAuto.edCodigoClienteEnter(Sender: TObject); begin self.Top := ((frmMenuPrincipal.clientHeight-self.Height) div 2) - 32; end; procedure TfrmEncaminhamentosAuto.PesqCodigoClienteClick(Sender: TObject); begin //Chama o form If FrmPesquisa = Nil Then Begin FrmPesquisa := TFrmPesquisa.Create( Self ) ; FrmPesquisa.Show ; End; //Pesquisa de CPF FrmPesquisa.qrPesquisa.Active := False ; FrmPesquisa.qrPesquisa.SQL.Clear ; FrmPesquisa.qrPesquisa.SQL.Add('SELECT CLI_CODIGO AS CODIGO, CLI_NOME AS NOME_DO_CANDIDATO'); FrmPesquisa.qrPesquisa.SQL.Add('FROM ARQCLIENTES') ; FrmPesquisa.qrPesquisa.SQL.Add('ORDER BY CLI_CODIGO'); FrmPesquisa.qrPesquisa.Active := True ; //Strings de Pesquisa FrmPesquisa.SQL1:= 'SELECT CLI_CODIGO AS CODIGO, CLI_NOME AS NOME_DO_CANDIDATO FROM ARQCLIENTES WHERE CLI_CODIGO LIKE'; FrmPesquisa.SQL2:= 'ORDER BY CLI_CODIGO'; //Campos FrmPesquisa.TxtCampoChave := 'CODIGO' ; FrmPesquisa.TxtCampoResp := 'CODIGO' ; FrmPesquisa.EdResp := Self.edCodigoCliente ; end; procedure TfrmEncaminhamentosAuto.PesqNomeClienteClick(Sender: TObject); begin //Chama o form If FrmPesquisa = Nil Then Begin FrmPesquisa := TFrmPesquisa.Create( Self ) ; FrmPesquisa.Show ; End; //Pesquisa de CPF FrmPesquisa.qrPesquisa.Active := False ; FrmPesquisa.qrPesquisa.SQL.Clear ; FrmPesquisa.qrPesquisa.SQL.Add('SELECT CLI_NOME AS NOME_DO_CANDIDATO, CLI_CODIGO AS CODIGO'); FrmPesquisa.qrPesquisa.SQL.Add('FROM ARQCLIENTES') ; FrmPesquisa.qrPesquisa.SQL.Add('ORDER BY CLI_NOME'); FrmPesquisa.qrPesquisa.Active := True ; //Strings de Pesquisa FrmPesquisa.SQL1:= 'SELECT CLI_NOME AS NOME_DO_CANDIDATO, CLI_CODIGO AS CODIGO FROM ARQCLIENTES WHERE Upper(CLI_NOME) LIKE'; FrmPesquisa.SQL2:= 'ORDER BY CLI_NOME'; //Campos FrmPesquisa.TxtCampoChave := 'NOME_DO_CANDIDATO' ; FrmPesquisa.TxtCampoResp := 'CODIGO' ; FrmPesquisa.EdResp := Self.edCodigoCliente ; end; procedure TfrmEncaminhamentosAuto.edCodigoClienteExit(Sender: TObject); begin if (self.edCodigoCliente.Text = '') then begin self.edCodigoCliente.Clear; exit; end; self.edNomeCliente.Clear; var_prospecao_sp := '' ; var_prospecao_brasil := '' ; var_prospecao_cidade := '' ; var_prospecao_uf := '' ; var_prospecao_areas := '' ; self.spEncaminhamentos.StoredProcName := 'SL_ARQCLIENTES'; self.spEncaminhamentos.ParamByName('PAR_CLI_CODIGO').Value:= self.edCodigoCliente.Text; self.spEncaminhamentos.ExecProc; if self.spEncaminhamentos.ParamByName('RET_CLI_CODIGO').AsString = '' then Begin Application.MessageBox('Código de Cliente inválido, favor verificar.','Mensagem do Sistema',MB_ICONEXCLAMATION+MB_OK); self.edCodigoCliente.SetFocus ; Exit ; End; if self.spEncaminhamentos.ParamByName ('RET_AREAFORMACAO').AsString = '' then Begin Application.MessageBox('Favor atualizar a Área de Atuação no Cadastro do Cliente.','Mensagem do Sistema',MB_ICONEXCLAMATION+MB_OK); self.edCodigoCliente.SetFocus ; Exit ; End; self.qrTemp.Close ; self.qrTemp.SQL.Text := 'SELECT CLI_CODIGO FROM ARQAREA_CANDIDATO WHERE ARE_CODIGO = ''0098'' AND CLI_CODIGO = ' + QuotedStr( self.edCodigoCliente.Text ) ; self.qrTemp.Open ; if self.qrTemp.RecordCount > 0 then var_prospecao_areas := '1'; self.edCodigoCliente.Text := self.spEncaminhamentos.ParamByName ('RET_CLI_CODIGO').AsString; self.edNomeCliente.Text := self.spEncaminhamentos.ParamByName ('RET_CLI_NOME').AsString; var_prospecao_sp := self.spEncaminhamentos.ParamByName ('RET_CLI_PROSP_SP').AsString; var_prospecao_brasil := self.spEncaminhamentos.ParamByName ('RET_CLI_PROSP_BRASIL').AsString; var_prospecao_cidade := MidString (self.spEncaminhamentos.ParamByName ('RET_CLI_PROSP_CIDADE').AsString, '-'); var_prospecao_uf := MidString2 (self.spEncaminhamentos.ParamByName ('RET_CLI_PROSP_CIDADE').AsString, '-'); end; procedure TfrmEncaminhamentosAuto.edCodigoClienteKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); begin If Key = 120 Then Begin Self.PesqCodigoClienteClick( Sender ); End; If Key = 121 Then Begin Self.PesqNomeClienteClick( Sender ); End; end; procedure TfrmEncaminhamentosAuto.btnPesquisarClick(Sender: TObject); var StrLiga: String; begin if self.edCodigoCliente.Text = '' then begin Application.MessageBox('Favor selecionar um Cliente.','Mensagem do Sistema',MB_ICONEXCLAMATION+MB_OK); self.edCodigoCliente.SetFocus ; Exit ; end; self.qrEmpresa.Close; self.qrEmpresa.SQL.Clear ; StrLiga:= 'WHERE '; self.qrEmpresa.SQL.Add('SELECT EMP.EMP_CODIGO, EMP.EMP_RAZAOSOCIAL, ARE.ARE_AREA, EMP.EMP_CIDADE, EMP.EMP_UF, EMP.EMP_EMAIL FROM ARQEMPRESAS EMP '); self.qrEmpresa.SQL.Add('LEFT OUTER JOIN ARQAREAS ARE ON (EMP.ARE_CODIGO = ARE.ARE_CODIGO) '); self.qrEmpresa.SQL.Add('LEFT OUTER JOIN ARQCLIENTES CLI ON (CLI.CLI_CODIGO = ' + QuotedStr( self.edCodigoCliente.Text ) + ') '); if var_prospecao_areas <> '1' then begin self.qrEmpresa.SQL.Add(StrLiga); //Verificando a área de atuação e as áreas de interesse do candidato self.qrEmpresa.SQL.Add('((EXISTS ( '); self.qrEmpresa.SQL.Add('SELECT AAC.ARE_CODIGO FROM ARQAREA_CANDIDATO AAC '); self.qrEmpresa.SQL.Add('WHERE EMP.ARE_CODIGO = AAC.ARE_CODIGO AND AAC.CLI_CODIGO = CLI.CLI_CODIGO)) '); self.qrEmpresa.SQL.Add('OR (EMP.ARE_CODIGO = CLI.CLI_AREA_FORMACAO) '); //0098 - TODAS (SERVE TODAS AS AREAS) self.qrEmpresa.SQL.Add('OR (EMP.ARE_CODIGO = ''0098'')) '); StrLiga:= 'AND '; end; //Se o cliente não tem interesse pelo Brasil inteiro, então validar as cidades que ele tem interesse if var_prospecao_brasil <> '1' then begin self.qrEmpresa.SQL.Add(StrLiga + '( '); //Verificando a cidade do Cliente self.qrEmpresa.SQL.Add('(UPPER(EMP.EMP_CIDADE) = UPPER (CLI.CLI_CIDADE) AND EMP.EMP_UF = CLI.CLI_UF) '); //Verificando a Cidade de Interesse if var_prospecao_cidade <> '' then begin self.qrEmpresa.SQL.Add('OR (UPPER(EMP.EMP_CIDADE) = ' + QuotedStr( UpperCase(var_prospecao_cidade) ) ); self.qrEmpresa.SQL.Add(' AND EMP.EMP_UF = ' + QuotedStr( var_prospecao_uf ) ); end ; //Verificando se tem interesse em SP if var_prospecao_sp = '1' then self.qrEmpresa.SQL.Add('OR (EMP.EMP_UF = ''SP'') '); self.qrEmpresa.SQL.Add(')'); StrLiga:= 'AND '; end; //Validando se as empresas já enviadas entram na pesquisa if not self.cbIncluir.Checked then begin self.qrEmpresa.SQL.Add(StrLiga + '( '); self.qrEmpresa.SQL.Add('NOT EXISTS ( '); self.qrEmpresa.SQL.Add('SELECT ENC.EMP_CODIGO FROM ARQENCAMINHAMENTOS ENC'); self.qrEmpresa.SQL.Add('WHERE EMP.EMP_CODIGO = ENC.EMP_CODIGO AND ENC.CLI_CODIGO = CLI.CLI_CODIGO)) '); end; self.qrEmpresa.SQL.Add('ORDER BY EMP.EMP_RAZAOSOCIAL DESC'); self.qrEmpresa.Open; if self.qrEmpresa.RecordCount = 0 then begin Application.MessageBox('Não foi encontrada nenhuma Empresa no perfil do Cliente.','Mensagem do Sistema',MB_ICONINFORMATION+MB_OK); Exit ; end; self.valida_email := False ; self.memEmpresa.Close; self.memEmpresa.EmptyTable; self.memEmpresa.Open ; while not self.qrEmpresa.Eof do begin self.memEmpresa.Insert ; self.memEmpresa.FieldByName('EMP_CODIGO').Value := self.qrEmpresa.FieldByName('EMP_CODIGO').AsString ; self.memEmpresa.FieldByName('EMP_RAZAOSOCIAL').Value := self.qrEmpresa.FieldByName('EMP_RAZAOSOCIAL').AsString ; self.memEmpresa.FieldByName('EMP_SEGMENTO').Value := self.qrEmpresa.FieldByName('ARE_AREA').AsString ; self.memEmpresa.FieldByName('EMP_CIDADE').Value := self.qrEmpresa.FieldByName('EMP_CIDADE').AsString ; self.memEmpresa.FieldByName('EMP_UF').Value := self.qrEmpresa.FieldByName('EMP_UF').AsString ; self.memEmpresa.FieldByName('EMP_EMAIL').Value := self.qrEmpresa.FieldByName('EMP_EMAIL').AsString ; self.memEmpresa.post; self.qrEmpresa.Next ; end; self.valida_email := True ; self.StatusBar1.Panels[0].Text := 'Total: ' + IntToStr (self.memEmpresa.RecordCount) + ' empresas encontradas' ; self.cgridEmpresas.SetFocus ; end; procedure TfrmEncaminhamentosAuto.edCodigoClienteKeyPress(Sender: TObject; var Key: Char); begin //Valida se a tecla e <enter> If Key = #13 Then Begin SelectNext( ActiveControl , True , True ); Key := #0 ; End; end; procedure TThreadEmail.EnviaEmail; var total, contador, i, codigo : integer ; begin with frmEncaminhamentosAuto do begin memEmpresa.First ; total := 0 ; contador := 0 ; while not memEmpresa.Eof do begin if memEmpresa.FieldByName('EMP_FLAG').AsBoolean then total := total + 1 ; memEmpresa.Next ; end; if total = 0 then begin memEmpresa.First ; Application.MessageBox('Nenhuma Empresa foi Selecionada.','Mensagem do Sistema',MB_ICONEXCLAMATION+MB_OK); cgridEmpresas.SetFocus ; parar := True ; Exit ; end; //DEFININDO OS PARAMETROS with IdMsgSend do begin Body.Assign(Memo2.Lines); From.Text := edHeadHunter.Text; Subject := 'Grupo Monteiro - Apresentação de Profissional'; Priority := TIdMessagePriority(1); end; //AUTENTICAÇÃO case Autenticacao of 0: SMTP.AuthenticationType := atNone; 1: SMTP.AuthenticationType := atLogin; end; //USUÁRIO E SENHA SMTP.UserID := edEmail.Text + '#pop.grupomonteiro.com.br'; //SMTP.UserID := edEmail.Text; SMTP.Password := edSenha.Text; //CONFIGURAÇÃO DO SMTP SMTP.Host := ServidorSMTP; SMTP.Port := PortaSMTP; StatusBar1.Panels[0].Text := 'Conectando o servidor...'; StatusBar1.Refresh; try SMTP.Connect; except Application.MessageBox(PChar('Ocorreu um erro ao conectar o Servidor de SMTP.'),'Mensagem do Sistema', MB_ICONERROR + Mb_Ok); StatusBar1.Panels[0].Text := 'Desconectado'; StatusBar1.Refresh; parar := True ; exit; end; StatusBar1.Panels[0].Text := 'Conectado'; StatusBar1.Refresh; gauProgresso.MaxValue := total ; StatusBar1.Panels[0].Text := 'Enviando as mensagens...'; StatusBar1.Refresh; memEmpresa.First ; //Enviando os Emails para as Empresas Selecionadas try while not memEmpresa.Eof do begin if memEmpresa.FieldByName('EMP_FLAG').AsBoolean then begin IdMsgSend.Recipients.EMailAddresses := memEmpresa.FieldByName('EMP_EMAIL').AsString; try //Limpa os arquivos atachados IdMsgSend.MessageParts.Clear; //Iniciando o Campo Mensagem Gerada edMensagemGerada.Text := edMensagemModelo.Text ; //Substituindo a Data FindReplace('<data>', FormatDateTime ('dd',Date) + ' de ' + MesExtenso(Date) + ' de ' + FormatDateTime ('yyyy',Date) + '.', edMensagemGerada); //Substituindo o campo Cliente FindReplace('<cliente>', edNomeCliente.Text, edMensagemGerada); //Substituindo a Assinatura FindReplace('<assinatura>', edAssinatura.Text, edMensagemGerada); //ATACHANDO O ARQUIVO COMO HTML for i:= 1 to 2 do begin with TIdText.Create (IdMsgSend.MessageParts, edMensagemGerada.Lines) do begin ContentType := 'text/html'; end; end; //ATACHANDO O CV TIdAttachment.Create (IdMsgSend.MessageParts, edCurriculo.Text ); except Application.MessageBox('Ocorreu um erro ao atachar os arquivos','Mensagem do Sistema', MB_ICONERROR + Mb_Ok); Break; parar := True ; end; try SMTP.Send(IdMsgSend); except Application.MessageBox(PChar('Ocorreu um erro ao enviar o e-mail para a Empresa ' + memEmpresa.FieldByName ('EMP_RAZAOSOCIAL').AsString ),'Mensagem do Sistema', MB_ICONERROR + Mb_Ok); Break; parar := True ; end; try frmMenuPrincipal.qrContador.Active:= False; frmMenuPrincipal.qrContador.SQL.Clear; frmMenuPrincipal.qrContador.SQL.Add ('SELECT CONT_ULT_REGISTRO FROM ARQCONTADOR WHERE CONT_CODIGO = ''11'''); frmMenuPrincipal.qrContador.Active:= True; codigo := frmMenuPrincipal.qrContador.FieldByName('CONT_ULT_REGISTRO').Value + 1; frmMenuPrincipal.qrContador.Active:= False; frmMenuPrincipal.qrContador.SQL.Clear; frmMenuPrincipal.qrContador.SQL.Add ('UPDATE ARQCONTADOR SET CONT_ULT_REGISTRO = '''+inttostr(codigo)+''' WHERE CONT_CODIGO = ''11'''); frmMenuPrincipal.qrContador.ExecSQL; spEncaminhamentos.StoredProcName:= 'MN_ARQENCAMINHAMENTOS'; spEncaminhamentos.ParamByName ('PAR_ENC_CODIGO').Value := RetZero(IntToStr(codigo),6) ; spEncaminhamentos.ParamByName ('PAR_ENC_DATA').Value := Date ; spEncaminhamentos.ParamByName ('PAR_ENC_OBS').Value := 'Encaminhamento Automático' ; spEncaminhamentos.ParamByName ('PAR_CLI_CODIGO').Value := edCodigoCliente.Text ; spEncaminhamentos.ParamByName ('PAR_VAG_CODIGO').Value := 'AUTO' ; spEncaminhamentos.ParamByName ('PAR_EMP_CODIGO').Value := memEmpresa.FieldByName ('EMP_CODIGO').AsString; spEncaminhamentos.ParamByName ('PAR_USU_TIMEUSUARIO').Value := Now ; spEncaminhamentos.ParamByName ('PAR_USU_CODIGO').Value := frmMenuPrincipal.edCodigo.Text ; spEncaminhamentos.ExecProc; frmMenuPrincipal.IBTransaction.CommitRetaining; except Application.MessageBox(PChar('Ocorreu um erro ao Registrar Envio para a Empresa ' + memEmpresa.FieldByName ('EMP_RAZAOSOCIAL').AsString ),'Mensagem do Sistema', MB_ICONERROR + Mb_Ok); Break; parar := True ; end; if parar then begin Application.MessageBox(PChar('O processo de Envio foi cancelado.'),'Mensagem do Sistema', MB_ICONINFORMATION + Mb_Ok); Break; end; contador:= contador + 1; end; gauProgresso.Progress := contador ; memEmpresa.Next ; end finally parar := True ; StatusBar1.Panels[0].Text := 'Desconectando o servidor...'; StatusBar1.Refresh; try SMTP.Disconnect; except Application.MessageBox(PChar('Ocorreu um erro ao desconectar o Servidor de SMTP.'),'Mensagem do Sistema', MB_ICONERROR + Mb_Ok); end; StatusBar1.Panels[0].Text := 'Desconectado'; StatusBar1.Refresh; Application.MessageBox(PChar('Foram enviados ' + inttostr(contador) + ' de ' + inttostr(total) + ' e- mails.'),'Mensagem do Sistema', MB_ICONINFORMATION + Mb_Ok); memEmpresa.Close; gauProgresso.Progress := 0; end; end; end; procedure TfrmEncaminhamentosAuto.memEmpresaBeforeEdit(DataSet: TDataSet); begin if not self.valida_email then exit ; if self.memEmpresa.FieldByName('EMP_EMAIL').AsString = '' then begin Application.MessageBox('A Empresa não possui e-mail cadastrado.','Mensagem do Sistema',MB_ICONEXCLAMATION+MB_OK); abort ; exit; end; if not ValidaEmail(self.memEmpresa.FieldByName ('EMP_EMAIL').AsString) then begin Application.MessageBox('O e-mail cadastrado é inválido, favor verificar.','Mensagem do Sistema',MB_ICONEXCLAMATION+MB_OK); abort ; end; end; procedure TfrmEncaminhamentosAuto.PesqArquivoClick(Sender: TObject); begin OpenDialog.Title:= 'Abrir arquivo'; OpenDialog.Filter:= 'Arquivos do Word|*.doc|RTF|*.rtf|Todos os arquivos|*.*'; if self.OpenDialog.Execute then self.edCurriculo.Text := self.OpenDialog.FileName ; end; procedure TfrmEncaminhamentosAuto.edCurriculoKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); begin If Key = 120 Then Begin Self.PesqArquivoClick( Sender ); End; end; procedure TfrmEncaminhamentosAuto.edCurriculoExit(Sender: TObject); begin self.edCurriculo.Text := Trim(self.edCurriculo.Text) ; If not(fileexists(self.edCurriculo.Text)) then begin Application.MessageBox('O arquivo informado não existe.','Mensagem do Sistema',MB_ICONEXCLAMATION+MB_OK); self.edCurriculo.SetFocus ; Exit ; end; end; procedure TfrmEncaminhamentosAuto.FormShow(Sender: TObject); begin self.qrTemp.Close ; self.qrTemp.SQL.Clear ; self.qrTemp.SQL.Add('SELECT COE_HEADHUNTER AS HEADHUNTER, COE_EMAIL FROM ARQCONTROLE_EMAILS'); self.qrTemp.SQL.Add('ORDER BY COE_HEADHUNTER'); self.qrTemp.Open; self.qrTemp.First; self.edHeadHunter.Items.Clear; while not self.qrTemp.Eof do begin self.edHeadHunter.Items.Add(uppercase (self.qrTemp.FieldByName('HEADHUNTER').AsString) + '<' + self.qrTemp.FieldByName('COE_EMAIL').AsString + '>') ; self.qrTemp.Next; end; end; procedure TfrmEncaminhamentosAuto.edHeadHunterExit(Sender: TObject); begin //Valida o Combo ValidaCombo( Sender ); end; procedure TfrmEncaminhamentosAuto.edHeadHunterChange(Sender: TObject); begin self.qrTemp.Close ; self.qrTemp.SQL.Clear ; self.qrTemp.SQL.Add('SELECT * FROM ARQCONTROLE_EMAILS'); self.qrTemp.SQL.Add('WHERE COE_EMAIL = ' + QuotedStr(Trim (MidString2(Copy(self.edHeadHunter.Text, 1, length (self.edHeadHunter.Text)-1), '<')))); self.qrTemp.Open; self.edEmail.Text := self.qrTemp.FieldByName ('COE_EMAIL').AsString ; self.edSenha.Text := self.qrTemp.FieldByName ('COE_SENHA').AsString ; self.edAssinatura.Text := self.qrTemp.FieldByName ('COE_ASSINATURA').AsString ; end; procedure TfrmEncaminhamentosAuto.cbIncluirClick(Sender: TObject); begin if self.memEmpresa.RecordCount > 0 then self.btnPesquisarClick(sender); end; constructor TThreadEmail.Create; begin inherited Create(false); end; procedure TThreadEmail.Execute; begin Self.Priority := tpLowest; with frmEncaminhamentosAuto do begin while not parar do begin Synchronize(EnviaEmail); end; end; end; procedure TfrmEncaminhamentosAuto.btnCancelarClick(Sender: TObject); begin parar := True ; end; procedure TfrmEncaminhamentosAuto.btnEnviarClick(Sender: TObject); begin if edCodigoCliente.Text = '' then begin Application.MessageBox('Favor selecionar um Cliente.','Mensagem do Sistema',MB_ICONEXCLAMATION+MB_OK); edCodigoCliente.SetFocus ; Exit ; end; if edCurriculo.Text = '' then begin Application.MessageBox('Favor selecionar o Currículo do Cliente.','Mensagem do Sistema',MB_ICONEXCLAMATION+MB_OK); edCurriculo.SetFocus ; Exit ; end; if edHeadHunter.Text = '' then begin Application.MessageBox('Favor selecionar o(a) HeadHunter.','Mensagem do Sistema',MB_ICONEXCLAMATION+MB_OK); edHeadHunter.SetFocus ; Exit ; end; if memEmpresa.RecordCount = 0 then begin Application.MessageBox('É necessário fazer antes uma Pesquisa de Empresas.','Mensagem do Sistema',MB_ICONEXCLAMATION+MB_OK); edCodigoCliente.SetFocus ; Exit ; end; parar := False; TThreadEmail.Create; end; end. --- Em delphi-br@yahoogrupos.com.br, "Jorge Ericsson Silva Pinheiro" <[EMAIL PROTECTED]> escreveu > Marcelo, > > Vc poderia usar uma Thread para controla tudo isso, crie um formulário baseado no Thread, coloque todos os controles de seu envio e pronto. > Ao executar sua rotina, vc poderá efetuar outros procedimento no seu formulário. > > Espero ter lhe ajudado, -- <<<<< FAVOR REMOVER ESTA PARTE AO RESPONDER ESTA MENSAGEM >>>>> Para ver as mensagens antigas, acesse: http://br.groups.yahoo.com/group/delphi-br/messages Para falar com o moderador, envie um e-mail para: [EMAIL PROTECTED] ou [EMAIL PROTECTED] Links do Yahoo! Grupos <*> Para visitar o site do seu grupo na web, acesse: http://br.groups.yahoo.com/group/delphi-br/ <*> Para sair deste grupo, envie um e-mail para: [EMAIL PROTECTED] <*> O uso que você faz do Yahoo! Grupos está sujeito aos: http://br.yahoo.com/info/utos.html