Індикація процесу (tprogressbar) в delphi, delphi, компоненти delphi, вихідні коди delphi

procedure TFormi.ButtonlClick (Sender: TObj ect); var

i: Integer; begin for i: = 0 to 20 do begin

// Тут можна робити якийсь розрахунок

// Після розрахунку відображаємо поточний стан ProgressBarl.Position: = ProgressBarl.Position + 5; Sleep (100); // Робимо затримку в 100 мілісекунд end;

В даному випадку запускається цикл від 0 до 20. На кожному етапі циклу позиція ProgressBar збільшується на 5 і на двадцятому кроці виконання циклу буде дорівнює своєму максимальному значенію- 100. У циклі також встановлюється затримка на 100 мілісекунд, щоб наша смужка НЕ ​​проскочила дуже швидко, і ви хоча б побачили ілюзію розрахунку. У реальних прикладах затримки не буде потрібна, адже якщо розрахунок виконується так швидко, що користувач навіть не побачить рух повзунка, то немає сенсу створювати ProgressBar.

Наведений приклад не зовсім універсальний, тому що вимагає, щоб ми заздалегідь знали приріст п'яти одиниць на кожному кроці. В іншому випадку є два варіанти вирішення.

  • Змінити властивість мах компонента ProgressBar на 20 і на кожному кроці нарощувати тільки одиницю. Це дуже зручний спосіб, тому що позиція ProgressBar буде змінюватися від 0 до 20. Цикл теж діє в цьому діапазоні, так що приклад може спроститися і виглядати так, як показано в лістингу:

procedure TFormi.ButtonlClick (Sender: TObj ect); var

i: Integer; begin for i: = 0 to 20 do begin

// Тут можна робити якийсь розрахунок

// Після розрахунку відображаємо поточний стан

Sleep (100); // Роблю затримку в 100 мілісекунд end;

В даному випадку нам не треба робити приріст для ProgressBar, а досить відразу привласнювати в властивість позиції значення i, тому що значення позиції і значення i змінюються в одному діапазоні від 0 до 20.

Другий спосіб полягає в розрахунку відносного положення стану ProgressBar. У цьому випадку позиція ProgressBar повинна змінюватися від 0 до 100 і потрібно сприймати ці значення як відсотки. Після цього розраховувати відсоток виконання на кожному кроці циклу. Не лякайтеся, цей розрахунок дуже простий і не скрутний для машини. Іноді такий спосіб зручніше:

procedure TFormi.ButtonlClick (Sender: TObj ect); var

for i: = 0 to 20 do

// Тут можна робити якийсь розрахунок

// Після розрахунку відображаємо поточний стан ProgressBarl.Position: = round (i / 20 * 100); Sleep (100); // Робимо затримку в 100 мілісекунд end;

У цьому прикладі позиція розраховується за формулою перетворення чисел в відсотки, т. Е. Поточне значення ділиться на максимальне і множиться на 100 (в нашому випадку 20І і помножити на 100). Результат цих обчислень потрібно округлити, тому що серед операцій розрахунку був поділ, значить, загальний результат буде в будь-якому випадку сприйматися як дробове число, навіть якщо результат явно повинен бути цілим.

В останньому випадку є невелика похибка через операцій ділення і округлення, але в реальних умовах помітити цю похибку неможливо, тому що вона дорівнює менше половини відсотка. Все одно при виведенні графіки завжди бувають похибки через масштабування.

Допоможи проекту! Розкажи друзям про цей сайт: