Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2010.08.29;
Скачать: CL | DM;

Вниз

Копирование с индикатором процесса   Найти похожие ветки 

 
akosh12345 ©   (2010-06-07 20:07) [0]

У меня возник вопрос при копировании. Копирую так
// КОПИРОВАНИЕ ТОЛЬКО ДЛЯ ФАЙЛОВ
procedure CopyFileThread.Execute;
const
 BufSize = 3 * 4 * 4096; { 48Kbytes gives me the best results }
type
 PBuffer = ^TBuffer;
 TBuffer = array[1..BufSize] of Byte;
var
   Buffer: PBuffer;
   infile, outfile: file;

begin

 if (InFileName <> OutFileName) then
 begin
   buffer := nil;
   Assign(infile, InFileName);
   Reset(infile, 1);
   try
     SizeFile := FileSize(infile);
     MasCopy[ForMas - 1].Progres.Max := SizeFile;

     Assign(outfile, OutFileName);
     Rewrite(outfile, 1);
     try
       SizeDone := 0;
       New(Buffer);
       repeat
         BlockRead(infile, Buffer^, BufSize, Size);
         Inc(SizeDone, Size);
         Synchronize(SetProgeress);
         BlockWrite(outfile, Buffer^, Size)
       until Size < BufSize;
       FileSetDate(TFileRec(outfile).Handle,
       FileGetDate(TFileRec(infile).Handle));
     finally
       if Buffer <> nil then
         Dispose(Buffer);
       CloseFile(outfile)
     end;
   finally
     CloseFile(infile);
   end;
 end
 else
   raise EInOutError.Create("File cannot be copied onto itself");

 MasCopy[ForMas - 1].Progres.Position := 0;

end; {FastFileCopy}

procedure CopyFileThread.SetProgeress;
begin
 MasCopy[ForMas - 1].Progres.Position := SizeDone;
 MasCopy[ForMas - 1].Procent.Caption := Inttostr(Round((size/MasCopy[ForMas - 1].Progres.Max))) + "%";

end;
// КОПИРОВАНИЕ ТОЛЬКО ДЛЯ ФАЙЛОВ ВЫШЕ

Создаю динамически массив типа записи:
  FirstCopyForm = Record                 // шаблон формы копирования
     Form : TForm;
     NameCopy, Procent, V, Time  : TLabel;
     Progres : TProgressBar;
     OkOrCansel : TButton;
  End;

 MasCopy : array of FirstCopyForm;  // создаю массив для динамического копирования, все переменные исп для этого до //////
 ForMas : Integer; // размер массива

задаю так копирование
        OutFileName := ToCopy.Text;
        ForMas := ForMas + 1;
        SetLength(MasCopy, ForMas);
        InitMasCell(MasCopy, ForMas);

        FileThread  := CopyFileThread.Create(false);
        FileThread.FreeOnTerminate := true;
        FileThread.Priority := Prior;

Процедура InitMasCell(MasCopy, ForMas);
procedure InitMasCell ( var Mas : array of FirstCopyForm; TekInit : integer);
begin
// инициализирую все компоненты для отображние формы копирования

  With Mas[TekInit-1] do
     Begin
        Form := TForm.Create(nil);

        NameCopy := TLabel.Create(Form);
        Procent := TLabel.Create(Form);
        V  := TLabel.Create(Form);
        Time  := TLabel.Create(Form);
        OkOrCansel := TButton.Create(Form);
        Progres := TProgressBar.Create(Form);
     ////////////////////////////////////////////////////////////////

     // обработка основных надписей
        NameCopy.Parent := Form;
        NameCopy.Left := 6;
        NameCopy.Top := 3;
        NameCopy.Height := 13;
        NameCopy.Width := 79;
        NameCopy.Font.Style := [fsBold];
        NameCopy.Caption := "Копирование";

        Procent.Parent := Form;
        Procent.Left := 190;
        Procent.Top := 21;
        Procent.Width := 17;
        Procent.Height := 13;
        Procent.Font.Style := [fsBold];
        Procent.Caption := "0%";

        Progres.Parent :=  Form;
        Progres.Left := 6;
        Progres.Top := 20;
        Progres.Width := 179;
        Progres.Height := 18;

        OkOrCansel.Parent := Form;
        OkOrCansel.Left := 220;
        OkOrCansel.Top := 18;
        OkOrCansel.Width := 60;
        OkOrCansel.Height := 20;
        OkOrCansel.TabStop := False;
        OkOrCansel.Caption := "Пауза";

     // обработка формы копирования
        Form.Parent := nil;
        Form.Position := poScreenCenter;
        Form.Caption := "";
        Form.Width := 294;
        Form.Height := 72;

        Form.OnCreate :=

        Form.Show;
     End;

