Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Presentar incremento de un contador (https://www.clubdelphi.com/foros/showthread.php?t=26397)

ronimaxh 21-10-2005 15:14:53

Presentar incremento de un contador
 
Hola amigos del club, si quiero presentar el incremento de un contador (en una variable) en un label1.caption, pero que presente cada numero incrementado hasta el final del proceso.

Nota: Hice una prueba con el label1.caption, y me presenta el último número incrementado, lo que quiero es que me presente cada numero incrementado por el contador en tiempo de ejecucion. desde ya gracias.

Neftali [Germán.Estévez] 21-10-2005 15:20:58

Debería funcionar con un simple bucle; Eso sí, debes poner un Application.ProcessMessages dentro para poder visualizar los cambios.

Código Delphi [-]
 for i := 0 to 100 do begin
   Label1.Caption := IntToStr(i);
   Application.ProcessMessages;
 end;

ronimaxh 21-10-2005 16:43:36

si le pongo con un rango pequeño lo hace rapido y presenta el final de incrementeo, ahora bien, si ciclo se incrementa en millones dura unos segundos y presenta el incremento final, habra otra forma de hacerlo?

Nota: Lo que quiero es insertar 5.5 millones de registros (de dos db diferentes, origen sql server destino firebird 1.5 y me gustaria ir mirando por un contador cuanto va insertando. si hay otra forma para hacer esto, decirme.

dec 22-10-2005 05:54:39

Hola,

El código que Neftali preparó a modo de ejemplo haría lo que se espera incluso en un bucle con millones de vueltas. Ahora bien, si estás realizando alguna operación dentro de, digamos, un procedimiento es ahí donde tienes que situar los "Application.ProccessMessage" que estimes oportuno y es ahí también donde tienes que ir incrementado determinada variable contador cuyo número puedas mostrar donde te sea menester.

Acaso si te explayas un poco más (incluso copiando aquí mismo el procedimiento susomentado, si es que haces uso de alguno, o, en todo caso, el código que hallas preparado para la tarea que te ocupa) es posible que se puedan ver otras posibles alternativas, soluciones, formas, en fin, de conseguir llevar a cabo lo que precisas. Por sí mismo, como digo, el código propuesto por Neftali funciona como se espera.

Lepe 22-10-2005 11:34:32

Perdona que me meta donde no me llaman, pero a ese proceso no le hace falta ningun label que diga insertando. Simplemente le hace falta que el label diga "Espere por favor".

Ya ves, la eficiencia está reñida con la apariencia. En el bucle de Neftali, deberás añadir "FormaDelLabel.Update", y en cada inserción:
- Cambia el label (label1.caption := .....)
- Espera por la cola de mensajes (application.ProcessMessages)
- Obliga a Repintar el form (form.Update).

¡¡ Y todo esto ralentizará las inserciones más de lo que piensas !!. Obviamente estas triplicando el tiempo, por mostrar un simple label :(.

Si despues de 1 segundo (cuando ha terminado la inserción), dice el label final: Insertados 1 millon y medio de registros, el usuario dirá uuuAAAUUU, increible, rapidísimo, este tio es un "maquina", Sin embargo, si se tira 3 o 4 segundos mirando el númerito del label que parece un cronómetro, cuando termine simplemente dirá: "Que bonito".

saludos

ronimaxh 22-10-2005 21:11:06

gracias amigos por la ayuda, sólo era esto, application.ProcessMessages. El problema estaba fuera del proceso de insertar en el código, mal colocado por mi, bien agredicido estoy, tengan buen dia.


La franja horaria es GMT +2. Ahora son las 05:55: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