Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > API de Windows
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 26-02-2018
strelok strelok is offline
Miembro
 
Registrado: Sep 2017
Posts: 130
Poder: 2
strelok Va por buen camino
Angry Problema con Application.ProcessMessages

Hola a todos,

esa hermosa línea está haciendo que mi última semana con delphi sea una pesadilla, resulta que hay un formulario que tiene una barra de progreso y un grid, el código luego de setear el mínimo, máximo y posición, hace un
Código:
Application.ProcessMessages
, una vez ejecutado ese código los colores de la barra y del gris vuelvan a ser los que tiene por defecto.

Explicado mas detalladamente, tengo una barra de progreso (TAdvSmoothProgressBar) y un grid (TDBAdvGrid), éste último tiene un evento GetCellColor, en el cuál pinto las filas pares e impares, de gris claro y oscuro respectivamente, luego de ejecutada la línea antes mencionado, lo que se ha pintado en el GetCellColor se pierde, vuelve a ser todo por defecto. Ayudaaa
Responder Con Cita
  #2  
Antiguo 26-02-2018
Avatar de AgustinOrtu
[AgustinOrtu] AgustinOrtu is offline
Miembro Premium
 
Registrado: Aug 2013
Ubicación: Argentina
Posts: 1.858
Poder: 10
AgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en bruto
Yo no te recomiendo para nada que uses Application.ProcessMessages. Suelen ocurrir este tipo de cosas "raras". Si lo que realmente queres es mostrar el progreso de actualizacion de algo, no hay otra solucion que una aplicacion multihilo. La Vcl es un framework que corre en un solo hilo (el main-thread). Este es el unico hilo que tiene (o mejor dicho, debe) que encargarse de manipular la interfaz grafica; es decir, practicamente cualquier llamado a metodo, cambiar una propiedad, requiere refrescar los controles, y esto debe ocurrir en el contexto del hilo principal

Asi que la solucion es mover el trabajo "pesado" a otro hilo (proceso en ejecucion) que vaya "informando" periodicamente su progreso al hilo principal, para que este realice las actualizaciones necesarias en la interfaz grafica. De esta manera, la aplicacion se mantiene "respondiendo" mientras esta "trabajando". En pocas palabras, el Application.ProcessMessages es un hack; no realiza el trabajo, no convierte tu aplicacion en multihilo. En el mundo de hoy, no queda otra que utilizar todos los recursos (procesadores) que tienen las computadoras, asi que hay que aprender programacion concurrente y a utilizar hilos.

Cada caso es particular, asi que dependiendo del mismo, y de la version de Delphi que tengas, es mas o menos dificil realizar este trabajo. Por el foro hay ejemplos de uso de hilos (threads). Aca presento una solucion, (que esta lejos de ser optima)

Si queres usar la biblioteca System.Threading (que se conoce como Parallel Programming Library, PPL)

Aca hay ejemplos del CodeRage XI en español:

Parallel Programming Library (PPL) con Delphi

Otro pero en ingles

Hay mas recursos si buscas en la web. Tambien podes optar por la biblioteca OmniThreadLibrary que funciona desde Delphi 2007 en adelante

La web de Neftali tambien tiene ejemplos de threads, incluso utilizando bases de datos
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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
Problema con Progressbar y Application.ProcessMessages kirkhelek Varios 2 11-08-2010 17:46:17
Problema con Application.ProcessMessages jandro Varios 5 21-01-2010 15:36:14
Application.ProcessMessages; Stevenmn API de Windows 3 24-02-2008 19:02:34
Application.ProcessMessages y Application.HandleMessages molinero1 Varios 13 09-05-2007 14:53:29
Problema con Application.ProcessMessages Coco API de Windows 0 25-02-2005 15:28:44


La franja horaria es GMT +2. Ahora son las 22:27:13.


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