Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 10.01.2013, 02:29   #1
Volkogriz
Форумчанин
 
Аватар для Volkogriz
 
Регистрация: 11.10.2007
Сообщений: 384
Вопрос прогресс бар в консоли

Можно ли как-нибудь сделать подобие прогресс бара в консоли?
Например что-нибудь типа:
PHP код:
[**************************] 
Искал негдн даже примера элюментарного нет.
Вот в этот код хочу вставить:
PHP код:
function PackDir(ArcNamePathstringOnWorkTNotifyEvent nil): byte;
var
  
fsTFileStream;
  
csTCompressionStream;
function 
FilesScan(Dirstring): byte;
var
  
srTSearchRec;
  
s:  string;
  
lnbyte;
  
szint64;
  
fsTFileStream;
begin
 SaveLog
:= TStringList.Create;
   
SaveLog.Add(Rus(DateToStr(Date)));
  
result := ERR_OK;
  if 
FindFirst(Dir '*.*'faAnyFilesr) = 0 then
  begin
    repeat
      
if sr.Name[1] <> '.' then begin
        
if sr.Attr and faDirectory faDirectory then
        begin
          ln 
:= FilesScan(Dir sr.Name '\');
          if result = ERR_OK then result := ln;
        end else
        if (sr.Attr and faArchive) = faArchive then
        begin
          s := Dir + sr.Name;
          try
            fs := TFileStream.Create(s, fmOpenRead or fmShareDenyWrite);
            s := copy(s, Length(path)+1, Length(s));
            writeln(Rus(s+ ' 
ДелаюВот Здесь и хотел вставить'));
            ln := Length(s);
            cs.Write(ln, 1);
            cs.Write(s[1], ln);
            sz := fs.Size;
            cs.Write(sz, SizeOf(sz));
            cs.CopyFrom(fs, sz);
            writeln(Rus(s + ' 
Готово!'));
            SaveLog.Add(Rus(TimeToStr(Time)+' '+ Dir + sr.Name+' 
-'+ IntToStr(fs.Size)+' byte'));
            fs.Free;
          except
            result := ERR_FILES;
          end;
        end;
      end;
      until FindNext(sr) <> 0;
    FindClose(sr);
  end else result := ERR_NO_FILES;
end;
begin
  if Path[Length(Path)] <> '
\' then Path := Path + '\';
  try
    fs := TFileStream.Create(ArcName, fmCreate or fmShareDenyWrite);
    fs.Write(signature[1], Length(signature));
  except
    result := ERR_CREATE_ARC;
    Exit;
  end;
  cs := TCompressionStream.Create(clMax, fs);
  if Assigned(OnWork) then cs.OnProgress := OnWork;
  result := FilesScan(Path);
  cs.Free;
  fs.Free;
  writeln(Rus('
Завершино!'));
   SaveLog.Add('
end;');
  end; 
С уважением,
Volkogriz!
Не количеством плюсов измеряется репутация человека...!

Последний раз редактировалось Volkogriz; 10.01.2013 в 02:48.
Volkogriz вне форума Ответить с цитированием
Старый 10.01.2013, 02:54   #2
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,434
По умолчанию

Просто очищаете консоль и заполняете заново тем же содержимым только меняется строка с прогрессом.
Загляните в исходники upx.
Человек_Борща вне форума Ответить с цитированием
Старый 10.01.2013, 03:21   #3
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

лучше уж позиционировать курсор
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 10.01.2013, 03:25   #4
Volkogriz
Форумчанин
 
Аватар для Volkogriz
 
Регистрация: 11.10.2007
Сообщений: 384
По умолчанию

Цитата:
позиционировать курсор
я просто не сталкивался вообще ни когда с этим.
понятия не имею как он работает тоесть сам смысл(
Не количеством плюсов измеряется репутация человека...!
Volkogriz вне форума Ответить с цитированием
Старый 10.01.2013, 06:52   #5
phomm
personality
Старожил
 
Аватар для phomm
 
Регистрация: 28.04.2009
Сообщений: 2,899
По умолчанию

Найти аналог процедуры GotoXY для виндовс-консоли (в паскале этот было в модуле CRT) и просто перезаписывать строку в консоли каждый раз добавляя звездочку, в остальные места пробел, начало и конец []
Всё.
Лично я пользуюсь CRT Unit v.1.0 By Serhiy Perevoznyk отсюда http://www.torry.net/pages.php?id=236 Чутка подшаманил ReadKey, правда )
phomm вне форума Ответить с цитированием
Старый 10.01.2013, 09:12   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

SetConsoleCursorPosition
Ищи примеры этой функции.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 10.01.2013, 19:18   #7
Volkogriz
Форумчанин
 
Аватар для Volkogriz
 
Регистрация: 11.10.2007
Сообщений: 384
По умолчанию

Цитата:
Сообщение от phomm Посмотреть сообщение
Найти аналог процедуры GotoXY для виндовс-консоли (в паскале этот было в модуле CRT) и просто перезаписывать строку в консоли каждый раз добавляя звездочку, в остальные места пробел, начало и конец []
Всё.
Лично я пользуюсь CRT Unit v.1.0 By Serhiy Perevoznyk отсюда http://www.torry.net/pages.php?id=236 Чутка подшаманил ReadKey, правда )
phomm Можете свой модуль "CRT.PAS" выложить пожалуйста?
С уважением,
Volkogriz!
Не количеством плюсов измеряется репутация человека...!
Volkogriz вне форума Ответить с цитированием
Старый 10.01.2013, 20:52   #8
phomm
personality
Старожил
 
Аватар для phomm
 
Регистрация: 28.04.2009
Сообщений: 2,899
По умолчанию

Зачем ? Берите с Торри. Мой с лично мне нужными исправлениями, какой Вам толк от него ?
А для 1 функции можно и просто винапишную SetConsoleCursorPosition использовать , как предложил Stilet , зачем целый модуль ?
phomm вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Прогресс бар Gudzik11 Общие вопросы Delphi 41 15.05.2013 10:03
Типа Прогресс бар! WizarD.89 Microsoft Office Excel 3 24.04.2011 14:20
Цикл и прогресс-бар А)-(дрей Microsoft Office Excel 4 17.03.2011 18:13
список и прогресс бар Temka Общие вопросы Delphi 1 02.06.2009 12:20