Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Actualizar valor de TProgressBar (https://www.clubdelphi.com/foros/showthread.php?t=94090)

Maniches 24-07-2019 19:30:11

Actualizar valor de TProgressBar
 
Amigos del Foro,
Acudo a su ayuda al siguiente problema:
Tengo un formulario principal que contiene un componente (TProgressBar) en este formulario se ha realizado la lógica para que este controle en base a un timer la duración de inactividad del formulario. cuando se utiliza de forma directa este formulario todo trabaja bien y el componente muestra el efecto de la barra progresiva.
El problema me esta generando cuando es cuando yo estoy creando un nuevo formulario que hereda del formulario principal anteriormente indicado, lo que esta ocurriendo que en el nuevo formulario no me esta mostrando el efecto del componente TProgressBar. He revisado el evento que controla la propiedad Position y si esta incrementando. Lo que no esta es mostrando el efecto de la barra del progressbar.
Ambos formularios se están creando y el segundo que hereda del principal este se muestra(SHOWMODAL).

Me ayudan a poder resolver que puede estar pasando? hay que hacer algo en el segundo formulario para que herede o refresque los efectos del formulario principal?
Muchas gracias por toda su ayuda.

Casimiro Notevi 24-07-2019 19:52:49

Se te olvidó el código :)

Maniches 25-07-2019 00:08:42

No quise publicar el código por que es comun encontrarlo en internet. igual lo comparto:

Código de Formulario Principal:

Código Delphi [-]
    sbMainTransaction: TStatusBar;
    pbMain: TProgressBar;
    tmrMain: TTimer;
    .
procedure TForm.FormCreate(Sender: TObject);
begin
  sbMainTransaction.Panels[6].Style := psOwnerDraw;
  pbMain.Parent := sbMainTransaction;
  pbMain.Position:= 0;
  pbMain.Max:= 20000;
end;

procedure TForm.sbMainTransactionDrawPanel(StatusBar: TStatusBar;
  Panel: TStatusPanel; const Rect: TRect);
begin
  if Panel = StatusBar.Panels[6] then
  with pbMain do begin
    Top := Rect.Top;
    Left := Rect.Left;
    Width := Rect.Right - Rect.Left - 15;
    Height := Rect.Bottom - Rect.Top;
  end;
end;

procedure TForm.tmrMainTimer(Sender: TObject);
var
 vIdleTime : Cardinal;
begin
     vIdleTime := GetTickCount - TimerInicio;
     pbMain.Position:= pbMain.Position + 1;
     lblSeq.Caption:= IntToStr(pbMain.Position);
     if(vIdleTime >= 20000) then
     begin
       ShowMessage('Tiempo límite');
       Application.Terminate;
     end;
end;

procedure TForm.FormShow(Sender: TObject);
begin
  tmrMain.Enabled := True;
end;

Formulario Nuevo (Hereda de Form. Principal)

Código Delphi [-]
procedure TFormNew.FormShow(Sender: TObject);
begin
    inherited;
end;

PUSE UNA ETIQUETA (lblSeq) PARA VERIFICAR SI ESTA INCREMENTANDO LA POSICIÓN DEL PROGRESS Y SU ESTA INCREMENTANDO. LO QUE NO SE ESTA VISUALIZANDO EN EL FORMULARIO QUE HEREDA ES EL EFECTO DEL PROGRESS QUE PINTE LA BARRA EN BASE AL INCREMENTO.

QUE PODRÍA ESTAR FALTANDO?

Casimiro Notevi 25-07-2019 08:51:07

Cita:

Empezado por Maniches (Mensaje 532920)
PUSE UNA ETIQUETA (lblSeq) PARA VERIFICAR SI ESTA INCREMENTANDO LA POSICIÓN DEL PROGRESS Y SU ESTA INCREMENTANDO. LO QUE NO SE ESTA VISUALIZANDO EN EL FORMULARIO QUE HEREDA ES EL EFECTO DEL PROGRESS QUE PINTE LA BARRA EN BASE AL INCREMENTO.
QUE PODRÍA ESTAR FALTANDO?

No grites, no estamos sordos :confused:


Lo solucionarás con:
Código Delphi [-]
pbMain.Position:= pbMain.Position + 1;
lblSeq.Caption:= IntToStr(pbMain.Position);
Application.ProcessMessages;  //  <---

De todas formas, un postgresbar no funciona así, sino así:
Código Delphi [-]
pbmain.StepIt;
lblSeq.Caption:= IntToStr(pbMain.Position);
Application.ProcessMessages;  //  <---

Maniches 01-08-2019 17:18:17

Amigo Casimiro,
Muchas gracias por tu ayuda. hice el cambio que me sugeriste y si me funciono.

agregar que no es necesario agregar la linea: Application.ProcessMessages;
al menos en mi caso no es necesario.

Saludos.

Casimiro Notevi 01-08-2019 18:56:44

No es necesario si se usa correctamente (.StepIt) ^\||/


La franja horaria es GMT +2. Ahora son las 01:07:37.

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