Estaba dando una de mis recurrentes revisiones al ClubDelphi. Cuando me encontré con un hilo en dónde un colega pedía un sugerencia para medir mediante un TProgressBar el proceso de conexión al servidor de Base de datos. A cómo ya sabrán algunos, medir cuánto tardará en establecerse una conexión, es cómo tratar de determinar el movimiento de las partículas cuánticas.
Por eso, le he sugerido cambiar de paradigma y utilizar una barra de progreso infinita (tienen varios nombres, pero así las conozco yo). Nunca había intentado hacer una, pero dando una pequeña hojeada a MSDN, veo que no es tan difícil de conseguirla con Delphi. A continuación el código necesario:
procedure TForm1.FormCreate(Sender: TObject); var CS: Cardinal; begin CS := GetWindowLong(Self.ProgressBar1.Handle, GWL_STYLE); CS := CS or PBS_MARQUEE; SetWindowLong(Self.ProgressBar1.Handle, GWL_STYLE, CS); SendMessage(Self.ProgressBar1.Handle, PBM_SETMARQUEE, Integer(True), 0); end;
Para utilizar el código anterior, debes agregar la unidad CommCtrl a la sección de Uses de tu unidad. Es esa unidad está definida las constantes PBM_SETMARQUEE y PBS_MARQUEE.
Referencias:
http://msdn.microsoft.com/en-us/library/windows/desktop/bb760816(v=vs.85).aspx
http://msdn.microsoft.com/en-us/library/windows/desktop/bb760820(v=vs.85).aspx#PBS_MARQUEE
http://msdn.microsoft.com/en-us/library/windows/desktop/bb760842(v=vs.85).aspx
PD: El código requiere de la versión 6 de los Common Controls de Windows. Por lo que sólo se ejecutará en Windows XP y posteriores. Además, requiere que tu aplicación tenga activo los temas visuales.
[ACTUALIZACIÓN]: A cómo oportunamente apunta Román, Delphi 7 no trae definidas las constantes PBM_SETMARQUEE y PBS_MARQUEE. Así que hay que declararlas.
const PBS_MARQUEE = $08; PBM_SETMARQUEE = WM_USER+10;