Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   optimizar carga de lista y tpagecontrol!!!!!!! (https://www.clubdelphi.com/foros/showthread.php?t=46798)

david_uh 08-08-2007 19:50:22

optimizar carga de lista y tpagecontrol!!!!!!!
 
Hola foro
Estoy llenando un listbox con 8 mil entradas y este esta ubicado dentro de un TPageControl, peroal momento de la carga parpadea y primero aparece4 el grid luego el page controly despues los demas controles
la carga de la lista se hace en l evento create del form.
alguien sabe como optimizar esto o hacer que nohayqa tanto parpadeo, es como si aparece unaversion incomplete delfor y despues la version completa, realmente desagradable

gracias por cualquier aporte

jhonny 08-08-2007 20:21:20

Cual es el codigo con el cual cargas el ListBox?

david_uh 08-08-2007 20:25:16

Ok es este y lo llamo en el evento create

Código Delphi [-]
procedure Tfrm_IngPedidos.SetListas();
var ZListas: TZReadOnlyQuery;
    strSQL: String;
    i: Integer;
    m: Integer;
begin
        cbo_Cliente.Clear; 
        cbo_Vendedor.Clear;
        cbo_Producto.Clear;
        cbo_Cantidad.Clear;
           // CLIENTES *******
        strSQL := 'SELECT id,Cliente,Direccion FROM qry_clientes ORDER BY Cliente';
        ZListas := TZReadOnlyQuery.Create(nil);
        ZListas.Connection := DM.ZConnectionRimacy;
        ZListas.SQL.Text := strSQL;
        ZListas.Open;
        //SetLength(arrDirecciones,ZListas.RecordCount);
        //i := 0;
        while not ZListas.Eof do                //
        begin
            cbo_Cliente.AddItem(ZListas['cliente'],
               pointer(ZListas.FieldByName('id').AsInteger));
            lbox_Direcciones.AddItem(ZListas.FieldByName('Direccion').AsString,nil);
            //Inc(i);
            ZListas.Next;
        end;
        strSQL := 'SELECT * FROM qry_vendedores';
        ZListas.SQL.Clear;
        ZListas.SQL.Text := strSQL;
        ZListas.Open;
        while not ZListas.Eof do
        begin
            cbo_Vendedor.AddItem(UpperCase(ZListas['Vendedor']),
                           pointer(ZListas.FieldByName('Id').AsInteger));
            ZListas.Next;
        end;
        //productos
        strSQL := 'SELECT * FROM qry_resumenprodfullfields';
        ZListas.SQL.Clear;
        ZListas.SQL.Text := strSQL;
        ZListas.Open;
        while not ZListas.Eof do
        begin
            cbo_Producto.AddItem(ZListas.FieldByName('PROD').AsString, //nomproducto
                          pointer(ZListas.FieldByName('ID').AsInteger));   //clave
            ZListas.Next;
        end;
        //cantidades
        with cbo_Cantidad do
        begin
             m := 2;
             for i := 1 to 1000 do
             begin
               Items.Add( IntToStr(i) );
               arrFact[i] := i;
             end;
             for i := 1 to 6  do
             begin
               Items.add('1/' + IntToStr(m));
               arrFact[1000 + i] := 1 / m;
               m := m * 2;
             end;
        end;
        strSQL := 'SELECT * FROM tblsispago';
        ZListas.SQL.Clear;
        ZListas.SQL.Text := strSQL;
        ZListas.Open;
        while not ZListas.Eof do
        begin
           cbo_SisPago.AddItem(ZListas.Fields[1].AsString,pointer(ZListas.Fields[0].AsInteger));
           ZListas.Next;
        end;
        ZListas.Close;
        ZListas.Free;
end;

eduarcol 08-08-2007 20:31:38

y porq no utilizas los dblookupcombobox????

david_uh 08-08-2007 20:33:21

si lo he intentado pero la aplicacion se pone re-lenta ademas almoento de selelcionar un cliente no permite hacer una busqueda incremental osea no me da la flexibilidad de un combo:
gracias por responder

jhonny 08-08-2007 20:39:43

Vaya¡¡¡, ¿Cual de todas esas listas es de la que estamos hablando?

Voy a cojer cualquiera, sin tratar de cambiar lo que ya tienes:

Suponiendo que es esa que se llama lbox_Direcciones, entonces luego de lbox_Direcciones colocas
Código Delphi [-]
Application.ProcessMessages

david_uh 08-08-2007 21:17:21

ok ya lo solucione, asi por lo menos ya no aparece ese pantallazo desagradable

gracias....


La franja horaria es GMT +2. Ahora son las 18:52:44.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi