21. juni 2003 - 15:19Der er
10 kommentarer og 1 løsning
Gemmer ikke indhold af listboxe
Jeg har følgende i et program (Delphi 2.0):
procedure TForm1.gemClick(Sender: TObject); var Ud : String; begin AssignFile(RFil,Sti); Rewrite(RFil); Ud := '';
for i := 0 to LB1.Items.Count - 1 do begin if LB1.Selected[i] then begin FOR j := 0 to Memo1.Lines.Count - 1 DO Ud := Ud + Memo1.Lines[j]; { MEMO1 indeholder Beskrivelse af Varenummer }
BRec.Beskrivelse := Ud; Label1.Caption := LB1.Items[i]+' skrives'; { Kontrol af aktivitet } end; { IF LB1 .. }
procedure TForm1.gemClick(Sender: TObject); var Ud : String; f, n : Byte; begin AssignFile(RFil,Sti); Rewrite(RFil); Ud := '';
for f := 0 to Max - 1 do begin BRec.Varenummer := LB1.Items[f]; BRec.Pris := LB2.Items[f];
if LB1.Selected[f] then begin FOR n := 0 to Memo1.Lines.Count - 1 DO begin Ud := Ud + Memo1.Lines[n]; END; BRec.Beskrivelse := Ud; Label1.Caption := LB1.Items[f] + ' skrives.'; end; { IF LB1 ... }
Write(RFil,BRec); end; { IF f := 0 .. } CloseFile(RFil); end;
Fik kun det 1. element blev gemt; men fik så samme fejlmeddelelse.
i,j: integer; // ikke bytes (kan jo være flere end 255 elementer/linjer) brec: beskrivRec; //prøv så vidt muligt at definere variable // i samme scope som koden de bruges i
...samme rewrite(rfil,sizeof(brec)); //sizen skal med ellers bruges 128 (!) ...det samme her ud:=''; //bemærk at beskrivelsen altid skal sættes (tom streng hvis ingen) if lb1.selected[f] then for n:=0 to memo1.lines.count-1 do ud:=ud+memo1.lines[n]; brec.beskrivelse:=ud; ...det samme her
Ellers ser det rigtigt ud men prøv at singel steppe og se hvilke værdier der puttes i brec.
procedure TForm1.gemClick(Sender: TObject); var i, j : Byte; Ud : String[255]; begin Ud := ''; for i := 0 to LB1.Items.Count - 1 do begin if LB1.Selected[i] then begin AssignFile(RFil,Sti); Reset(RFil); Seek(RFil,i);
FOR j := 0 to Memo1.Lines.Count - 1 DO Ud := Ud + Memo1.Lines[j]; BRec.Beskrivelse := Ud;
Write(RFil,BRec); CloseFile(RFil); Label1.Caption := LB1.Items[i]+' skrives'; end; { IF LB1 ... } end; { for i := ... } end;
Fint med mig, men du bør ændre byte til integer og osse bruge string istedet for string[255]. Desuden vil reset(rfil,sizeof(brec)) være rigtigt ellers er der altså max 128 bytes tilrådighed i en record.
...du kunne sætte en break ind som det sidste i if-begin-blokken så undgår du at skulle loope alle igennem, faktisk kunne du bruge lb1.itemIndex som indeholder det selectede element, eller -1 hvis ingen valgt, istedet for dit loop !
Meningen er nemlig, at man kun kan vælge 1 element ad gangen, da proceduren er rent imidlertidig. Altså indtil alle Beskrivelser er gemt. Jeg regner ikke med, at beskrivelserne skal ændres, når de først er gemt.
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.