end;

Вопрос состоит в том, что не вычисляется, сколько процентов скопировалось. Почему так?
Еще один вопрос. Я создал динамически объкт. Как я могу обработать события этого объеска типа OnCreate?


 
Leonid Troyanovsky ©   (2010-06-07 22:09) [1]


> akosh12345 ©   (07.06.10 20:07)  

> const
>  BufSize = 3 * 4 * 4096; { 48Kbytes gives me the best results
> }

64K даст мне результат лучше.

--
Regards, LVT.


 
Leonid Troyanovsky ©   (2010-06-07 22:12) [2]


> Еще один вопрос. Я создал динамически объкт. Как я могу
> обработать события этого объеска типа OnCreate?

OnCreate :=

--
Regards, LVT.


 
akosh12345 ©   (2010-06-07 23:02) [3]

почему 64кб лучше?


 
akosh12345 ©   (2010-06-07 23:03) [4]

почему 64кб лучше?


 
Leonid Troyanovsky ©   (2010-06-07 23:06) [5]


> akosh12345 ©   (07.06.10 23:02) [3]

> почему 64кб лучше?

Бо оно даст мне лучший результат.

--
Regards, LVT.


 
akosh12345 ©   (2010-06-07 23:07) [6]

поясни почему оно лучше? аргументы


 
Leonid Troyanovsky ©   (2010-06-07 23:16) [7]


> akosh12345 ©   (07.06.10 23:07) [6]

> поясни почему оно лучше? аргументы

Сначала пусть выскажется автор кода (ремарки).
Ну, а потом можно устроить соревнования 48 vs 64.
Результаты можно опубликовать здесь, IMHO.

--
Regards, LVT.


 
Leonid Troyanovsky ©   (2010-06-07 23:27) [8]

Да, и еще. Про Application.ProcessMessages читали-с?
Хотя, я не поклонник. Ка, впрочем, и всяких BlockRead.

--
Regards, LVT.


 
akosh12345 ©   (2010-06-07 23:55) [9]

ну давайте устроим совернование между 48vs64ъ


 
Германн ©   (2010-06-08 01:27) [10]


> akosh12345 ©   (07.06.10 23:55) [9]
>
> ну давайте устроим совернование между 48vs64ъ
>

Лучше бы сделал простой тестовый пример. И если он не работает, то обратился бы сюда с вопросом. А то мало ли что такое смешение коней и людей трудночитаемое, Так ещё и вызывает вопросы типа  "а что делает вот эта строчка
>  else
>    raise EInOutError.Create("File cannot be copied onto
> itself");
>
>  MasCopy[ForMas - 1].Progres.Position := 0; --вот эта самая
>
> end; {FastFileCopy}
>

вне рамок  Synchronize?


 
brother ©   (2010-06-08 05:49) [11]

код копипаст с сайта:
http://base.vingrad.ru/view/996-Kopirovanie-faylov
вопросы?))))


 
brother ©   (2010-06-08 07:09) [12]

> вопросы?))))

те видим оригинал и добавления... теперь можно и вопросы?)


 
begin...end ©   (2010-06-08 10:08) [13]

CopyFileEx, lpProgressRoutine -- оно не проще?



Страницы: 1 вся ветка

Текущий архив: 2010.08.29;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.006 c
3-1243931561
Александр
2009-06-02 12:32
2010.08.29
Объединение таблиц


15-1275984221
SP
2010-06-08 12:03
2010.08.29
Подскажите ПО реализующее стабильный VPN-клиент (PPTP)


15-1275997158
_REA
2010-06-08 15:39
2010.08.29
Парадокс


2-1275905953
stas
2010-06-07 14:19
2010.08.29
Гарантированно убить Thread


10-1167679059
TStas
2007-01-01 22:17
2010.08.29
Как получить код странички, загруженной в WebBrowser?