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

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

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

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 28.10.2008, 12:59   #1
ARXangel
Пользователь
 
Регистрация: 01.02.2008
Сообщений: 24
По умолчанию Копирование файлов

Привет всем!
Вот код функция копирования файлов с помощью TSHFileOpStruct

var
Ret: integer;
ipFileOp: TSHFileOpStruct;

begin
Screen.Cursor:=crAppStart;
FillChar (ipFileOp, SizeOf(ipFileOp),0);
with ipFileOp do
begin
wnd:= Handle; {указатель на окно, которое будет являться
владельцем выполняемого процесса}
wFunc:= OpMode; {операция, которую надо выполнить.
Сюда будет записано передаваемое значение.}
pFrom:= pChar(Src); {Путь-источник}
pTo:= pChar(Dest); {Путь-приемник}
if DelRicleBin then
fFlags:= FOF_ALLOWUNDO + FOF_SILENT
else
fFlags := FOF_NOCONFIRMMKDIR;
fAnyOperationsAborted := False; {это свойство будет равно true,
если пользователь прервал выполнение операции}
hNameMappings := nil;
lpszProgressTitle := '';
end;
try
Ret := SHFileOperation (ipFileOp);
except
Ret := 1;
end;
result := (Ret = 0);
Screen.Cursor:=crDefault;
end;


Как создать свое окно с отображением хода процесса копирования?
Заранее всем спасибо!
Если вы хотите защитить вашу систему от «дурака», то всегда найдется один такой, изобретательность которого вы и предвидеть не могли.
ARXangel вне форума Ответить с цитированием
Старый 28.10.2008, 18:11   #2
FaTaL
Участник клуба
 
Аватар для FaTaL
 
Регистрация: 09.11.2007
Сообщений: 1,761
По умолчанию

На форме разместить что то типа ProgressBar
Вот код например ProgressBar переименован в Prog
Код:
procedure TForm1.Button3Click(Sender: TObject);
var
kolR, KolW:integer;
SizeR, Size:Int64;
buf: array [0..4096] of char;
begin
{$I-}
  AssignFile(f1,FileF);
  AssignFile(f2,FileT);
  reset(f1,1);
  rewrite(f2,1);
  Size:=FileSize(f1);               
  Label1.Caption:=IntToStr(Size);
  SizeR:=0;
  KolR:=0;
  KolW:=0;
  While KolR=KolW do
    begin
      BlockRead(f1, buf, SizeOf(Buf), KolR);
      If KolR=0 then break;
      BlockWrite(f2,buf, KolR, KolW);
      SizeR:=SizeR+KolW;
      Prog.Progress:=Round(100*SizeR/Size);
      Application.ProcessMessages;
    end;
  CloseFile(f1);
  CloseFile (f2);
{$I+}
end;
FaTaL вне форума Ответить с цитированием
Старый 30.10.2008, 11:24   #3
ARXangel
Пользователь
 
Регистрация: 01.02.2008
Сообщений: 24
По умолчанию

Дописал вот такой код:
Gauge1.Progress := Round(CopyBytes / Size * 100);
lSpeed.Caption := Inttostr(Round(Speed / 1024))+ 'кб/с';
Gauge2.Progress := Round(FileNum / Files * 100);
Label1.Caption := MinimizeName(FSrc, Label1.Canvas, 250)+' -->';
Label2.Caption := MinimizeName(FDes, Label2.Canvas, 250);
Но он изменяется только после окончания, и показывает, только конечный результат
Подскажите как сделать чтобы он изменялся в процессе копирования?
Если вы хотите защитить вашу систему от «дурака», то всегда найдется один такой, изобретательность которого вы и предвидеть не могли.
ARXangel вне форума Ответить с цитированием
Старый 30.10.2008, 11:54   #4
FaTaL
Участник клуба
 
Аватар для FaTaL
 
Регистрация: 09.11.2007
Сообщений: 1,761
По умолчанию

Цитата:
Сообщение от ARXangel Посмотреть сообщение
Дописал вот такой код:
Gauge1.Progress := Round(CopyBytes / Size * 100);
lSpeed.Caption := Inttostr(Round(Speed / 1024))+ 'кб/с';
Gauge2.Progress := Round(FileNum / Files * 100);
Label1.Caption := MinimizeName(FSrc, Label1.Canvas, 250)+' -->';
Label2.Caption := MinimizeName(FDes, Label2.Canvas, 250);
Но он изменяется только после окончания, и показывает, только конечный результат
Подскажите как сделать чтобы он изменялся в процессе копирования?
Application.ProcessMessages;
Поставили?
FaTaL вне форума Ответить с цитированием
Старый 30.10.2008, 12:29   #5
ARXangel
Пользователь
 
Регистрация: 01.02.2008
Сообщений: 24
По умолчанию

Application.ProcessMessages

Стоит, я просто первый раз забыл его написать.
Если вы хотите защитить вашу систему от «дурака», то всегда найдется один такой, изобретательность которого вы и предвидеть не могли.
ARXangel вне форума Ответить с цитированием
Старый 30.10.2008, 12:29   #6
Nester
Форумчанин
 
Аватар для Nester
 
Регистрация: 22.10.2008
Сообщений: 103
По умолчанию

Может кому сгодится
Вложения
Тип файла: rar FileCopy.rar (323.1 Кб, 30 просмотров)
Никто не знает больше чем не знаю я
Nester вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Копирование файлов Artificial Помощь студентам 5 05.06.2008 18:42
Копирование файлов matus Помощь студентам 9 27.02.2008 19:34
Копирование файлов Шеллер Алексей Общие вопросы Delphi 21 30.08.2007 17:34
Копирование файлов Devil_uu Помощь студентам 2 24.03.2007 20:27