Fórum ListBox #213071
10/02/2004
0
iNumItemLista := lbAux.Count; for iCont := 1 to iNumItemLista do begin if Trim(Copy(lbAux.Items[iCont], 18,1)) <> ´*´ then begin lbAux.Items.Delete(iCOnt); Dec(iNumItemLista); continue; end; end;
Alguém tem uma outra solução?
Marcela
Curtir tópico
+ 0Posts
10/02/2004
Ronaldo
No lugar de ´for iCont := 1 to iNumItemLista do ´
tente ´for iCont := 0 to iNumItemLista - 1 do ´
As listas no delphi, normalmente, começam em zero~.
Gostei + 0
10/02/2004
Marcela
Gostei + 0
10/02/2004
Ronaldo
begin
icont := 0;
while iCont < lbAux.Count do
begin
if Trim(Copy(lbAux.Items[iCont], 18,1)) <> ´*´ then
begin
lbAux.Items.Delete(iCOnt);
continue;
end
else
inc(icont);
end;
Deculpe, eu não tinha prestado atençao na lógica que você utilizou.
Gostei + 0
10/02/2004
Beppe
Pode ser um while tb:
I := lbAux.Count - 1; // começa do fim :o while I >= 0 do begin if lbAux.Items[I][18] <> ´*´ then lbAux.Items.Delete(I); Dec(I); end;
Mas um esquema melhor seria este, criando uma nova lista:
var T: TStringList; I: Integer; S: String; begin T := TStringList.Create; try for I := 0 to lbAux.Count - 1 do begin S := lbAux.Items[I]; if S[18] = ´*´ then T.Add(S); end; finally lbAux.Items.Clear; lbAux.Items.AddStrings(T); T.Free; end; end;
Só ´testei´ de cabeça, mas acho que dará certo. Veja qua agora pode ser um for...to...do, já que a lista original não é mexida.
T+
Gostei + 0
11/02/2004
Fabio.hc
Coloque no listbox a propriedade multselect = true;
for iCont := 0 to lbAux-1 do lbAux.Selected[iCont]:=Trim(Copy(lbAux.Items[iCont], 18,1)) <> ´*´; lbAux.DeleteSelected;
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)