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

    [DELPHI] Cancellare riga da Memo

    Salve a tutti!Sono nuovo del forum e volevo porvi questo mio problemino.
    Premetto che sono all'inizio del quarto anno di ITIS e al secondo di informatica.
    Il professore mi ha dato un compito abbastanza facile (da sviluppare in Lazarus,freepascal),che faccia semplici cose.
    In pillole:
    Vi sono 4 campi edit,ognuno con nome,cognome,anni e altezza da inserire.
    Questi dati poi vanno ordinati in una Tmemo,fino a qui nessun problema!
    Ho ragionato anche come fare a scrivere nella prima linea della Tmemo,e ho creato un bottone aggiuntivo per cancellare il contenuto della memo.Ne ho creato anche un altro per far si che si svuotino le edit,e si inseriscano più persone nella memo stessa (tutte funzioni addizionali,miro ad un voto alto!).
    Ora,la funzione più complessa del programma è quella che,inserito il cognome in una quinta edit,questo faccia riferimento alla persona della Tmemo,e la cancelli!In caso di cognomi doppi deve cancellare solo la prima che trova...come si fa??
    Io ho provato ma non mi esegue niente sto bottone!Posto qui in basso tutte le istruzioni fatte da me,correggetemi e consigliatemi in tutte!!!
    Grazie dell'attenzione
    (Il bottone a cui faccio riferimento è il TForm1.Button2)


    implementation
    VAR
    persona:record
    cognome:string[15];
    nome:string[15];
    eta:integer;
    altezza:real;
    end;

    { TForm1 }

    procedure TForm1.Button1Click(Sender: TObject);

    begin
    persona.cognome:=edit1.text;
    persona.nome:=edit2.text;
    persona.eta:=strtoint(edit3.text);
    persona.altezza:=strtofloat(edit4.text);
    memo1.lines.add(persona.cognome+' '+persona.nome+','+inttostr(persona.eta)+' anni - '+floattostr(persona.altezza)+'m');

    end;

    procedure TForm1.Button2Click(Sender: TObject);
    var
    cancella:string;
    lun:integer;
    poz:integer;
    i:integer;
    luno,ldue:integer;
    Line:string;
    begin
    cancella:=edit5.text;
    for i:=0 to 100 do
    begin
    poz:=pos(cancella,persona.cognome);
    luno:=length(persona.cognome);
    ldue:=length(cancella);
    Line:=Memo1.Lines[i];
    lun:=length(Line);
    if luno=ldue then
    if poz=1 then delete(Line,1,lun)
    end;
    end;

    procedure TForm1.Button3Click(Sender: TObject);
    begin
    edit1.text:='';
    edit2.text:='';
    edit3.text:='';
    edit4.text:='';
    end;

    procedure TForm1.Button4Click(Sender: TObject);
    begin
    Memo1.lines.text:='';
    end;

  2. #2

    re

    codice:
    procedure TForm1.Button2Click(Sender: TObject);
    var
    cancella:string;
    i:integer;
    begin
    cancella:=edit5.text;
    for i:=0 to memo1.lines.count-1 do
    if copy(memo1.lines.string[i],1,length(cancella)=cancella then
    begin
    memo1.delete(i);
    exit;
    end;
    end;
    Ciao, con questo codice eseguo un ciclo che scorre tutte le righe della tmemo. Per ogni riga vedo se la stringa che si trova nella tmemo, estrapolata grazie al comando copy, corrisponde al valore assegnato a "cancella".
    Nel caso in cui la condizione dell'if risulti essere esatta elimino la riga della tmemo ed esco dal ciclo. In caso contrario passo alla riga successiva.
    Ciao!

  3. #3
    Scusa con che programma l'hai sviluppato?Su foglio x caso?
    Xkè questa stringa:

    if copy(memo1.lines.string[i],1,length(cancella)=cancella then

    mi viene riconosciuta come errore sia in Delphi che in Lazarus..come se sto string nn viene riconosciuto!Ricontrolla per favore e fammi sapere...

  4. #4

    re

    Errata corrige strings non string...cmq Delphi

  5. #5
    A me continua a darmi errore..non so..cm è possibile??

  6. #6
    L'ho compilato adesso ed ho trovato qualche errore di sintassi...cmq lo scopo di questo forum e di indirizzare verso la/le soluzioni i vari utenti....bastava sbatterci la testa un po'...cmq

    codice:
    procedure TForm1.Button2Click(Sender: TObject);
    var
    cancella:string;
    i:integer;
    begin
    cancella:=edit5.text;
    for i:=0 to memo1.lines.count-1 do
    if copy(memo1.lines.strings[i],1,length(cancella))=cancella then
    begin
    memo1.Lines.Delete(i);
    exit;
    end;
    end;
    ciao!

  7. #7
    Hai ragione,la parentesi non chiusa..ecc..a quest'ora con la stanchezza che ho non vedo nulla :S comunque grazie 1000 la soluzione era molto più facile delle cose che stavo facendo io,sei stato molto d'aiuto!

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 © 2024 vBulletin Solutions, Inc. All rights reserved.