• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

M.offspring.R

[Ajuda] Continuar com os campos todos preenchidos

5 mensagens neste tópico

Boas.

Nestes dias lembrei-m de mecher em delphi (coisa que não fazia desde julho  ;) ), então lembrei-m de fazer um cena para registar a minha colecção de CDs. Isto é mais um projecto para relembrar cenas ja esquecidas e para a brincadeira, no entanto tenho uma duvida que não consigo resolver e decidi colocar aqui a duvia.

Num form eu tenho 5 campos, campos esses que temos que inserir os dados... até qui nada de novo... o que acontece é o seguinte, é que estes campos teem que ficar todos preenchidos, senão o programa não guarda o cd em questao.

Aqui deixo o codigo para os entendidos da matéria me darem uma mãozinha.

o código ca vai:

procedure Tformdocumen.Registar1Click(Sender: TObject);
var i:integer;
    s,s1,s2,s3,s4,s5,x:string;
    f:textfile;

begin
      // Novo
      new(ARecord);                      // cria o record
      if (edit1.Text = '') then
          showmessage('Insira o nome do documentário para continuar o registo.')
      else
      begin
          s:=edit1.Text;
          ARecord^.nome:=s;
      end;
      if (edit2.Text = '') then
          showmessage('Insira as legendas para continuar o registo.')
      else
      begin
          s:=edit2.Text;
          ARecord^.legendas:=s;
      end;
      if (edit3.Text = '') then
          showmessage('Insira a duração para continuar o registo.')
      else
      begin
          s:=edit3.Text;
          ARecord^.duracao:=s;
      end;
      if (edit4.Text = '') then
          showmessage('Insira o formato para continuar o registo.')
      else
      begin
          s:=edit4.Text;
          ARecord^.formato:=s;
      end;
      if (edit5.Text = '') then
          showmessage('Insira a localização para continuar o registo.')
      else
      begin
          s:=edit5.Text;
          ARecord^.localizacao:=s;
      end;


      Lista_docs.Add(Arecord);

      //verifica se todos os campos estao preenchidos
      if (edit1.Text = '') or (edit2.Text = '') or (edit3.Text = '') or (edit4.Text = '') or (edit5.Text = '')then
      begin
          showmessage('Preencha os campos vazios para continuar.');
          //bloqueia os campos para nao se inserir mais
          edit1.Enabled := false;
          edit2.Enabled := false;
          edit3.Enabled := false;
          edit4.Enabled := false;
          edit4.Enabled := false;
          edit5.Enabled := false
      else
      begin
        assignfile(f,'documentarios.txt');
        {$I-}
        rewrite(f);
        {$I+}
        if IOResult = 0 then
        begin
          for i:=0 to (Lista_docs.count-1) do
          begin
            ARecord:=Lista_docs.Items[i];
            s1:=Arecord^.nome;
            s2:=Arecord^.legendas;
            s3:=Arecord^.duracao;
            s4:=Arecord^.formato;
            s5:=Arecord^.localizacao;
            writeln(f,s1);
            writeln(f,s2);
            writeln(f,s3);
            writeln(f,s4);
            writeln(f,s5);
          end;
        closefile(f);
        MessageDlg('Dados registados com sucesso.', mtInformation,[mbOk], 0);

        end
      else
      begin
        MessageDlg('Erro ao aceder ao ficheiro.', mtError,[mbOk], 0);
      end;
      end;




    //bloqueia os campos para nao se inserir mais
    edit1.Enabled := false;
    edit2.Enabled := false;
    edit3.Enabled := false;
    edit4.Enabled := false;
    edit4.Enabled := false;
    edit5.Enabled := false;

    //activa o botao novo e desactiva o registar
    Novo1.Enabled := true;
    Registar1.Enabled := false;


end;

O que está a contecer, é mmo com os campos em branco ele regista, o que era suposto mostrar um aviso para preencher... so deve guardar no ficheiro se os campos tiverem todos preenchidos, caso contrario vai mostrando avisos...

Não sei se esta é a forma mais indicada para fazer o que quero, como ja dixe atrás, não toco nisto desde julho passado.

Cump.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

um problema ja resolvi, ou seja, tinha 1 erro num else pk faltava um end antes.

Mas agr a duvida inda continua, ou seja ele continua a registar os dados mmo com os campos limpos.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

ja consegui resolver mais 1 problema, agora surgiu outro.

