2013-12-10 6 views
1

진행률 표시 줄을 게이지로 교체하고 싶습니다. 여기에 진행률 표시 줄에 버전 :타이머가있는 루핑 TGauge

procedure TForm1.tmr1Timer(sender: TObject); 
begin 
    pb0.Position := (pb0.Position + 1) mod pb0.Max; 
end; 

는 그리고이

procedure TForm1.tmr1Timer(sender: TObject); 
begin 
    gauge.MinValue := 0; 
    gauge.MaxValue := 100; 
    gauge.Progress := gauge.Progress + 1; 
end; 

게이지

에 어떻게 그것이 (100)에 도달 할 때마다 다시 시작하기 위해? 테스트 버튼으로 시도 했으므로 진행률 표시 줄처럼 반복 할 수 없습니다.

procedure TForm1.btn6Click(sender: TObject); 
begin 
    tmr1.Enabled := not tmr1.Enabled; 
    begin 
    gauge.Progress := 0; 
    tmr1.Enabled := True 
    end; 
    if Form1.gauge.Progress = 100 then // is this correct ? 
    // what to do to make it looping ? 
end; 

위의 진행률 표시 줄 + 타이머 대신 게이지 기능을 동일하게 만드는 방법은 무엇입니까?

답변

4

같은 방법으로. 그냥 TGauge의 다른 속성 이름을 사용 (타이머 이벤트에서 MinValue의 설정 및 MaxValue 제거) :

procedure TForm1.tmr1Timer(sender: TObject); 
begin 
    gauge.Progress := (gauge.Progress + 1) mod (gauge.MaxValue - gauge.MinValue);; 
end; 

@DavidHeffernan 내 계산은 전체 100% 값에 도달하지 않습니다 코멘트에서 지적을 제안합니다 대안 : 진행 디스플레이가 0에서 시작하지 않으며, 그것은 참으로 100%에 도달 않습니다, 그러나 2 단계에서 증가 :

gauge.Progress := gauge.MinValue + (gauge.Progress + 1) mod 
      (gauge.MaxValue - gauge.MinValue + 1); 

그것은 다른 문제가 있습니다.

@Tlama가 의견에서 지적했듯이 MinValue이 음수 일 수있는 경우 위 작업 중 어느 것도 작동하지 않습니다.


이 계산은 (MAXVALUE에 MINVALUE에서 루프를, 모두는 음수가 될 수 있습니다) 아무 문제가 없습니다 MinValue < MaxValue

gauge.Progress := gauge.MinValue + 
        (gauge.Progress + 1 - gauge.MinValue) mod 
        (gauge.MaxValue - gauge.MinValue + 1); 
+0

굉장 경우! Ken White White 감사합니다 – Bianca

+0

이 코드는 MinValue가 0 인 경우에만 작동합니다. 또한 진행률을 MaxValue와 동일하게 설정하지 않습니다. 당신은 MinValue + (Progress + 1) mod (MaxValue-MinValue +1) –

+0

@David : XE5 VCL 테스트 응용 프로그램에서 작동했습니다. 게시 된 것과 똑같이, 기본값 인'MinValue = 0'과'MaxValue = 100' (테스트를 위해 타이머를 250ms로 설정). 질문의 의도는 0으로 되돌리고 다시 시작하는 것이므로 MaxValue로 진행 상황을 설정해도 문제가되지 않습니다. 그것이 100 %를 치면 완료 될 것이고, 다시 0으로 돌아가는 것에는 아무런 포인트가 없을 것입니다, 그렇습니까? 당신은 0이 아닌 MinValues에 대해 아마 맞을 것이다; 곧 업데이트 될 것입니다 (약 2 분 안에 무언가가 중간에 있음). –