Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 14-08-2006
Carliviris Carliviris is offline
Miembro
 
Registrado: abr 2006
Posts: 93
Poder: 19
Carliviris Va por buen camino
Splash Form

necesito hacer un splash form con el progress bar. Se mas o menos como hacerlo. Lo que necesito es que en el progress bar se refleje el tiempo que realmente dura la tabla para abrirse, porque es una tabla con muchos registros. Creo que me comprendieron.

se los agradeceria
Responder Con Cita
  #2  
Antiguo 14-08-2006
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
No creo que haya forma de hacer esto. Normalmente bastará que coloques un letreo de 'Abriendo tabla' o algo por el estilo.

// Saludos
Responder Con Cita
  #3  
Antiguo 14-08-2006
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Cita:
Empezado por Román
No creo que haya forma de hacer esto.
Vosotros sabéis más del tema que yo, pero, ¿por qué a mí me parece que podría hacerse simplemente "capturando el tiempo" al inicio de la aplicación y restándoselo al tiempo que capturemos de nuevo luego de haberse abierto la tabla de marras? ¿Qué se me escapa?
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #4  
Antiguo 14-08-2006
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Cita:
Empezado por dec
¿Qué se me escapa?
Hombre! Pues supongo que el hecho de que eso sólo servirá si la aplicación siempre se ejecuta bajo exactamente las mismas condiciones iniciales como para que la velocidad de apertura sea siempre la misma.

// Saludos
Responder Con Cita
  #5  
Antiguo 14-08-2006
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Pero si nos ceñimos al asunto,... ¿no es posible? O sea, yo pongo capturo el tiempo al comenzar la aplicación (hasta aquí no nos importa lo que se tarde) y luego abro cierta tabla de la base de datos... y vuelvo a tomar el tiempo cuando la tabla ya esté abierta... pero, aunque, bueno, es que...

Me parece que sí, que me he liado. Ahora mismo me he quedado en blanco. Es como si hubiese recibido un rafagazo con un mensaje que dijera más o menos: comienzas a abrir la tabla... y cuando termine de abrirse dices que capturas el tiempo y bla, bla, bla...

Pero,... de lo que estamos hablando es de mostrar el tiempo que la tabla tarda en abrirse, según está abriéndose... y aquí es donde parece que la cosa se complica, ¿que no? Pues eso... toca un cartelito de "Abriendo tablas" o algo así, una "ProgressBar" de esas locas que van para un lado y para otro, qué sé yo...

Mis disculpas... pensaba que..., creí que..., me equivo qué.
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #6  
Antiguo 15-08-2006
Avatar de Ñuño Martínez
Ñuño Martínez Ñuño Martínez is offline
Moderador
 
Registrado: jul 2006
Ubicación: Ciudad Catedral, Españistán
Posts: 6.000
Poder: 25
Ñuño Martínez Tiene un aura espectacularÑuño Martínez Tiene un aura espectacular
Hace tiempo creé una aplicación que necesitaba abrir muchas tablas. Lo que hice fue contar el total de tablas que debía abrir e iba incrementando el progress bar tras abrir cada una de ellas. Creo que es lo más cercano a lo que buscas que podrás conseguir.
Responder Con Cita
  #7  
Antiguo 25-08-2006
Avatar de Durbed
Durbed Durbed is offline
Miembro
 
Registrado: ago 2004
Posts: 166
Poder: 20
Durbed Va por buen camino
Sino en lugar de una barra de progreso puedes poner una animacion de un reloj de arena o algo asi.
__________________
Intentando hacer algo con Delphi 7 y Firebird 1.5
Responder Con Cita
  #8  
Antiguo 27-08-2006
xelip xelip is offline
Miembro
 
Registrado: ago 2006
Posts: 21
Poder: 0
xelip Va por buen camino
Hola:
Me imagino que ya habras encontrado una solucion a este problema, pero tambien hay otra opciones que no te explican en los mensajes anteriores a este.
Podrrias hacer una aplicacion multihilos, que llevara el calculo del montaje de las bases de datos y en el otro hilo el incremento del la barra de progreso, pero aqui es donde se complica, pues debes sincronizar ambos hilos para que sea lo mas presico posible. Tambien te puedo ayudar en eso, aunque es un poco complicado, escribire el codigo para ti esta noche y mañana te lo mando
Saludo, xelip
Responder Con Cita
  #9  
Antiguo 27-08-2006
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
¿Podrías explicar por favor, qué significa "calcular el montaje de las bases de datos"? Me parece que más allá de hilos o no, el problema es que para poder mostrar el progreso de algo, ese algo debe en primera instancia poder "dividirse" en pasos. Normalmente, la apertura de una tabla es un proceso atómico que no se hace en pasos, al menos desde el punto de vista de la aplicación cliente.

No dudo que pueda escapárseme algo y si puedes dar un ejemplo a todos, estaré más que encantado.

