Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.64/11: Рейтинг темы: голосов - 11, средняя оценка - 4.64
Балбес
3 / 3 / 2
Регистрация: 22.12.2009
Сообщений: 206

Отобразить загрузку в progress

13.01.2023, 22:53. Показов 2609. Ответов 37
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте! кто нить делал загрузку в версии 11 сашка?
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
function GetFileSize(FileName: string): Integer;
var
FS: TFilestream;
begin
try
FS := TFilestream.Create(Filename, fmShareDenyRead);
except
Result := -1;
end;
if Result <> -1 then
Result := FS.Size;
FS.Free;
end;
ругается на файл 7.45гига.
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
var
i:integer; SizeOfApp: Int64;
begin
ProgressBar1.position:= 0;
if OpenDialog1.Execute then begin
ProgressBar1.max:= round(GetFileSize(OpenDialog1.FileName));
SizeOfApp := GetFileSize(ParamStr(0));
ProgressBar1.position:=(GetFileSize(OpenDialog1.FileName));
{/*for i:=1 to GetFileSize(OpenDialog1.FileName) do
begin
ProgressBar1.position:=i;
end;    }
//GLActor1.LoadFromFile(OpenDialog1.FileName);
//form1.Caption := inttostr(GetFileSize('C:\WINDOWS\notepad.exe'));
///ProgressBar1.position:= round(GetFileSize(OpenDialog1.FileName)); IntToStr
glactor1.ShowAxes:=false;
где то пример видел:
Delphi
1
2
for i:=1 to size do
ProgressBar1.position:=i;
файл загружался 1час 28 мин. можно примерчик пожалуйста
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
13.01.2023, 22:53
Ответы с готовыми решениями:

Отобразить Progressbar загрузку ЦП
Я делаю программу, и хотел спросить как сделать так: Я получаю информацию от процессора и идет заргрузка, что бы во время загрузки...

Как отобразить загрузку процессора?
Привет всем!!! Знает кто-нибудь как отобразить загрузку процессора, типа сенсора в Norton Utillits?

Вывести на форму загрузку CPU и графически отобразить это в виде заливки прямоугольника
Добрый день! Хочу вывести на форму загрузку CPU и графически отобразить это в виде заливки прямоугольника (столбика): private...

37
Балбес
3 / 3 / 2
Регистрация: 22.12.2009
Сообщений: 206
18.01.2023, 20:53  [ТС]
Студворк — интернет-сервис помощи студентам
пример, где будет отображаться в progressbar сохранение и не зависать, как это обычно во многих примерах.
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
procedure TForm1.LoadFile(const FileName: string);
const
  BufferSize = 65536;
var
  StrBuffer: array[0..BufferSize - 1] of Char;
  F: file;
  MemoryStream: TMemoryStream;
  Result, Max, Curr, Progress: Integer;
begin
  AssignFile(F, FileName);
  Reset(F, 1);
  Curr := 0;
  Max := FileSize(F) div BufferSize + 1;
  MemoryStream := TMemoryStream.Create;
  try
    repeat
      BlockRead(F, StrBuffer, BufferSize, Result);
      MemoryStream.Write(StrBuffer, Result);
      Inc(Curr);
      Progress := Curr * 100 div Max;
      ProgressBar1.Position  := Progress;
      Application.ProcessMessages;
    until Result <= 0;
 
    MemoryStream.Seek(0, soBeginning);
    Memo1.Lines.LoadFromStream(MemoryStream);
  finally
    MemoryStream.Free;
  end;
  CloseFile(F);
  ProgressBar1.Position  := 0;
  Button1.Enabled:=true;
 // form1.progressbar4.Position:=0;
 end;
0
Модератор
4153 / 2362 / 814
Регистрация: 15.11.2015
Сообщений: 9,496
18.01.2023, 23:38
leon2009, у тебя приложение 32 или 64 битное? А оперативки на компе сколько?
0
Балбес
3 / 3 / 2
Регистрация: 22.12.2009
Сообщений: 206
19.01.2023, 17:50  [ТС]
на одном пк 16г на другом 4гб, по времени +- одинакового.
приложение и 32х и 64, по времени тоже одинакового.
0
 Аватар для krapotkin
6854 / 4680 / 1465
Регистрация: 14.04.2014
Сообщений: 20,686
Записей в блоге: 21
19.01.2023, 18:02
кони, люди, все смешалось
и тебе Reset и TStream и еще Memo!
а началось все с 7.5 ГБайт
и я все жду, чо там как мемо будет поживать
0
Модератор
4153 / 2362 / 814
Регистрация: 15.11.2015
Сообщений: 9,496
19.01.2023, 18:24
leon2009, на 32 битном приложении описанным выше образом 7,5 ГБ файл не открыть. На 64 битном возможно, но при 8 ГБ оперативки будет довольно печально. И работа с таким объёмом данных в Memo - тот ещё мазохизм. Там точно в Memo загружается такой большой файл?
0
Балбес
3 / 3 / 2
Регистрация: 22.12.2009
Сообщений: 206
20.01.2023, 19:09  [ТС]
да, экспериментирую! в мемо!
0
Балбес
3 / 3 / 2
Регистрация: 22.12.2009
Сообщений: 206
24.01.2023, 20:53  [ТС]
а как это в dll упаковать ?
0
пофигист широкого профиля
4770 / 3207 / 862
Регистрация: 15.07.2013
Сообщений: 18,615
25.01.2023, 01:09
Цитата Сообщение от leon2009 Посмотреть сообщение
а как это в dll упаковать ?
А это ещё зачем?
0
Балбес
3 / 3 / 2
Регистрация: 22.12.2009
Сообщений: 206
25.01.2023, 15:48  [ТС]
ради знаний
0
Балбес
3 / 3 / 2
Регистрация: 22.12.2009
Сообщений: 206
05.02.2023, 20:22  [ТС]
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
type TCallBack = procedure (progress, total: Cardinal);
 
function LoadFile(const FileName: TFileName; s:TStrings; cbProgress: TCallBack):boolean;
var
MemStr: TMemoryStream; Title: String;
begin
MemStr:= TMemoryStream.Create;
try
 MemStr.LoadFromFile(FileName);
 MemStr.Seek(0, soFromBeginning);
//ReadStreamStr( MemStr );
s.LoadFromStream(MemStr);
cbProgress(MemStr.Size,1);
result:=true;
 finally
  MemStr.Free;
 end;
end;
procedure cbProgress(Curr, Max: Cardinal);
begin
    Form1.ProgressBar1.Max:= (Curr div 1024) div 1014;  Form1.Label2.Caption:=inttostr(Form1.ProgressBar1.max);
    Form1.ProgressBar1.Position :=Form1.ProgressBar1.Max; Form1.Label1.Caption:=inttostr(Form1.ProgressBar1.Position); // Curr * 100 div Max; 5% ot 50 = (5*50)/100
    Application.ProcessMessages;
end;
 
procedure TForm1.Button1Click(Sender: TObject);
begin
LoadFile('test.txt', memo1.Lines, @cbProgress);
Application.ProcessMessages;
end;
с начало прогружает в мемо а только потом все остальное... и мне не нравится s.LoadFromStream(MemStr);
я правильно делаю?
0
 Аватар для krapotkin
6854 / 4680 / 1465
Регистрация: 14.04.2014
Сообщений: 20,686
Записей в блоге: 21
06.02.2023, 09:54
маловато ProcessMessages, ящитаю
надо почаще...
особенно в Button1Click

само название прогресс - предполагает, что это процедура, которая много раз вызывается и постоянно обновляет значения в компонентах
и Callback тоже - кто-то над чем то работает, и когда-то или время от времени вызывает этот Callback

тут все вызывается ровно один раз
можно просто поставить это значение в прогрессбар при создании формы и более не трогать.
вам уже много раз написали, что если вам нужно нормальный интерфейс, то действие должно происходить в отдельном потоке, что 7Гб в мемо не влезет, и в MemoryStream - ТОЖЕ!

и мы все еще на старте...
0
Балбес
3 / 3 / 2
Регистрация: 22.12.2009
Сообщений: 206
06.02.2023, 13:06  [ТС]
про 7г я понял а LoadFile -> и так отдельно ?! прогресс отдельно, loadfile отдельно.
я не могу сообразить как из функции в мемо передать MemStr

Добавлено через 1 минуту
Этот способ, что выше сначала грузит все в мемо, и только потом делает все остальное.
0
 Аватар для krapotkin
6854 / 4680 / 1465
Регистрация: 14.04.2014
Сообщений: 20,686
Записей в блоге: 21
06.02.2023, 13:29
я написал, что и как в #10

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

что из этого не ясно ?
0
130 / 109 / 22
Регистрация: 23.05.2015
Сообщений: 727
06.02.2023, 19:46
Цитата Сообщение от leon2009 Посмотреть сообщение
нашел 480000 строк, вручную сидел забивал 1 2 3 4

Не по теме:


Именно ручной труд - подвигает нас на Софтверные подвиги...

0
Балбес
3 / 3 / 2
Регистрация: 22.12.2009
Сообщений: 206
06.02.2023, 21:44  [ТС]
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
function Memory(text: string):string;
begin
    form1.Memo1.Lines.Add(text);
 end;
 
function LoadFile(const FileName: TFileName):string;
var
f:file; text:string; SizeFile:Integer;
begin
  AssignFile(f, FileName);
  Reset(f, 64);
    try
    SetLength(text, SizeFile);
    BlockRead(F, PChar(text)^, (FileSize(F) div 64) + 1);
   Memory(PChar(text));
  finally
    CloseFile(f);
  end;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
LoadFile('40.txt');
начало правильное???
на самом деле: когда первый раз загрузил файл из 800 000 строк по 64кб
var
F: file; AByte:string;SizeFile:integer;
begin
AssignFile(f, FileName);
Reset(f, 64);
// while not Eof(f) do
try // begin
SetLength(AByte, SizeFile);
BlockRead(F, PChar(AByte)^, (FileSize(F) div 64) + 1);
form1.Memo1.Lines.Add(AByte);
cbProgress(SizeFile,(FileSize(F) div 64)); showmessage('OK');
// ReadStreamStr(AByte);
finally // end;
CloseFile(f);
я столько раз нажал на ОК -> showmessage
0
 Аватар для krapotkin
6854 / 4680 / 1465
Регистрация: 14.04.2014
Сообщений: 20,686
Записей в блоге: 21
07.02.2023, 17:50
Лучший ответ Сообщение было отмечено leon2009 как решение

Решение

раз
Кликните здесь для просмотра всего текста
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
TLoadFileStream = class
private
  fsFrom, fsTo : TFileStream;
public 
  ProgressBar : TProgressBar;
  FileFrom, FileTo : string;
  constructor Create(AFileName : string; AProgressBar : TProgressBar);
  procedure Execute; override;
end;
 
constructor TLoadFileStream.Create(AFileFrom, AFileTo : string; AProgressBar : TProgressBar; ATermProc : TNotifyEvent);
begin
  inherited Create(true);
  FreeOnTerminate := true;
  FileFrom := AFileFrom;
  FileTo := AFileTo;
  ProgressBar := AProgressBar;
  OnTerminate := ATermProc;
end; 
 
procedure TLoadFileStream.Execute; 
var 
  buf : TBytes;
  n : integer;
const
  BUF_SIZE = 65536;
begin
  SetLength(buf, BUF_SIZE);
  fsFrom := TFileStream.Create(AFileFrom, fmRead);
  fsTo  := TFileStream.Create(AFileTo, fmCreate);
  try
    synchronize(procedure begin progressBar.MaxValue := fsFrom.size; end);
    repeat 
      n := fsFrom.Read(buf[0], BUF_SIZE);
      fsTo.Write(buf[0], n);
      synchronize(procedure begin progressBar.Value := fsFrom.position; end);
    until n < length(buf);
  finally
    fsFrom.free;
    fsTo.free;
  end;
end;

два
Кликните здесь для просмотра всего текста
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
procedure TForm1.OnThreadTerm(Sender : TObject);
begin
  // всё...
  MyHideProgressPanelMethod();
end;
 
procedure TForm1.Button1Click(Sender : TObject);
var
  th : TLoadFileThread;
begin
  th := TLoadFileThread.Create(filename1, filename2, ProgressBar1, OnThreadTerm);
  th.start;
 
  MyShowProgressPanelMethod();
end;
1
 Аватар для Пытливый
3765 / 2272 / 706
Регистрация: 29.05.2013
Сообщений: 9,622
07.02.2023, 17:55
Delphi
1
TLoadFileStream = class(TThread)
1
 Аватар для krapotkin
6854 / 4680 / 1465
Регистрация: 14.04.2014
Сообщений: 20,686
Записей в блоге: 21
07.02.2023, 18:06
дада, конечно
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
07.02.2023, 18:06

В банк требуется программист: СУБД Progress, Progress 4GL, БИСквит
ИНФОРМАЦИЯ О КОМПАНИИ Российский банк ОСНОВНЫЕ ОБЯЗАННОСТИ Разработка и сопровождение прикладных систем (рынок FOREX, операции...

Progress Button, как вызвать метод, а после закончить Progress?
Есть кнопка с прогрессом, по ее клику вызывается это: private void sendProgress (final LinearProgressButton button){ ...

Получите статистику, оценивающую текущую загрузку (current workload) сетей зданий, а также среднюю загрузку
Прошу помочь с данной задачей, которую необходимо выполнить в NetCracker: &quot;Сеть включает 9 административных зданий и производственных...

AIDA показывает загрузку ЦП в 100% при отсутствии какой-либо фактической нагрузки. Диспетчер задач скидывает загрузку
Добрый день уважаемые админы и пользователи сайта cyberforum.ru! Очень прошу вас развеять мои сомнения и помочь в проблеме. С...

Progress Bar
помогите плиз не могу понять почему мне подчёркует AnsiString Folder и другие . void FolderSize(AnsiString Folder,int...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
38
Ответ Создать тему
Новые блоги и статьи
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман. Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
мат медиц модель 30. презентация проекта
anaschu 27.08.2026
хоп хоп хоп хидахоп, а я кладую))
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru