Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> подобие прогрес бара в консоли 
:(
    Опции темы
Volkogriz
  Дата 10.1.2013, 01:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 216
Регистрация: 16.9.2007

Репутация: 1
Всего: 1



Можно ли как-нибудь сделать подобие прогрес бара в консоли?
Например что-нибудь типа:
Код

[**************************]

Искал негдн даже примера элюментарного нет.
Вот в этот код хочу вставить:
Код

function PackDir(ArcName, Path: string; OnWork: TNotifyEvent = nil): byte;
var
  fs: TFileStream;
  cs: TCompressionStream;

function FilesScan(Dir: string): byte;
var
  sr: TSearchRec;
  s:  string;
  ln: byte;
  sz: int64;
  fs: TFileStream;
begin
 SaveLog:= TStringList.Create;
   SaveLog.Add(Rus(DateToStr(Date)));
  result := ERR_OK;
  if FindFirst(Dir + '*.*', faAnyFile, sr) = 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.1.2013, 01:43
--------------------
("`-''-/").___..--''"`-._`6_6  ) ,,,`-.  ( ''' ).` "_-.__.')(_Y_.)'  ._''' )  `._ `. ``-.__'.-'_..`--'_..-_/'''/--'_.' ,'(il).-'''''(li).'  ((!.-'
PM MAIL ICQ   Вверх
Alexeis
Дата 10.1.2013, 01:45 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 109
Всего: 459



Т.е. данные должны идти отдельно, а прогресс отдельно?

Добавлено через 1 минуту и 23 секунды
Думаю вот эта функция поможет для перемещения позиции курсора SetConsoleCursorPosition


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Volkogriz
Дата 10.1.2013, 01:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 216
Регистрация: 16.9.2007

Репутация: 1
Всего: 1



Нет прогресс из работы TFileStream.
Но можно и отдельно, я просто не сталкивался вообще ни когда с этим.
понятия не имею как он в консоле работает smile 
--------------------
("`-''-/").___..--''"`-._`6_6  ) ,,,`-.  ( ''' ).` "_-.__.')(_Y_.)'  ._''' )  `._ `. ``-.__'.-'_..`--'_..-_/'''/--'_.' ,'(il).-'''''(li).'  ((!.-'
PM MAIL ICQ   Вверх
Alexeis
Дата 10.1.2013, 09:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 109
Всего: 459



Я имею ввиду, что в окошке одновременно с прогрессом будет выводиться еще текст или только прогресс? 


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Volkogriz
Дата 10.1.2013, 09:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 216
Регистрация: 16.9.2007

Репутация: 1
Всего: 1



с текстом, но можно и без)
Мне просто разобраться.
С уважением,
Volkogriz!
--------------------
("`-''-/").___..--''"`-._`6_6  ) ,,,`-.  ( ''' ).` "_-.__.')(_Y_.)'  ._''' )  `._ `. ``-.__'.-'_..`--'_..-_/'''/--'_.' ,'(il).-'''''(li).'  ((!.-'
PM MAIL ICQ   Вверх
Alexeis
Дата 10.1.2013, 11:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 109
Всего: 459



Ну если просто, то выводишь последовательно символы "[" потом "*" и в конце "]" один за другим в строчку. Вот и получается прогресс. 

Код

    Write('[');
    for I := 0 to 50
    do
      begin
         write('*');
         Sleep(100);
      end;
    write(']');
    Sleep(1000);



Это сообщение отредактировал(а) Alexeis - 10.1.2013, 11:38


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Чучмек
Дата 10.1.2013, 12:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


НЭТ БИЛЭТ
**


Профиль
Группа: Участник
Сообщений: 841
Регистрация: 11.5.2008
Где: СССР

Репутация: 14
Всего: 41



Код

program Project2;

{$APPTYPE CONSOLE}

uses
  SysUtils,windows;

const
  cas1='Готов                                             ';
  cas2='Подождите думаю';

var
 cp: TCoord;
 i:integer;
 s:string;
 sbi:TConsoleScreenBufferInfo;
 os1,os2:string;
 hOut:cardinal;
begin
  { TODO -oUser -cConsole Main : Insert code here }
SetLength(os1,length(cas1));
AnsiToOem(pchar(cas1),pchar(os1));
SetLength(os2,length(cas2));
AnsiToOem(pchar(cas2),pchar(os2));
hOut:=GetStdHandle(STD_OUTPUT_HANDLE);
writeln(os1);
while s<>'exit' do
 begin
 readln(s);
 GetConsoleScreenBufferInfo(hOut,sbi);
 cp.X:=0;
 cp.Y:=0;
 SetConsoleCursorPosition(hOut,cp);
 Write(os2);
 for i:=0 to 10 do
  begin
  sleep(300);
  write('.');
  end;
 cp.X:=0;
 SetConsoleCursorPosition(hOut,cp);
 writeln(os1);
 cp:=sbi.dwCursorPosition;
 SetConsoleCursorPosition(hOut,cp);
 writeln('>'+s);
 end;


end.



--------------------
умную мысль держи при себе, а дурной - поделись с другими 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0785 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.