Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   problemas de velocidad con Skin.. (https://www.clubdelphi.com/foros/showthread.php?t=47589)

BuenaOnda 01-09-2007 05:02:53

problemas de velocidad con Skin..
 
Hola.

Amigos.. alguien me podria decir como puedo deshabilitar la funcionalidad del skin de mi sistema, utilizo los VclSckins, en el momento de realizar un proceso que demanda gran cantidad de recursos( si dejo el Skin cono desactivado Funciona, pero le quita la Pariencia a mi sistema, lo cual no es la idea ), me gustaria que mi sistema siguiera funcionando, con la misma apariencia, pero que el skin no influya en los procesos...muchas gracias por su ayuda..:D

dec 01-09-2007 05:19:33

Hola,

Quién diría que el "Skin" influye... claro que depende. ¿En el proceso que mencionas actualizas la interfaz? Supongo que si actualizas un "Label", por ejemplo, tal vez el "Skin" entre en juego, porque, de otro modo... a bote pronto no sé me ocurre cómo iba a influir el "Skin"...

BuenaOnda 01-09-2007 05:36:04

asi..es.
 
asi es compañero Dec.. todos los controles de mi Ventana estan afectados por el Skin..Sabes.. le quite el skin y se comporta super rapido..por eso me gustaria descativarlos, momentaneamente,sin que la ventana pierda su apareicia...muchas gracias por tu respuesta..:)

dec 01-09-2007 05:47:39

Hola,

Pero es que es una contradicción... porque si "desactivas" el "Skin" entonces el formulario perderá la apariencia que le diera el Skin activado... vamos, digo yo, ¿eh? Otra cosa es que los programadores del componente en cuestión no tengan previsto alguna solución para este problema, puesto que parece que pudiera darse en más de una ocasión a más de una persona.

Voy a repetirme, ¿mientras estás realizando el proceso problemático actualizas algún elemento de la interfaz de usuario, actualizas algún control del formulario? ¿Das algún respiro a la aplicación durante el proceso problemático (mediante un "Sleep" o un "Application.ProcessMessages()")?

BuenaOnda 01-09-2007 05:59:25

puede ser..
 
eso puede ser.. voy a revisar lo que me indicas..:)

BuenaOnda 01-09-2007 06:08:59

lo revise..
 
Lo revise compañero Dec.. y solo tenia un "Application.ProcessMessages;", en le proceso, lo quite, y sigue igual...la velocidad..no cambia...:confused:

dec 01-09-2007 06:14:17

Hola,

No; si en realidad no se trataba de quitar el "Application.ProcessMessages()", sino de ponerlo, si fuera menester... Chico, no se me ocurre qué decirte sino que muestres el código del proceso famoso, o cuando menos expliques qué llevas a cabo en el mismo, cómo es que tarda tanto... qué se hace ahí... de dónde venimos, adónde vamos... :confused: :confused: :p :)

BuenaOnda 01-09-2007 06:32:07

este es el codigo, solo lleno un stringGrid, no utilice un DBStringGrid, por que los datos puedes modificarse en el StringGrid(Osea el StringGrid es editable)..

Código Delphi [-]
     WITH Modulo DO
     BEGIN
          LimpiarGrilla;
          LimpiarMatriz;
          TRY
             fFila:=0;
             Query1.SQL.Clear;
             Query1.SQL.Text:='Select * From Sp_Articulos_de_venta';
             Query1.Open;
             IF Query1.RecordCount > 0 THEN
             BEGIN//1
                    LimpiarGrilla;
                    LimpiarMatriz;
                    Query1.Last;
                    GrillaArticulos.RowCount:=Query1.RecordCount;
                    Query1.First;
                    WHILE NOT Query1.Eof DO
                    BEGIN//2
                           WITH GrillaArticulos DO
                           BEGIN
                                Cells[0,fFila]:=Trim(Query1.FieldByName('DescUsuario').AsString);
                                Cells[1,fFila]:=IntToStr(Query1.FieldByName('CODIGO_FAMILIA').AsInteger);
                                Cells[2,fFila]:=Trim(Query1.FieldByName('DESCFAMILIA').AsString);
                                Cells[3,fFila]:=Trim(Query1.FieldByName('PROVEEDOR').AsString);
                                Cells[4,fFila]:=Trim(Query1.FieldByName('CODIGO_ART_PROVEEDOR').AsString);
                                Cells[5,fFila]:=Trim(Query1.FieldByName('DESCRIPCIONDECOMPRA').AsString);
                                Cells[6,fFila]:=IntToStr(Query1.FieldByName('CODIGO_ARTICULO').AsInteger);
                                Cells[7,fFila]:=Trim(Query1.FieldByName('DESCRIPCION_DE_VENTA').AsString);
                                Cells[8,fFila]:=FormatFloat('#,##',Query1.FieldByName('PRECIO_VENTA').AsFloat);
                                Cells[9,fFila]:=FormatFloat('#,##0.0',Query1.FieldByName('Porcentaje_precio_venta').AsFloat);
                                Cells[10,fFila]:=FormatFloat('#,##0',Query1.FieldByName('PRECIO_OFERTA').AsFloat);
                                Cells[11,fFila]:='0';//FormatFloat('#,##0.0',Query1.FieldByName('PORCENTAJE_PRECIO_VENTA').AsFloat);
                                Cells[12,fFila]:=FormatFloat('#,##',Query1.FieldByName('PRECIO_SOCIA').AsFloat);
                                Cells[13,fFila]:=FormatFloat('#,##0.0',Query1.FieldByName('Porcentaje_precio_Socia').AsFloat);
                                Cells[14,fFila]:=FormatFloat('#,##0',Query1.FieldByName('PRECIO_X_MAYOR').AsFloat);
                                Cells[15,fFila]:=FormatFloat('#,##0.0',Query1.FieldByName('Porcentaje_precio_Mayor').AsFloat);
                                Cells[16,fFila]:=FormatFloat('#,##0',Query1.FieldByName('PRECIO_FINAL').AsFloat);
                                Cells[17,fFila]:=FormatFloat('#,##0.0',(Query1.FieldByName('DESCUENTO1').AsFloat) +
                                                                       (Query1.FieldByName('DESCUENTO2').AsFloat) +
                                                                       (Query1.FieldByName('DESCUENTO3').AsFloat) );
                                Cells[18,fFila]:=FormatFloat('#,##0',Query1.FieldByName('PRECIO_COMPRA').AsFloat);
                                Cells[19,fFila]:=FormatFloat('#,##0',Query1.FieldByName('UNIDADES_DE_VENTAS').AsFloat);
                                Cells[20,fFila]:=FormatFloat('#,##0',Query1.FieldByName('VALOR_UNIDAD_DE_VENTA').AsFloat);
                                Cells[21,fFila]:=FormatFloat('#,##0.0',Query1.FieldByName('DESCUENTO1').AsFloat);
                                Cells[22,fFila]:=FormatFloat('#,##0.0',Query1.FieldByName('DESCUENTO2').AsFloat);
                                Cells[23,fFila]:=FormatFloat('#,##0.0',Query1.FieldByName('DESCUENTO3').AsFloat);
                                Cells[24,fFila]:=FormatDateTime('dd/mm/yyyy',Query1.FieldByName('FECHA_ULT_COMPRA').AsDateTime);
                           END;
                           Inc(fFila);
                           Query1.Next;
                    END; //2
             END  //1
             ELSE AgregarProducto_A_La_Lista; //DamoslaPosibilidad de ingresar un nuevo Artículo..jejej.
          FINALLY
             Query1.Close;
          END;
     END;

lo unico que hace es traer la informacion desde un procedimiento almacenado,no son mas de 3000 registros, la idea es que el StringGrid opere al estilo Excel, lo cual lo realiza super bien..(me gustaria mostrar menos informacion en el StringGrid, pero se necesita mostrar todo)..:)

dec 01-09-2007 06:45:51

Hola,

Pero no parece que estés actualizando sino el "StringGrid"... ¿no existen el en "StringGrid" métodos como "BeginUpdate()" y "EndUpdate()"? Tal vez pudieras hacer uso de ellos... comienza la actualización justo antes del inicio del "bucle" y termina una vez ejecutado el mismo.

Por otro lado... y puestos a deshabilitar "Skin"... ¿probaste a deshabilitar el Skin únicamente en el "StringGrid"? Pero, de todos modos... se me hace raro que haya que deshabilitar el componente... y dices que sin el Skin todo funciona bien...

En todo caso añade también un "Application.ProcessMessages()" en el bucle, y si me apuras prueba con un "Sleep(1)" en el bucle, sin el "Application.ProcessMessages()" (prueba de ambas formas a ver).

BuenaOnda 01-09-2007 08:35:10

Muchas Gracias..
 
Muchas gracias Dec.. hice todo lo que me dijiste..pero sigue el problemita, voy a seguir investigando.....:)

Io 03-09-2007 17:30:34

Hola.
Este componente tiene la propiedad DisableTag
Código:

SkinData1.DisableTag:=99;
En el ejemplo anterior todos los componentes del form que tengan la propiedad tag a 99, no se verán afectados por el skin.
Podrías intentar utilizarlos en momentos crítico, haber que pasa.

Saludos


La franja horaria es GMT +2. Ahora son las 00:05:15.

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