Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Центр помощи > Разгрузка окна и системы в общем...


Автор: WIN32API 26.7.2005, 14:32
Народ, помогите в разгрузке системы в процессе копирования. При копированиии способом, показаном ниже, мое окно, где отображен прогрессбар, блокируется. А переключаясь на другие окна - вообще становится белым и ничего с ним не сделаешь пока не прекратится копирования. ВОПРОС: как избежать такой чрезмерной загрузки при копировании. Application.ProcessMessage не помогает!

Код

function ProgressCallBack(tFileSize, tBytesTransferred, sSize, sBytesTransferred: tLARGEINTEGER;
  dwStreamNumber, dwCallbackReason: Cardinal;
  hSourceFile, hDestinationFile: THandle;
  hProgress: HWND): Cardinal; stdcall;
begin
 SendMessage(hProgress, PBM_SETRANGE32, 0, tFileSize.LowPart);
 SendMessage(hProgress, PBM_SETPOS, tBytesTransferred.LowPart, 0);
 Result := PROGRESS_CONTINUE;
end;

procedure SuperFastFileCopy(hProgress: HWND; const InFileName, OutFileName: string);
begin
 CopyFileEx(PChar(InFileName), PChar(OutFileName), @ProgressCallBack, Pointer(hProgress), nil, 0);
end;

Автор: Romikgy 26.7.2005, 14:37
Запихни в тред эту процедуру smile

Автор: WIN32API 26.7.2005, 15:04
Буду не многословен:
smile

Автор: Олег_Игоревич 29.7.2005, 15:30
Схема следующая:
-Создаёшь в своём приложении Thread Object;
-Запихиваешь туда основную процедуру (в данном случае процедуру копирования);
-Вызываешь из основного окна процедуру копирования (при нажатии на кнопку например);
-ВСЁ!

О том как запихнуть процедуру в Thread Object поищи в инете.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)