Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Delphi - Не могу разобратся с savedialog

Ответить
Настройки темы
Delphi - Не могу разобратся с savedialog

Новый участник


Сообщения: 7
Благодарности: 0

Профиль | Отправить PM | Цитировать


В программе необходимо сделать возможность копирования файлов по средством savedialog.
Вот код:
If savedialog.Execute then CopyFile (
Pansichar(ExtractFilePath
(Application.ExeName)+'\pas.db'),
Pansichar(SaveDialog1.FileName),
false);
Проблема такая. Несмотря на то, что выделяю несколько файлов копируется всегда только один. Как нужно изменить код, чтобы можно было копировать несколько файлов, желательно любых расширений?
За ранее спасибо.

Отправлено: 09:48, 10-03-2008

 

Аватара для detrin

Ветеран


Сообщения: 540
Благодарности: 42

Профиль | Отправить PM | Цитировать


Я бы решал задачу по-другому.
Через Opendialog получаем список копируемых файлов.
Далее с помощью SHBrowseForFolder получаем папку куда будем их копировать. Вот пример:
Код: Выделить весь код
uses ShellAPI, ShlObj;

procedure TForm1.Button1Click(Sender: TObject);
var
  TitleName: string;
  lpItemID: PItemIDList;
  BrowseInfo: TBrowseInfo;
  DisplayName: array[0..MAX_PATH] of char;
  TempPath: array[0..MAX_PATH] of char;
begin
  FillChar(BrowseInfo, sizeof(TBrowseInfo), #0);
  BrowseInfo.hwndOwner := Form1.Handle;
  BrowseInfo.pszDisplayName := @DisplayName;
  TitleName := 'Please specify a directory';
  BrowseInfo.lpszTitle := PChar(TitleName);
  BrowseInfo.ulFlags := BIF_RETURNONLYFSDIRS;
  lpItemID := SHBrowseForFolder(BrowseInfo);
  if lpItemId <> nil then
  begin
    SHGetPathFromIDList(lpItemID, TempPath);
    ShowMessage(TempPath);
    GlobalFreePtr(lpItemID);
  end;
end;
Ну а далее, как уже писал выше zip000, делаем копирование файлов:
Код: Выделить весь код
var
  i : Integer;
......................................
  if OpenDialog1.Execute then
    for i := 0 to OpenDialog1.Files.Count - 1 do begin
      CopyFile (Pansichar(OpenDialog1.Files[i]), ПУТЬ_КУДА_КОПИРУЕМ+ИМЯ_ФАЙЛА, false);
    end;

-------
Лучше ничего не делать, чем делать ничего.

Это сообщение посчитали полезным следующие участники:

Отправлено: 23:45, 15-03-2008 | #11



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Аватара для DillerInc

Обратный инженер


Сообщения: 644
Благодарности: 47

Профиль | Отправить PM | Цитировать


Ну,хоть кто-то предложил трезвое решение
detrin, спасибо за SHBrowseForFolder.

-------
То,что неясно,следует выяснить.То,что трудно творить,следует делать с великой настойчивостью. © Конфуций


Отправлено: 09:49, 16-03-2008 | #12


Новый участник


Сообщения: 7
Благодарности: 0

Профиль | Отправить PM | Цитировать


Detrin еще просьба еси можно.
"Ну а далее, как уже писал выше *zip000*, делаем копирование файлов:

Code:
---------
var
i : Integer;
.......................................
if OpenDialog1.Execute then
for i := 0 to OpenDialog1.Files.Count - 1 do begin
CopyFile (Pansichar(OpenDialog1.Files[i]), ПУТЬ_КУДА_КОПИРУЕМ+ИМЯ_ФАЙЛА, false);
end;"

В каком формате записывается "ПУТЬ_КУДА_КОПИРУЕМ+ИМЯ_ФАЙЛА" Есле писать (Pansichar(OpenDialog1.Files[i]), 'c:\'+'рas.db', false); то -ошбика.

Отправлено: 13:13, 17-03-2008 | #13


Аватара для detrin

Ветеран


Сообщения: 540
Благодарности: 42

Профиль | Отправить PM | Цитировать


Njey
Что за ошибка? У меня всё работает.

-------
Лучше ничего не делать, чем делать ничего.


Отправлено: 20:33, 17-03-2008 | #14


Новый участник


Сообщения: 7
Благодарности: 0

Профиль | Отправить PM | Цитировать


Detrin, ошибка оказалась другого плана. С ней все кончено. Не понятно другое. В опен-диалог я прописывая имя исходного файл. И путь. В данном случае диск 'с'. При открыти на диск 'с'
копируется выбранный файл с именем прописал в диалоге.(в(Pansichar (OpenDialog1 .Files[i]),
'c:\'+'рas.db', false); В данном случае
раs.db. И изменить его на правильное могу только с помощью переименования. И соответственно SHBrowseForFolder
не видет списка файлов. Я так понял, что диалогом должен был откры вать список копируемых файлов, а SHBrowseForFolder
указывает папку куда копирывать. Но ни чего такого нет. Может еще что прописать надо?

Отправлено: 16:13, 18-03-2008 | #15


Аватара для detrin

Ветеран


Сообщения: 540
Благодарности: 42

Профиль | Отправить PM | Цитировать


Несовсем понял в чём вы не разобрались. Попробую ещё раз объяснить.
Цитата detrin:
CopyFile (Pansichar(OpenDialog1.Files[i]), ПУТЬ_КУДА_КОПИРУЕМ+ИМЯ_ФАЙЛА, false); »
С помощью SHBrowseForFolder мы получаем "ПУТЬ_КУДА_КОПИРУЕМ". Путь хранится в переменной TempPath. Остаётся только указать имена файлов. В общем случае имена файлов заранее неизвестны, но известны полный путь + имя файла. Они хранятся в OpenDialog1.Files[i]. Ну а далее просто обрезаем путь.

-------
Лучше ничего не делать, чем делать ничего.


Отправлено: 21:14, 18-03-2008 | #16



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Delphi - Не могу разобратся с savedialog

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Принтер - не могу разобратся с подачей бумаги на canon mp630 ZGG Прочее железо 6 12-11-2009 11:10
PowerShell - [решено] Не могу разобратся с Convertto-html glazemir Скриптовые языки администрирования Windows 3 26-06-2009 08:26
Помагите разобратся!!!!! MIXAA Ноутбуки 3 13-04-2008 14:23
Delphi - Delphi, savedialog.options Roman Go Программирование и базы данных 5 23-07-2004 23:56




 
Переход