// Saludos
Responder Con Cita
  #10  
Antiguo 27-08-2006
xelip xelip is offline
Miembro
 
Registrado: ago 2006
Posts: 21
Poder: 0
xelip Va por buen camino
Mira roman:
Para poder hacer lo de la barra de progreso necesitamos que el procesador de la computadora valla ejecutando ambos hilos a la vez, es decir el progress bar y el montaje de la bases de datos o tablas o lo que fuese...
Para esto debemos darle la mayor priridad al montaje, pues es quien le indica al procesador cuando debe cambiarse hacia el otro hilo. De esta manera se ejecutaran ambos prosesos, claro que se puede hacer (los sistemas operativos lo hace, tambien toda clase de aplicaciones). El mayor problema radica en sincronizar ambos hilos, para esto debemos saber cuando necesitamos ejecutar uno u otro, pero esto depende de la aplicacion que estemos haciando y de lo que realmente necesitemos...
Los puedo ayuda con el codigo del progress bar y del hilo del mismo, pero lo otro es problema de ustedes, pues ahora mismo no tengo tiempo, asi que mañana les mandare como hacer lo que les explico.
Esto no es tan sencillo pero es una idea generar, talvez con esto resuelvan su problema...
Saludos a todos y gracias por solicitar mi ayuda.
Saludos de nuevo. xelip
Responder Con Cita
  #11  
Antiguo 27-08-2006
xelip xelip is offline
Miembro
 
Registrado: ago 2006
Posts: 21
Poder: 0
xelip Va por buen camino
Hola,
Talves mi explicacion anterior sea un poco comlicada, perdonen, pero realmente escribo de nuevo para aclarar algo...
Cuando ramon me decia que se necesitaba que lo que fueramos a cargar fuera por pasos es algo muy logico, pero solo si por cada paso incrementariamos la barra, pero para mi esto es innecesario, pues bien, no importa cuanto tiempo demore en cargar las tablas los mas importante es que el procesador pueda ser capaz de llevar ambos procesos siempre que tengamos un aproximado del tiempo de duracion de la carga...Ahora, si no tuvieramos un tiempo muy confiable podriamos solo poner el incremento de la barra y no el que porciento de esta, cuanto queda, o cosas por el estilo.
xelip

Última edición por xelip fecha: 27-08-2006 a las 21:16:23.
Responder Con Cita
  #12  
Antiguo 28-08-2006
Avatar de Durbed
Durbed Durbed is offline
Miembro
 
Registrado: ago 2004
Posts: 166
Poder: 20
Durbed Va por buen camino
Que ganas tienes de liarte con hilos, no dudo que de alguna forma que seguro es extraña se pueda conseguir, pero estamos hablando de informar con algo al usuario para que se de cuenta que la aplicacion no se ha quedado colgada. Para ello basta con una animacion (gif) o estimas cuanto tiempo tarda en cargarse la tabla y metes la barra de progreso con un timer, si tarda menos pues no pasa nada, y si tarda mas la pones a 0 y la llenas otra vez, que la final lo unico que quieres es que el usuario vea que algo se mueve.

Un saludo.

PD: Xelip tengo curiosidad por saber como se ve el estado en que se encuentra la apertura de la tabla.

PD2: Se me acaba de ocurrir que si lo que haces es cargar los registros en algun sitio mires el numero de registros y cada x registros incrementes la barra de progreso, pero creo que no haces eso.
__________________
Intentando hacer algo con Delphi 7 y Firebird 1.5
Responder Con Cita
  #13  
Antiguo 01-10-2006
xelip xelip is offline
Miembro
 
Registrado: ago 2006
Posts: 21
Poder: 0
xelip Va por buen camino
Wink

Hola a todos:
Siento no haber podido responderles antes, pero es que he estado un poco complicado con los studios, pero lo prometido es deuda, aqui tienen un ejemplo de como hacer lo del progress bar (sin multi hilos), esto se lo debo a mi padre, yo no sabia como hacerlo sin multi hilos...
windows es un sistem orientado a eventos, un evento es una accion
relacoionada a un componente/control hay componente visules( ventana,
boton, imagen...) y no visulales( un Objecto, uuna Lista , una collection)
Cuando ocurre un evento ( mousemove, mouseclick, kepressed,
changefocus.........) se crea un mensaje que se pose en la colas de
mensajes, cada mensaje dice a quien va dirigido ( a que applicaion) un
click de mouse en un docuemto word genera un mensaje WM_MOUSECLICK (WM_
windowsMessage) dirigdo a word, cada applicacion va revisando medinate un
ciclo intermo si tiene un mensje en la cola y si lo tiene lo coge y ejecuta
la accion corespondiente al mensaje, digamos en este ejemplo deplegar un
menu.

Si una applicacion se dedica durante mucho tiempo a realizar un proceso de
calculo y no revisa la cola de mensajes entonces queda como congelada porque
no realiza las operaciones relacionas a sus mensajes, sino que solo se
dedica a relizar el caculo.

