Модераторы: Snowy, bartram, MetalFan, bems, Poseidon, Riply

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Копирование файлов... ...используя "msctls_progress32" 
:(
    Опции темы
WIN32API
  Дата 17.5.2005, 19:33 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Народ, не отсылай меня в ФАГ, т.к. ответа на мой вопрос там нет. Меня интересует копирование файлов (не одного файла, а нескольких), используя при этом msctls_progress32. И msctls_progress32 при этом должен отображать результат копирования всех файлов сразу, как это делает любая программа установки, а не каждого в отдельности.
  Вверх
WolfON
Дата 17.5.2005, 23:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 604
Регистрация: 19.7.2004

Репутация: нет
Всего: 8



делаешь в дельфе copyfile для каждого файла по очереди и как очередь убывает - добавляешь в прогресс бар.
PM MAIL ICQ   Вверх
RA
Дата 18.5.2005, 01:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Брутальный буратина
****


Профиль
Группа: Участник Клуба
Сообщений: 3497
Регистрация: 31.3.2002
Где: Лес

Репутация: 7
Всего: 115



Код

//Создаём прогресс 
 hwndProgress := CreateWindowEx(0, 'msctls_progress32', nil, WS_CHILD or
        WS_VISIBLE or PBS_SMOOTH, 8, 136, 329, 16, hWnd, 0, hInstance, nil);

       SendMessage(hwndProgress, PBM_SETRANGE, 0, Integer(100 shl 16));
//RANGE
       SendMessage(hwndProgress, PBM_SETSTEP, 1, 0);
//STEP


SendMessage(hwndProgress, PBM_SETPOS, 0, 0);
//Позиция прогресс бара


ЗЫ:
только не надо писать что ответ найден и давать ссылку на библиотеку ленина.


PM   Вверх
WIN32API
  Дата 18.5.2005, 09:02 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











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


smile
  Вверх
Quadr0
Дата 19.5.2005, 00:04 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











...

Это сообщение отредактировал(а) Quadr0 - 14.7.2011, 20:40
  Вверх
WIN32API
  Дата 19.5.2005, 20:03 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Народ, написал я процедурку копирования файлов вместе с подкаталогами и отображения процесса в прогрессбаре, но столкнулся с проблемой подсчета количества файлов (включая подкаталоги). Может, знаете способ? Поделитесь. И еще - можно как-нибудь остановить копирование? Если да то как? Примеры приветствуются!

Код

procedure sCopyDirectory(Origen, Desti : string);
var
 filecount: Integer;
 Files : integer;
 FOrigen, FDesti : string;
 Search : TSearchRec;
begin
 filecount := ОПРЕДЕЛЯЕМ КОЛИЧЕСТВО ФАЙЛОВ И В ПОДКАТАТАЛОГАХ ТАКЖЕ;
 SendMessage(GetDlgItem(hWin, 2), PBM_SETRANGE32, 0, filecount); //Минимальная и максимальная позиция пргресса
 SendMessage(GetDlgItem(hWin, 2), PBM_SETSTEP, 1, 0); //Шаг прогресса
 //Ищем файлы
 Files := FindFirst(Origen + '\*.*', faAnyFile, Search);
  while Files = 0 do begin
   if Search.Attr <> faDirectory then begin
    FOrigen := Origen + '\' + Search.Name;
    FDesti := Desti + '\' + Search.Name;
    //Копируем
    CopyFile(PChar(FOrigen),PChar(FDesti),false);
    //Передвигаем позицию прогресса
    SendMessage(GetDlgItem(hWin, 2), PBM_SETPOS, Progress_GetPos(GetDlgItem(hWin, 2)) + 1, 0);
    //Показываем какой файл копируется в данный момент
    SendMessage(GetDlgItem(hWin, 3), WM_SETTEXT, 0, Integer(PChar('Copyng: ' + Search.name)));
   end else begin
    if (Search.Name <> '.') and (Search.Name <> '..') then begin
     //Создаем каталоги
     if CreateDir(Desti + '\' + Search.Name) then
      sCopyDirectory(Origen+'\'+Search.Name,Desti+'\'+Search.Name);
    end;
   end;
  Files := FindNext(Search);
 end;
  FindClose(Search);
end;

  Вверх
_hunter
Дата 19.5.2005, 20:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

Репутация: 9
Всего: 98



можно. для этого перед началом копирования нужно выполнить обход все каталогов и посчитать сколько файлов в них содержится.

для копирования файлов с возможностью остановки используй CopyFileEx()


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
WIN32API
Дата 20.5.2005, 11:17 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











CopyFileEx() не работает в 98 винде. Меня это не устраивает.
  Вверх
_hunter
Дата 20.5.2005, 13:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

Репутация: 9
Всего: 98



тогда пиши свою функцию


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
WIN32API
Дата 20.5.2005, 13:33 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Ну так а я чем занимаюсь?
  Вверх
_hunter
Дата 20.5.2005, 13:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

Репутация: 9
Всего: 98



а я откуда знаю? ты задал вопрос -- я ответил. если ты имел в виду не то что спросил -- спроси то, что имел в виду...


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
WIN32API
Дата 21.5.2005, 11:56 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Заканчиваем флеймить!
Итак, повторяю вопрос. Вот моя процедурка:

Код

procedure sCopyDirectory(Origen, Desti : string);
var
 filecount: Integer;
 Files : integer;
 FOrigen, FDesti : string;
 Search : TSearchRec;
begin
 filecount := ОПРЕДЕЛЯЕМ КОЛИЧЕСТВО ФАЙЛОВ И В ПОДКАТАТАЛОГАХ ТАКЖЕ;
 SendMessage(GetDlgItem(hWin, 2), PBM_SETRANGE32, 0, filecount); //Минимальная и максимальная позиция пргресса
 SendMessage(GetDlgItem(hWin, 2), PBM_SETSTEP, 1, 0); //Шаг прогресса
 //Ищем файлы
 Files := FindFirst(Origen + '\*.*', faAnyFile, Search);
  while Files = 0 do begin
   if Search.Attr <> faDirectory then begin
    FOrigen := Origen + '\' + Search.Name;
    FDesti := Desti + '\' + Search.Name;
    //Копируем
    CopyFile(PChar(FOrigen),PChar(FDesti),false);
    //Передвигаем позицию прогресса
    SendMessage(GetDlgItem(hWin, 2), PBM_SETPOS, Progress_GetPos(GetDlgItem(hWin, 2)) + 1, 0);
    //Показываем какой файл копируется в данный момент
    SendMessage(GetDlgItem(hWin, 3), WM_SETTEXT, 0, Integer(PChar('Copyng: ' + Search.name)));
   end else begin
    if (Search.Name <> '.') and (Search.Name <> '..') then begin
     //Создаем каталоги
     if CreateDir(Desti + '\' + Search.Name) then
      sCopyDirectory(Origen+'\'+Search.Name,Desti+'\'+Search.Name);
    end;
   end;
  Files := FindNext(Search);
 end;
  FindClose(Search);
end;


Народ, написал я процедурку копирования файлов вместе с подкаталогами и отображения процесса в прогрессбаре, но столкнулся с проблемой подсчета количества файлов (включая подкаталоги). Может, знаете способ? Поделитесь. И еще - можно как-нибудь остановить копирование? Если да то как?

Примеры приветствуются! и даже очень!!! smile

  Вверх
Quadr0
Дата 21.5.2005, 17:21 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











...

Это сообщение отредактировал(а) Quadr0 - 14.7.2011, 20:41
  Вверх
WIN32API
Дата 22.5.2005, 18:08 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Ну, добро - с подсчетом я разберусь... Сейчас серьезно интересует вопрос об остановке копирования. Как это сделать? Вот здесь пожалуйста с примерами, хотя бы косвенными.
  Вверх
Quadr0
Дата 22.5.2005, 23:30 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











...

Это сообщение отредактировал(а) Quadr0 - 14.7.2011, 20:45
  Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: WinAPI и системное программирование"
Snowybartram
MetalFanbems
PoseidonRrader
Riply

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Delphi обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • 99% ответов по WinAPI можно найти в MSDN Library, оставшиеся 1% здесь

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, bartram, MetalFan, bems, Poseidon, Rrader, Riply.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: WinAPI и системное программирование | Следующая тема »


 




[ Время генерации скрипта: 0.0537 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.