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

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

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

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

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

Закрытая тема
Ваша тема закрыта, почему это могло произойти? Возможно,
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу.
Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста".
Название темы слишком короткое или не отражает сути вашего вопроса.
Тема исчерпала себя, помните, один вопрос - одна тема
Прочитайте правила и заново правильно создайте тему.
 
Опции темы Поиск в этой теме
Старый 13.11.2009, 15:15   #1
Leo20
Пользователь
 
Регистрация: 28.08.2009
Сообщений: 36
По умолчанию Копирование файлов.

Привет люди.

Копирую файл старым добрым способом.

Procedure myCopy(InFile,OutFile: String);
var
f1, f2: File;
cop: array [1..2048] of Char;
sizefile, sizeread: Int64;
colRead, colWrite : Integer;
begin
{$I-}
try
AssignFile(f1,InFile);
AssignFile(f2, OutFile);
system.Reset(f1, 1);
sizefile := FileSize(f1);
system.Rewrite(f2, 1);
colRead := 0;
colWrite := 0;
sizeread := 0;
while colRead = colWrite do begin
BlockRead(f1, cop, SizeOf(cop), colRead);
if colRead = 0 then break;
BlockWrite(f2, cop, colRead, colWrite);
sizeread := sizeread + colRead;
form1.Gauge1.Progress := Round(100*sizeread/sizefile);
end;
finally
CloseFile(f1);
CloseFile(f2);
end;
{$I+}
end;

пару вопросов, почему форма становится не доступна в процессе копирования(ее нельзя перетаскивать и ничего нельзя выбрать на ней) и КАК ЕЕ СДЕЛАТЬ ДОСТУПНОЙ!
Leo20 вне форума
Старый 13.11.2009, 15:30   #2
Hollander
Участник клуба
 
Аватар для Hollander
 
Регистрация: 03.05.2007
Сообщений: 1,189
По умолчанию

Тут два варианта:
1. Сделать копирование в потоке
2. Или добавь в while - Application.ProcessMessages
Hollander вне форума
Старый 13.11.2009, 15:31   #3
Usov
Форумчанин
 
Аватар для Usov
 
Регистрация: 29.09.2009
Сообщений: 228
По умолчанию

используй поток (TThread) для копирования
Usov вне форума
Старый 13.11.2009, 15:32   #4
russian-stalker
Участник клубаДжуниор
 
Аватар для russian-stalker
 
Регистрация: 23.08.2008
Сообщений: 1,616
По умолчанию

Первое в определенном смысле лучше.
pushl $0x18E3DF6B
call ICQ
russian-stalker вне форума
Старый 13.11.2009, 15:40   #5
Leo20
Пользователь
 
Регистрация: 28.08.2009
Сообщений: 36
По умолчанию

а как в потоке сделать индикацию копирования, друзья мои????
Leo20 вне форума
Старый 13.11.2009, 15:50   #6
russian-stalker
Участник клубаДжуниор
 
Аватар для russian-stalker
 
Регистрация: 23.08.2008
Сообщений: 1,616
По умолчанию

Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Gauges;


type
  TForm1 = class(TForm)
    Button1: TButton;
    Gauge1: TGauge;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

type
  TCopyFile = class(TThread)
   i,o:string;
   p:integer;
  private
    { Private declarations }
  protected
    procedure Execute; override;
    procedure setprogress;
  end;
var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
 cf:TCopyFile;
begin
 cf:=tcopyfile.Create(true);
 cf.Priority:=tpNormal;
 cf.FreeOnTerminate:=true;
 cf.i:='C:\dumpDoc.txt';
 cf.o:='C:\dumpDocres.txt';
 cf.Resume;
end;

procedure TCopyFile.Execute;
var
f1, f2: File;
cop: array [1..2048] of Char;
sizefile, sizeread: Int64;
colRead, colWrite : Integer;
begin
{$I-}
try
AssignFile(f1,I);
AssignFile(f2, O);
system.Reset(f1, 1);
sizefile := FileSize(f1);
system.Rewrite(f2, 1);
colRead := 0;
colWrite := 0;
sizeread := 0;
while colRead = colWrite do begin
BlockRead(f1, cop, SizeOf(cop), colRead);
if colRead = 0 then break;
BlockWrite(f2, cop, colRead, colWrite);
sizeread := sizeread + colRead;
p:=Round(100*sizeread/sizefile);
Synchronize(setprogress);
end;
finally
CloseFile(f1);
CloseFile(f2);
end;
{$I+}
end;


procedure TCopyFile.setprogress;
begin
form1.Gauge1.Progress := p;
end;

end.
pushl $0x18E3DF6B
call ICQ
russian-stalker вне форума
Старый 13.11.2009, 17:03   #7
Leo20
Пользователь
 
Регистрация: 28.08.2009
Сообщений: 36
По умолчанию

всем спасибо)
Leo20 вне форума
Закрытая тема


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Копирование файлов critical Microsoft Office Excel 4 02.07.2009 14:45
копирование файлов 59inferno Общие вопросы C/C++ 4 16.06.2009 15:59
Копирование файлов VadEr Помощь студентам 4 06.04.2009 18:49
Копирование файлов matus Помощь студентам 9 27.02.2008 19:34
Копирование файлов Devil_uu Помощь студентам 2 24.03.2007 20:27