una pplicaion de windows es algo asi

crea ventana
regrista ventana
muestra ventana
repeat
lee cola de mensajes
case mensaje of
WM_MOUSECLICK : ejecuta OnMouseClick;
WM_MOUSEMOVE : ejecuta OnMouseMove;
WM_KEYPRESSED : ejecuta OnKeyPressed;

WM_BUTTONCLICK : ejecuta OnButtonClick;
..............

WM_CLOSEWINDOW : ejecuta OnCloseWindows // cierra el
programa
end;
until true = false // ciclo infinito


esta parte de la implemetacion de un programa windows esta "oculta" pero en
un inicio si habia que programarla
actulamente solo se programan los eventos, es decir tu pones un botton y
programas en evento OnButtonClick

entonces si dentro del codigo del OnButtonClick yo hago esto

prodedure OnBttonClick( Sender....
var A
begin
while true = false do // ciclo infinito
begin
A := 1;
end;
end;

cuando haga click en el botton la applicacion se congela porque nunca saldra
del ciclo, pero si escribo

prodedure OnBttonClick( Sender....
var A
begin
while true = false do // ciclo infinito
begin
Application.ProcessMessages;

A := 1;
end;
end;

entonce la application no se congela porque antes de cada iteracion va la
cola toma sus mensajes y ejecuta
las acciones relacionadas a sus eventos, esto incluye refrecar las ventanas,
WM_PAINT, tambien WM_INVALIDATE, invalidate obliga a una ventana ( control)
a repintarse/refrescarse porque su estado ha cambiado y dejo de ser valido
lo que esta mostrando esto lo ordenas con el metodo Refresh, esto le envia
un mensaje a uina ventana diciendole que se repinte, ejemplo cuando un
botton esta arriba y se hace click y se deja el mouse presionado, windos le
envia un invalidate al botton para que pinte abajo y cuando se libera el
mouse windoes le envia un nuevo invalidate para que se pinte arriba

con el Progressbar seria

prodecure Calcula;
var n : longint;
begin
ProgressBar.Min := 0;
ProgressBar.Max := CantidaOperaciones;
ProgressBar.Pos := 0;

Application.ProcessMessages;

for n := 0 to CantidaOperaciones do
begin
ProgressBar.Pos := n;
Application.ProcessMessages;

EjecutaOperacion;
end;
end;

si el procedimeto EjecutaOperacion toma mucho tiempo porque reliza calculos
muy intensivos/complicados que tomman mucho procesador se puede considerar
opcionalmente intercalar unos ProcessMessages dentro del codigo, esto
permite revisar la cola de mensajes durante la ejecucion de
EjecutaOperacion.

procedure EjecutaOperacion;
begin
Application.ProcessMessages; //opcional
.......
Application.ProcessMessages; //opcional
......
Application.ProcessMessages; //opcional
......
Application.ProcessMessages; //opcional
......
Application.ProcessMessages; //opcional
end;

que pasa si demora mucho y queremos cancelarlo, en este caso agragamos un
botton Cancelar y agregamos OnClick

procedure CancelarClick....
begin
VariavleGlobalCancelar := True;
end

prodecure Calcula;
var n : longint;
begin
ProgressBar.Min := 0;
ProgressBar.Max := CantidaOperaciones;
ProgressBar.Pos := 0;

VariavleGlobalCancelar := False; //

Application.ProcessMessages;

for n := 0 to CantidaOperaciones do
begin

if VariavleGlobalCancelar then Break; // el usuario hizo click en
botton cancelar

ProgressBar.Pos := n;
Application.ProcessMessages;

EjecutaOperacion;
end;
end;


Espero que esto les sirva un poco para lo que estan haciendo.
saludos... ,xelip.
Responder Con Cita
  #14  
Antiguo 01-10-2006
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Sí vamos. ProcessMessages es algo más o menos conocido por todos y varios tenemos una idea bastante buena de cómo funciona Windows y sus mensajes. Pero parece que no leíste con detenimiento ni la pregunta original ni las respuestas. Desde el mensaje 9 comenté porque no es posible poner una barra de progreso en el caso particular de lo que se pregunta. El ejemplo que pones ahora no aplica por lo que ya se comentó anteriormente: no puedes subdividir en pasos la apertura de una tabla.

// Saludos
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Cerrar Splash Imposible ... serhasae Varios 9 09-10-2007 21:27:18
Splash Screen jmedina Varios 6 15-08-2007 07:15:46
Problemas en splash screen ilichhernandez Varios 2 19-12-2005 06:45:17
Splash Screen con imagen ibstk Varios 2 09-09-2004 01:05:51
Hacer un Splash con forma de una imagen rjsitruiz Gráficos 6 09-07-2004 11:28:21


La franja horaria es GMT +2. Ahora son las 10:43:42.


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
Copyright 1996-2007 Club Delphi