|
| Listbox hjælp Fra : Peter Arnholm |
Dato : 13-09-01 15:54 |
|
Jeg har en listbox med en masse text i. Jeg vil gerne have slettet alt text
fra top
til en bestemt text. Men noget går galt i koden og jeg kan ikke lige se
hvad.
Nogen der kan hjælpe ?
var
i,r:Integer;
begin
i:=0;
r:=Listbox1.items.IndexOf('tracks');
try
repeat
ListBox1.Items.delete(i);
Inc(i);
until
(i = r)
except on E:exception do
begin
blablabla
| |
Peter Arnholm (13-09-2001)
| Kommentar Fra : Peter Arnholm |
Dato : 13-09-01 16:03 |
|
"Peter Arnholm" <PeterArnholm@mail.dk> skrev i en meddelelse
news:3ba0c844$0$89073$edfadb0f@dspool01.news.tele.dk...
> Jeg har en listbox med en masse text i. Jeg vil gerne have slettet alt
text
> fra top
> til en bestemt text. Men noget går galt i koden og jeg kan ikke lige se
> hvad.
> Nogen der kan hjælpe ?
Doh, nevermind
--
PA
| |
Roald Henriksen (13-09-2001)
| Kommentar Fra : Roald Henriksen |
Dato : 13-09-01 22:48 |
|
Lige en lille finte:
Når du sletter noget i en liste er denne syntaks den bedste at anvende:
for a:= x downto y do....
Læg mærke til at der tælles ned (downto). Det er nødvendigt, fordi antallet
af linier jo hele tiden mindskes med 1 for hvert gennemløb.
Eksempel:
Liste med 20 linier. Der ønskes slettet fra linie 15 til 18.
for a:= 18 downto 15 do....
Det virker hver gang, men se nu her:
for a:= 15 to 18 do....
Av, av, her er overløb, når du forsøger at fjerne en linie, der ikke længere
er i listen.
Mvh RH
| |
Lars Bargmann (14-09-2001)
| Kommentar Fra : Lars Bargmann |
Dato : 14-09-01 09:17 |
|
"Roald Henriksen" <mail@pentagon-electric.dk> wrote in message
news:BP9o7.3381$lk7.72295@news.get2net.dk...
> Lige en lille finte:
> Når du sletter noget i en liste er denne syntaks den bedste at anvende:
> for a:= x downto y do....
> Læg mærke til at der tælles ned (downto). Det er nødvendigt, fordi
antallet
> af linier jo hele tiden mindskes med 1 for hvert gennemløb.
>
> Eksempel:
> Liste med 20 linier. Der ønskes slettet fra linie 15 til 18.
>
> for a:= 18 downto 15 do....
> Det virker hver gang, men se nu her:
> for a:= 15 to 18 do....
> Av, av, her er overløb, når du forsøger at fjerne en linie, der ikke
længere
> er i listen.
>
> Mvh RH
>
Desuden bliver elementerne jo rykkes "nedad" i listen når et foran-liggende
element bliver slettet...
Eks : En liste med 5 elementer [0..4]. Man sletter element 0, hvorefter de
resterende elementer bliver rykket nedad. Der må nødvendigvis også ligge
noget processortid der bliver spildt her. I det spørgsmål som Peter Arnholm
stiller vil han jo (udover den ineffektive sletning af elementer) første
gang slette element 0, derefter element 2, derefter element 4 og så
videre...
Det eneste eksempel jeg lige kan komme på, hvor en while/repeat løkke ville
være rigtigt, er ved gennemløb af en liste, med det formål at slette
elementer som matcher bestemte kriterier.... Eks :
i := 0;
While i < TheList.Count do
begin
if MatcherKriterie(TheList[i]) then
TheList.Delete(i)
else
Inc(i);
end;
Bargmann...
- Definition of upgrade: Take old bugs out; put new ones in.
| |
|
|