Visualizzazione dei risultati da 1 a 6 su 6
  1. #1

    [Delphi]Cancellazione di una riga ogni 3 stampe su listbox.

    Salve a tutti,
    sono alle primissime armi con la programmazione in Delphi, lo svolgo per mezzo della scuola in cui pratico informatica e dunque programmazione. Avrei un compito per casa da svolgere, ma sono incappato in un piccolo errore x'D in pratica dovevo svolgere un applicazione che permettesse, inserito un elenco di persone con rispettiva età, di contare quanti fossero maggiorenni. Non ho avuto alcun problema fino a quando non mi è venuta in mente la brillante idea di inserire un contatore che mi permettesse, ogni tre stampe su listbox (quindi ogni tre righe), di cancellare il contenuto della listbox stessa. Il problema è che va in crash e continua a darmi un messaggio che c'è successivamente \:

    Vi allego qui di seguito il codice, sperando che qualcuno mi aiuti a individuare l'errore e darmi una possibile soluzione:

    codice:
    var
      Form1: TForm1;
      C:integer;
      Cont:integer;
      N:string[15];
      E:integer;
    
    procedure TForm1.btn1Click(Sender: TObject);
    begin
     Cont:=0;
     while Cont<=3 do
     begin
      C:=0;
      Showmessage('Per interrompere l''inserimento delle persone premere asterisco ''*'' ');
      N:=inputbox('Inserisci il Nome', 'Nome:', '');
      while N<>'*' do
       begin
       E:=strtoint(inputbox('Inserisci l''Età', 'Età', ''));
       if E>=18 then
       C:=C+1;
       N:=inputbox('Inserisci il Nome', 'Nome:', '');
       end;
      if C=0 then
      Showmessage('Non ci sono Maggiorenni nell''elenco fornito in precedenza!')
      else lst1.Items.Add('Le persone Maggiorenni nell''elenco da lei fornito in precedenza sono:' + inttostr(C));
     end;
     lst1.Clear;
    end;
    Grazie in anticipo a tutti quelli che mi soccorreranno xD

  2. #2
    Ciao,
    Ho capito un po il codice che hai scritto, ma non sono riuscito a comprendere perchè tu voglia ogni tra righe inserite nella listbox, cancellare il contenuto della stessa:
    A cosa ti serve la listbox?

  3. #3
    Diciamo che ero partito che avrebbe dovuto essere un 'più', una cosa che rendesse il mio lavoro unico rispetto a quello dei miei compagni di classe xD Ora però che ho tentato a fare questa cosa non riesco a comprendere il mio sbaglio, il codice dovrebbe essere uguale al 'while' usato da me in precedenza, ma invece è errato, boh. Non capisco.

    La listbox mi serve a stampare il risultato della applicazione, dove dovrei stamparlo?

  4. #4
    Utente di HTML.it
    Registrato dal
    Dec 2002
    Messaggi
    1,326
    ciao

    inserisci i dati in una maniera che non mi sembra la migliore....

    cerca sempre di usare variabili con un nome facile da ricordare.


    codice:
    var
      Form1: TForm1;
      Maggiorenni:Integer;
      Nome:string[15];
      Eta:integer;
      c:Integer;
    
    
    implementation
    
    {$R *.dfm}
    
    procedure TForm1.Button1Click(Sender: TObject);
    begin
     Showmessage('Per interrompere l''inserimento delle persone premere asterisco ''*'' ');
     Maggiorenni:=0;
    
     while true do
     begin
      C:=c+1;
      Nome:=inputbox('Inserisci il Nome', 'Nome:', '');
      if Nome='*' then break;
    
      Eta:=strtoint(inputbox('Inserisci l''Età', 'Età', ''));
    
      if Eta>=18 then Maggiorenni:=Maggiorenni+1;
    
      Lst1.Items.Add(Nome+'  '+inttostr(Eta));
      lst1.Update;
    
      if c=3 then lst1.Clear;
     end;
    
     if Maggiorenni=0 then
      Showmessage('Non ci sono Maggiorenni nell''elenco fornito in precedenza!')
     else
      Showmessage('Le persone Maggiorenni nell''elenco da lei fornito in precedenza sono:' + inttostr(Maggiorenni));
    
    end;
    ciao

  5. #5
    Allora, togliendo quel 'più' della listbox (Casomai vedrò dopo di cimentarmi ma in realtà non ho proprio capito come dovresti utilizzare la listbox... cioè tu vorresti fare un report ogni 3 inserimenti? spiegami meglio) comunque ho ricostruito il codice trovando delle imperfezioni. te lo scrivo poi commento:

    codice:
    procedure TForm1.Button1Click(Sender: TObject);
    begin
    Cont:=0;
    C:=0; 
    C:=0;
    ShowMessage('Per interrompere l''inserimento delle persone premere asterisco ''0'' ');       while N<>'0' do
    begin
    N:=InputBox('Inserisci il Nome', 'Nome:', '');
    E:=StrToInt(N);
    if E>=18 then C:=C+1;
    end;
    if C=0 then
    ShowMessage('Non ci sono Maggiorenni nell''elenco fornito in precedenza!')
    else lst1.Items.Add('Le persone Maggiorenni nell''elenco da lei fornito in precedenza sono:' + inttostr(C));
    end;
    1) Intanto non puoi inserire l'asterisco come discriminante di fine inserimento perchè poi nel codice devi chiedere di convertire l'inserimento da STRING a INTEGER e un asterisco ovviamente fa andare in palla il povero delphi potresti ovviare al problema (io ci sto provando a fare un codice che selezioni ogni carattere) ma se hai detto che sei alle prime armi meglio lasciar perdere: Ti ho messo come discriminante lo "0"

    2) Tu hai fatto in while al contatore Cont ma poi non hai fatto andare avanti il contatore che è rimasto fermo a Cont:= 0, mentre dovevi inserire anche un Cont:= Cont +1;

    3) non ricordo che altro ho cambiato, comunque prova questo se non capisci qualcosa chiedi pure.

    Ciaociaoe buon lavoro

  6. #6
    Originariamente inviato da 123delphi321
    ciao

    inserisci i dati in una maniera che non mi sembra la migliore....
    Dici? xD a me questa hanno insegnato

    Grazie mille a entrambi comunque per le risposte! ^^ gentilissimi.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2026 vBulletin Solutions, Inc. All rights reserved.