Ver Mensaje Individual
  #1  
Antiguo 09-04-2008
Avatar de lag_0
lag_0 lag_0 is offline
Miembro
 
Registrado: jul 2006
Posts: 131
Reputación: 18
lag_0 Va por buen camino
TListview y añadir elementos...

Buenas!!
Pues nada, tengo un codigo que me va LENTISIMO y todo en la parte en la que añado los elementos a mi TListview...

Lo hago así:
Código Delphi [-]
var
  TempI,TempII,foundby:integer;
  tempb:bool;
  filtrados:integer;
  TempSna,TempSdn,TempSip,TempSmo:string;
  TiT : TListItem;
begin
  //Mostramos la DB
    AllStatus(False);
    filtrados := 0;
    comparacionaeservista.Clear;
    for TempI := 0 to aerodbreplist.Items.Count-1 do begin
      application.ProcessMessages;
      foundby := -1;
      TempSna := aerodbreplist.Items.Item[TempI].Caption;
      TempSdn := aerodbreplist.Items.Item[TempI].SubItems.Strings[0];
      TempSip := aerodbreplist.Items.Item[TempI].SubItems.Strings[1];
      TempSmo := aerodbreplist.Items.Item[TempI].SubItems.Strings[2];
      TempII:=0;
      while TempII < getsoksek.Items.count do begin
        if TraduceSMtoDB('i',TempSip,getsoksek.Items.Item[TempII].SubItems.Strings[1]) then begin
          foundby := TempII;
          TempII := getsoksek.items.count;
        end else if TraduceSMtoDB('d',TempSdn,getsoksek.Items.Item[TempII].SubItems.Strings[0])  then  begin
          foundby := TempII;
          TempII := getsoksek.items.count;
        end else if TraduceSMtoDB('n',TempSNA,getsoksek.Items.Item[TempII].Caption)  then begin
          foundby := TempII;
          TempII := getsoksek.items.count;
        end;
        TempII := TempII + 1;
      end;
      if foundby > -1 then begin
        TiT := comparacionaeservista.Items.Add;
        TiT.Caption := aerodbreplist.Items.Item[TempI].Caption;
        Tit.SubItems.Add(getsoksek.Items.Item[foundby].Caption);
        Tit.SubItems.Add(aerodbreplist.Items.Item[TempI].SubItems.Strings[0]);
        Tit.SubItems.Add(getsoksek.Items.Item[foundby].SubItems.Strings[0]);
        Tit.SubItems.Add(aerodbreplist.Items.Item[TempI].SubItems.Strings[1]);
        Tit.SubItems.Add(getsoksek.Items.Item[foundby].SubItems.Strings[1]);
        Tit.SubItems.Add(aerodbreplist.Items.Item[TempI].SubItems.Strings[2]);
        Tit.SubItems.Add(getsoksek.Items.Item[foundby].SubItems.Strings[2]);
        Tit.SubItems.Add(aerodbreplist.Items.Item[TempI].SubItems.Strings[3]);
        Tit.SubItems.Add(getsoksek.Items.Item[foundby].SubItems.Strings[3]);
        Tit.SubItems.Add(getsoksek.Items.Item[foundby].SubItems.Strings[4]);
        Tit.SubItems.Add('');
      end else begin
        TiT := comparacionaeservista.Items.Add;
        TiT.Caption := aerodbreplist.Items.Item[TempI].Caption;
        Tit.SubItems.Add('N/A');
        Tit.SubItems.Add(aerodbreplist.Items.Item[TempI].SubItems.Strings[0]);
        Tit.SubItems.Add('N/A');
        Tit.SubItems.Add(aerodbreplist.Items.Item[TempI].SubItems.Strings[1]);
        Tit.SubItems.Add('N/A');
        Tit.SubItems.Add(aerodbreplist.Items.Item[TempI].SubItems.Strings[2]);
        Tit.SubItems.Add('N/A');
        Tit.SubItems.Add(aerodbreplist.Items.Item[TempI].SubItems.Strings[3]);
        Tit.SubItems.Add('N/A');
        Tit.SubItems.Add('N/A');
        Tit.SubItems.Add('');
      end;
    end;
[etc...]

No tengo ni idea como puedo hacerlo mas rapido el Tit.... pero es tremendamente lento ... Y por cierto, el primer while es MUY rapido así que no me digais que será por eso por que no... tengo más que debugeado que el retardo enorme está en la parte de "TiT := comparacionaeservista.Items.Add;"...
Hay otra forma mejor? Gracias!!

Vale, si, ya se que hago muchos "application.ProcessMessages;", pero cuando no los hago va igual de lentro y además necesito hacerlo por que no puedo dejar la aplicación en modo colgado...

Muchas gracias...

Última edición por lag_0 fecha: 09-04-2008 a las 14:28:24.
Responder Con Cita