Por exemplo, se nos deixar-mos os campos vazios e carregar-mos em registar ele mostra o(s) aviso(s) (este problema ja ta  ;) ), mas se escrever-mos em todos os campos e registar, ele nao so regista os "novos" dados (ou seja os dados inseridos correctamente) como insere os dados das edit's vazias, ficando do genero:

espaço_vazio
espaço_vazio
espaço_vazio
espaço_vazio
espaço_vazio
campo1teste
campo2teste
campo3teste
campo4teste
campo5teste

Era suposto so aparecer:

campo1teste
campo2teste
campo3teste
campo4teste
campo5teste

Alguem sabe como resolver isto??

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

bem com alguma dificuldade (para relembrar coisas ja esquecidas) la vou conseguindo sozinho fazendo aquilo que pretendo. No post anterior o que eu falava era simples:

if (edit1.Text = '') or (edit2.Text = '') or (edit3.Text = '') or (edit4.Text = '') or (edit5.Text = '')then
      begin
          showmessage('Preencha os campos vazios para continuar.');
          //bloqueia os campos para nao se inserir mais
          edit1.Enabled := true;
          edit2.Enabled := true;
          edit3.Enabled := true;
          edit4.Enabled := true;
          edit4.Enabled := true;
          edit5.Enabled := true;

bastava so acrescentar ao fim: Lista_docs.Clear;

E la consegui. Agora surgio outra, como e que faço para que a edit2 apenas "leve" com 1 simples "sim" ou "não", será assim:

      if (edit2.Text = '') or (  (edit2.Text ='Sim') <> (edit3.Text ='Nao') ) then
          showmessage('Insira as legendas para continuar o registo.')
      else

Eu tenho esse codigo, mas se carregar em registar ele regista e não mostra a mensagem (Insira as legendas para continuar o registo.) como era suposto  ;) .

Aguardo uma resposta em breve

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Ois

Tas 2 vezes a verificar se os campos estao preenchidos. Assim acho k fica melhor.

Acho k assim funciona, nao tenho a certeza pq o k fiz foi aki mm e nao experimentei.

Procedure Tformdocumen.SomeProc();
Begin
      // Novo
      new(ARecord);                      // cria o record

      s:=edit1.Text;
      ARecord^.nome:=s;
      s:=edit2.Text;
      ARecord^.legendas:=s;
      s:=edit3.Text;
      ARecord^.duracao:=s;
      s:=edit4.Text;
      ARecord^.formato:=s;
      s:=edit5.Text;
      ARecord^.localizacao:=s;

      Lista_docs.Add(Arecord);
End;

procedure Tformdocumen.Registar1Click(Sender: TObject);
var i:integer;
    s,s1,s2,s3,s4,s5,x:string;
    f:textfile;

begin
      //verifica se todos os campos estao preenchidos
      if (edit1.Text = '') or ((edit2.Text = 'sim') or (edit2.Text = 'nao')) or (edit3.Text = '') or (edit4.Text = '') or (edit5.Text = '')then
      begin
          showmessage('Preencha os campos vazios para continuar.');
          //bloqueia os campos para nao se inserir mais
          edit1.Enabled := false;
          edit2.Enabled := false;
          edit3.Enabled := false;
          edit4.Enabled := false;
          edit4.Enabled := false;
          edit5.Enabled := false
      else
      begin
        SomeProc;

        assignfile(f,'documentarios.txt');
        {$I-}
        rewrite(f);
        {$I+}
        if IOResult = 0 then
        begin
          for i:=0 to (Lista_docs.count-1) do
          begin
            ARecord:=Lista_docs.Items[i];
            s1:=Arecord^.nome;
            s2:=Arecord^.legendas;
            s3:=Arecord^.duracao;
            s4:=Arecord^.formato;
            s5:=Arecord^.localizacao;
            writeln(f,s1);
            writeln(f,s2);
            writeln(f,s3);
            writeln(f,s4);
            writeln(f,s5);
          end;
        closefile(f);
        MessageDlg('Dados registados com sucesso.', mtInformation,[mbOk], 0);

        end
      else
      begin
        MessageDlg('Erro ao aceder ao ficheiro.', mtError,[mbOk], 0);
      end;
      end;




    //bloqueia os campos para nao se inserir mais
    edit1.Enabled := false;
    edit2.Enabled := false;
    edit3.Enabled := false;
    edit4.Enabled := false;
    edit4.Enabled := false;
    edit5.Enabled := false;

    //activa o botao novo e desactiva o registar
    Novo1.Enabled := true;
    Registar1.Enabled := false;


end;

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora