Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Создание индикатора прогресса для консольных приложений на Delphi: анимируем загрузку

Delphi , ОС и Железо , DOS и Консоль

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

Индикатор прогресса в консольном приложении

Для создания индикатора прогресса в консольном приложении на Delphi можно использовать простой метод перезаписи текущего состояния прогресса, используя символы возврата каретки (carriage return) и перевода строки (line feed), которые в коде представлены как символы с кодами #13 и #10 соответственно. Эти коды позволяют перемещать курсор в консоли без перехода на новую строку, что идеально подходит для отображения динамического прогресса.

Пример кода для отображения прогресс-бара

procedure ShowProgress(Position, Max: Integer);
var
  i, j: Integer;
  BarWidth: Integer = 28; // Ширина полосы прогресса, не должна превышать 79 символов
begin
  Write(#13'['); // Возврат каретки для перезаписи текущей строки
  j := Position * BarWidth div Max; // Расчет ширины заполненной части полосы
  for i := 1 to BarWidth do
    if i <= j then Write('#') else Write('-'); // Отображение заполненной и незаполненной частей
  Write(']'); // Завершение строки
end;

Используя данный метод, можно также добавить отображение текущего процента выполнения процесса, например, следующим образом:

procedure ShowProgressWithPercent(Position, Max: Integer);
begin
  Write(#13'Progress: #d of #d (#d%)', [Position, Max, (Position * 100) div Max]);
end;

Пример консольного приложения с индикатором прогресса

program Project1;
{$APPTYPE CONSOLE}

uses
  System.SysUtils;

var
  i: Integer;
  StopValue, Pct: Integer;
  StatusMsg: string = #13'Processing %d of %d (%d%%) ...';
begin
  StopValue := 150; // Замените на верхний предел, например, количество строк в TStringList
  for i := 1 to StopValue do
  begin
    Pct := Trunc((i * 1.0 / StopValue) * 100);
    Write(Format(StatusMsg, [i, StopValue, Pct]));
    Sleep(250); // Искусственная задержка для демонстрации прогресса
  end;
  Write(#13'Processing complete. Press Enter to quit.');
  ReadLn;
end.

Также можно использовать более продвинутые методы очистки экрана и отображения прогресса, например, с использованием функций Windows API, как показано в альтернативном ответе, но для простоты и ясности понимания лучше начать с базовых примеров, таких как выше.


Этот пример демонстрирует базовый подход к созданию индикатора прогресса в консольном приложении на Delphi, используя Object Pascal. Приведенный код можно интегрировать в существующие проекты для отображения прогресса выполнения длительных операций, таких как загрузка и обработка больших текстовых файлов.

Создано по материалам из источника по ссылке.

Создание индикатора прогресса для консольного приложения на Delphi, который использует анимацию загрузки.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: DOS и Консоль ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-02-05 22:12:31/0.011612892150879/0