sinnaelgen Skrevet 3. august 2008 Del Skrevet 3. august 2008 (endret) noen som klare å se hvorfor progrmmet hopper over koden : ENDRINGER :=TRUE; jeg har merker den med * procedure behandle113; var t,r:integer; ENDRINGER:BOOLEAN; LABEL GJENTAGELSE; begin find('113',ramme); // leter opp alle forekomster av 113 og plaser dem i listbox6 for t := 0 to listbox6.Items.Count - 1 do begin st:=listbox6.Items[t]; r:=rammeliste.Items.IndexOf(st); rammeliste.Items.Delete(r); end; GJENTAGELSE: ENDRINGER:=FALSE; for t := 0 to listbox6.Items.Count - 1 do begin for r:=0 to listbox6.Items.Count - 1 do begin st:=listbox6.Items[t]; sub11(1); st:=listbox6.Items[r]; sub11(2); if r <> t then begin if x1=x2 then begin if y2 =y1+h1 then begin ENDRINGER :=TRUE; * denne blir ignorert av programmet hvorfor // for kontroll Memo1.Lines.Add(''); memo1.Lines.Add(sta); memo1.Lines.Add(stb); ST:=FORMAT('%D,%D,%D,%D,%D,%S,%D-%D,%D-%D',[X1,Y1,113,B1,H1+H2,V0,0,B1,0,H1+H2]); memo1.Lines.Add(st); LISTBOX6.Items.Add(ST); LISTBOX6.ItemS.Delete(LISTBOX6.Items.IndexOf(STA)); LISTBOX6.ItemS.Delete(LISTBOX6.Items.IndexOf(STB)); EXIT; end; end; end; end; end; IF ENDRINGER THEN GOTO GJENTAGELSE; end; når en endring er gjort så hoppes det ut av rutinen . da skal verdien endringer være satt , slik at men gjentar rutinen hvis det er gjort endringer. hva er det som er feil eller som jeg har oversett ? Endret 3. august 2008 av elg-elg123 Lenke til kommentar
tasle Skrevet 4. august 2008 Del Skrevet 4. august 2008 Hva skjer med disse linjene i begin-end blokka? Blir de utført? Hvis ikke, så er det fordi at y2 = Y1 + h1 ikke slår til. Prøv å sett en debug break der, og sjekk verdiene av y2, y1 og h1. Memo1.Lines.Add (''); Memo1.Lines.Add (sta); Memo1.Lines.Add (stb); st:= Format ('%D,%D,%D,%D,%D,%S,%D-%D,%D-%D', [x1, Y1, 113, B1, h1 + H2, V0, 0, B1, 0, h1 + H2]); Memo1.Lines.Add (st); listbox6.Items.Add (st); listbox6.Items.Delete (listbox6.Items.IndexOf (sta)); listbox6.Items.Delete (listbox6.Items.IndexOf (stb)); Lenke til kommentar
sinnaelgen Skrevet 4. august 2008 Forfatter Del Skrevet 4. august 2008 (endret) det dom skjer: rutine utføres normalt helt til det punktet der variabelen "endringer" skal settes til true. den hoppes over og resten av rutine utføres. hele denne rutine blir altså utført en gang det ser det i memo1- feltet også under debuggingen - linje for linje siden denne variabelen ikke blir satt til true så kan jo heller ikke rutine gjentaes jeg har prøvd å plaser den delen litt lenger ned i koden , men det gjør ingen forskjell Endret 4. august 2008 av elg-elg123 Lenke til kommentar
tasle Skrevet 4. august 2008 Del Skrevet 4. august 2008 Nå har jeg ikke sett hele programmet ditt. Det kan tenkes at programmet hopper ut av prosedyren før linja IF ENDRINGER THEN GOTO GJENTAGELSE; ?? Jeg ser du har en Exit der et sted. Nå har jeg ikke sett hele programmet ditt. Det kan tenkes at programmet hopper ut av prosedyren før linjaIF ENDRINGER THEN GOTO GJENTAGELSE; ?? Jeg ser du har en Exit der et sted. Lenke til kommentar
sinnaelgen Skrevet 4. august 2008 Forfatter Del Skrevet 4. august 2008 exit er for å hoppe ut ja , men da skal variabelen endringer være satt til tue problemet er ikke at det hopper ut av prosedyren , men at variabelen "endringer" aldri blir satt til true. linjene nedenfor linjen der variabelen skal settes blir jo utført. jeg forsøke å gjøre det på en annen måte Lenke til kommentar
tasle Skrevet 4. august 2008 Del Skrevet 4. august 2008 Brukes variabelen Endringer andre steder i programmet? I så fall får du neppe denne til å stemme, siden den er deklarert lokalt for prosedyren. Kanskje du har to variabler med dette navnet, en global, og en lokal? Lenke til kommentar
sinnaelgen Skrevet 4. august 2008 Forfatter Del Skrevet 4. august 2008 (endret) tror ikke det. uansett jeg har endret koden til: procedure behandle113; var t,r:integer; ENDRINGER:BOOLEAN; LABEL GJENTAGELSE; begin find('113',ramme); for t := 0 to listbox6.Items.Count - 1 do begin st:=listbox6.Items[t]; r:=rammeliste.Items.IndexOf(st); rammeliste.Items.Delete(r); end; GJENTAGELSE: ENDRINGER:=FALSE; t:=-1; repeat inc(t); r:=-1; repeat inc(r); memo1.Lines.Add(format('%d %d',[t,r])); if r <> listbox6.items.count-1 then begin if t <> listbox6.items.count-1 then begin st:=listbox6.Items[t]; sub11(1); st:=listbox6.Items[r]; sub11(2); if r <> t then begin if x1=x2 then begin if y2 =y1+h1 then begin ENDRINGER :=TRUE; Memo1.Lines.Add(''); memo1.Lines.Add(sta); memo1.Lines.Add(stb); ST:=FORMAT('%D,%D,%D,%D,%D,%S,%D-%D,%D-%D',[X1,Y1,113,B1,H1+H2,V0,0,B1,0,H1+H2]); memo1.Lines.Add(st); LISTBOX6.Items.Add(ST); LISTBOX6.ItemS.Delete(LISTBOX6.Items.IndexOf(STA)); LISTBOX6.ItemS.Delete(LISTBOX6.Items.IndexOf(STB)); end; end; end; end; end; until r = listbox6.Items.Count-1; until t = listbox6.Items.Count-1; IF ENDRINGER THEN GOTO GJENTAGELSE; end; og det virker som det skal og alle memoene skal vekk. jeg har bera brukt dem som kontroll Endret 4. august 2008 av elg-elg123 Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå