Ajuda com While Que não Funciona
Boa tarde!!! Alguém pode me ajudar!!!
Tenho um dbgrid aonde eu seleciono o números de telefone, quero que quando, eu clicar no botão abrir navegador, ele executa o shellexecute(abre o navegador faz o que está no timer, fecha o navegador e passa para o próximo número de telefone), só que no while ele executa só o último registro e se eu mudo o shellexecute para dentro do while, ele abre todos os contatos de uma vez, se eu tiver 10 contatos, ele abre os 10 ou seja abre 10 navegadores, eu não quero isso, quero que abre um por vez, só passar para o próximo assim que fechar o navegador,ai sim ele passa para o próximo.
Tenho um dbgrid aonde eu seleciono o números de telefone, quero que quando, eu clicar no botão abrir navegador, ele executa o shellexecute(abre o navegador faz o que está no timer, fecha o navegador e passa para o próximo número de telefone), só que no while ele executa só o último registro e se eu mudo o shellexecute para dentro do while, ele abre todos os contatos de uma vez, se eu tiver 10 contatos, ele abre os 10 ou seja abre 10 navegadores, eu não quero isso, quero que abre um por vez, só passar para o próximo assim que fechar o navegador,ai sim ele passa para o próximo.
procedure TForm1.Button1Click(Sender: TObject); begin Clipboard.AsText := memoMensagem.Text; begin cdsGrid.Filter := ''''''''SELECIONA = '''''''' + QuotedStr(''''''''S''''''''); // filtra os registros selecionados cdsGrid.Filtered := True; // ativa o filtro cdsGrid.First; // posiciona o cursor no primeiro registro while not cdsGrid.Eof do begin while not cdsGrid.Eof do begin cdsGrid.Edit; edtNumero.Text := cdsGrid.FieldByName(''''''''TELEFONE'''''''').AsString; timerBtnAbrirNavegador.Interval := 20500; timerBtnAbrirNavegador.Enabled := True; timerBtnFecharNavegador.Interval := 30000; timerBtnFecharNavegador.Enabled := True; cdsGrid.Next; end; ShellExecute(Handle,''''''''Open'''''''',''''''''firefox.exe'''''''',PChar(edtUrl.Text + edtNumero.Text),''''''''C:\\\\\\\\\\\\\\\\Arquivos de programas\\\\\\\\\\\\\\\\Mozilla Firefox'''''''', SW_SHOWNORMAL); cdsGrid.Next; end; end; end;
Bruno Henrique
Curtidas 0
Melhor post
Emerson Nascimento
10/09/2018
há while demais no seu código. o while mais interno está varrendo todos os registros, posicionando no último, e só depois o shellexecute é chamado.
tente assim:
tente assim:
procedure TForm1.Button1Click(Sender: TObject); begin Clipboard.AsText := memoMensagem.Text; cdsGrid.Filter := 'SELECIONA = ' + QuotedStr('S'); // filtra os registros selecionados cdsGrid.Filtered := True; // ativa o filtro cdsGrid.First; // posiciona o cursor no primeiro registro while not cdsGrid.Eof do begin edtNumero.Text := cdsGrid.FieldByName('TELEFONE').AsString; timerBtnAbrirNavegador.Interval := 20500; timerBtnAbrirNavegador.Enabled := True; timerBtnFecharNavegador.Interval := 30000; timerBtnFecharNavegador.Enabled := True; ShellExecute(Handle,'Open','firefox.exe',PChar(edtUrl.Text + edtNumero.Text),'C:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\Arquivos de programas\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\Mozilla Firefox', SW_SHOWNORMAL); cdsGrid.Next; end; end;
GOSTEI 1
Mais Respostas
Emerson Nascimento
10/09/2018
Aliás, você também pode habilitar os 'timer' fora do while:
procedure TForm1.Button1Click(Sender: TObject); begin Clipboard.AsText := memoMensagem.Text; cdsGrid.Filter := 'SELECIONA = ' + QuotedStr('S'); // filtra os registros selecionados cdsGrid.Filtered := True; // ativa o filtro cdsGrid.First; // posiciona o cursor no primeiro registro timerBtnAbrirNavegador.Interval := 20500; timerBtnAbrirNavegador.Enabled := True; timerBtnFecharNavegador.Interval := 30000; timerBtnFecharNavegador.Enabled := True; while not cdsGrid.Eof do begin edtNumero.Text := cdsGrid.FieldByName('TELEFONE').AsString; // esta linha é realmente necessária? ShellExecute(Handle,'Open','firefox.exe',PChar(edtUrl.Text + edtNumero.Text),'C:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\Arquivos de programas\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\Mozilla Firefox', SW_SHOWNORMAL); cdsGrid.Next; end; end;
GOSTEI 1
Bruno Henrique
10/09/2018
Boa tarde, Emerson! Primeiramente, muito obrigado pela atenção!!!
edtNumero.Text := cdsGrid.FieldByName('TELEFONE').AsString; // esta linha é realmente necessária?
Então, como são vários números e eles estão em um clientdataset, para ir abrindo no navegador, foi o único que achei de jogar no edit, tem outro jeito???
Grato
edtNumero.Text := cdsGrid.FieldByName('TELEFONE').AsString; // esta linha é realmente necessária?
Então, como são vários números e eles estão em um clientdataset, para ir abrindo no navegador, foi o único que achei de jogar no edit, tem outro jeito???
Grato
GOSTEI 0
Bruno Henrique
10/09/2018
Vou adaptar aqui!!! Posto o resultado.
Grato
Grato
GOSTEI 0
Bruno Henrique
10/09/2018
Boa noite!!!
Então, ainda estou sem solução!O while não deu certo, e continua executando apenas um registro, ele não passa para o próximo, faz a ação só no primeiro registro, fiz como orientado mas não deu certo.Qual ajuste posso fazer?
Então, ainda estou sem solução!O while não deu certo, e continua executando apenas um registro, ele não passa para o próximo, faz a ação só no primeiro registro, fiz como orientado mas não deu certo.Qual ajuste posso fazer?
procedure TForm1.Button1Click(Sender: TObject); begin Clipboard.AsText := memoMensagem.Text; cdsGrid.Filter := 'SELECIONA = ' + QuotedStr('S'); // filtra os registros selecionados cdsGrid.Filtered := True; // ativa o filtro cdsGrid.First; // posiciona o cursor no primeiro registro while not(cdsGrid.eof) do begin cdsGrid.Edit; edtNumero.Text := cdsGrid.FieldByName('TELEFONE').AsString; ShellExecute(Handle,'Open','firefox.exe',PChar(edtUrl.Text + edtNumero.Text),'C:\\Arquivos de programas\\Mozilla Firefox', SW_SHOWNORMAL); cdsGrid.Next; cdsGrid.Last; end; timerBtnAbrirNavegador.Interval := 30000; timerBtnAbrirNavegador.Enabled := True; timerBtnFecharNavegador.Interval := 45000; timerBtnFecharNavegador.Enabled := True; end;
GOSTEI 0
Bruno Henrique
10/09/2018
Bom dia!!!
Ainda estou sem solução!!! Alguém poderia me ajudar?
Ainda estou sem solução!!! Alguém poderia me ajudar?
GOSTEI 0
Raimundo Pereira
10/09/2018
Boa noite
Chama no skype sac@p2tecnico.com.br
Chama no skype sac@p2tecnico.com.br
GOSTEI 0
Emerson Nascimento
10/09/2018
porque você adicionou o cdsGrid.Last ??? desta forma o programa vai executar o primeiro e registro e depois sair do laço.
GOSTEI 0
Bruno Henrique
10/09/2018
P2. Te add!!! Obrigado!!!
GOSTEI 0
Bruno Henrique
10/09/2018
Emerson, boa noite!!!
Desculpa, vacilei com o cdsGrid.Last, agora deu certo, funcionou como eu queria.Muito Obrigado pela atenção!!!
Abraços
Desculpa, vacilei com o cdsGrid.Last, agora deu certo, funcionou como eu queria.Muito Obrigado pela atenção!!!
Abraços
GOSTEI 0