Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Разное
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 19.09.2006, 16:46
Kristofer Kristofer вне форума
Начинающий
 
Регистрация: 10.07.2006
Сообщения: 110
Репутация: 10
По умолчанию DirectoryListBox

Бьюсь,Бьюсь
а ни чего не получается
может поможет кто
а вопрос в следующем
как используя DriveComboBox и DirectoryListBox Указать путь сохраняемому файлу
Ответить с цитированием
  #2  
Старый 19.09.2006, 17:39
Аватар для Decoding
Decoding Decoding вне форума
Местный
 
Регистрация: 03.06.2006
Адрес: Почту найдете на моем сайте
Сообщения: 576
Версия Delphi: D10.2
Репутация: 214
По умолчанию

А с чего ты взял, что DriveComboBox и DirectoryListBox могут дать тебе путь к файлу? DriveComboBox даст диск, а DirectoryListBox даст директорию (это даже из названия понятно). Используй FileListBox и будет тебе счастье...

file.zip
Ответить с цитированием
  #3  
Старый 19.09.2006, 17:51
Kristofer Kristofer вне форума
Начинающий
 
Регистрация: 10.07.2006
Сообщения: 110
Репутация: 10
По умолчанию

ну, в общем задача перед мной такая встала:
необходимо чтоб пользователь выбрал носитель соответственно папку на нем имя файла в Edit (хотя оно автоматом в нем выскакивает при открытии формы) нажал на кнопочку "Сохранить"
и файлик сохранялся соответственно выбраному пути
вот я и думаю
как сие чудо осуществить
А ведь FileListBox укажет мне только названия файлов уже существующих в данной дирректории, ведь так
или я что-то не понял?
Ответить с цитированием
  #4  
Старый 19.09.2006, 17:57
Kristofer Kristofer вне форума
Начинающий
 
Регистрация: 10.07.2006
Сообщения: 110
Репутация: 10
По умолчанию

тем более мне надо чтоб пользователь мог указать любой тип носителя
лог.диск или флэшка, дискета
чтоб переносить между компами не связаными сетью и не подключеными к инету
Ответить с цитированием
  #5  
Старый 19.09.2006, 21:32
Аватар для Decoding
Decoding Decoding вне форума
Местный
 
Регистрация: 03.06.2006
Адрес: Почту найдете на моем сайте
Сообщения: 576
Версия Delphi: D10.2
Репутация: 214
По умолчанию

Код:
Caption := DirectoryListBox1.Directory + '\' + Edit1.Text;

А чам ShellListView не устраивает?

Последний раз редактировалось Decoding, 19.09.2006 в 21:47.
Ответить с цитированием
  #6  
Старый 20.09.2006, 05:24
Аватар для Aristarh Dark
Aristarh Dark Aristarh Dark вне форума
Модератор
 
Регистрация: 07.10.2005
Адрес: Москва
Сообщения: 2,906
Версия Delphi: Delphi XE
Репутация: выкл
По умолчанию

Если я правильно понял проблему то SHBrowseForFolder в данном случае самое то.
Ответить с цитированием
  #7  
Старый 20.09.2006, 13:00
Kristofer Kristofer вне форума
Начинающий
 
Регистрация: 10.07.2006
Сообщения: 110
Репутация: 10
По умолчанию

Aristarh Dark спасибо вам
и про SHBrowseForFolder можно подробнее

Decoding спасибо, попробую ваш вариант
а так же вариации на эту мысль
Ответить с цитированием
  #8  
Старый 20.09.2006, 14:19
Аватар для 4kusNick
4kusNick 4kusNick вне форума
Местный
 
Регистрация: 06.09.2006
Адрес: Россия, Санкт-Петербург
Сообщения: 444
Репутация: 550
Стрелка

Цитата:
Сообщение от Kristofer
Aristarh Dark спасибо вам
и про SHBrowseForFolder можно подробнее

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

А почему бы не воспользоваться стандратным диалогом сохранения файла? (TSaveDialog)

Код:
function AdvSelectDirectory(const Caption: string;
                            const Root: WideString;
                            var Directory: string;
                            EditBox: Boolean = False;
                            ShowFiles: Boolean = False;
                            AllowCreateDirs: Boolean = True): Boolean;

  // callback функция, которая вызывается при инициализации диалога
  // или когда создается новая папка

  function SelectDirCB(Wnd: HWND; uMsg: UINT; lParam, lpData: lParam): Integer; stdcall;
  var
    PathName: array[0..MAX_PATH] of Char;
  begin
    case uMsg of
      BFFM_INITIALIZED: SendMessage(Wnd, BFFM_SETSELECTION, Ord(True), Integer(lpData));
      // включите этот код, если хотите реагировать на выбор новой папки
      {BFFM_SELCHANGED: 
      begin
        SHGetPathFromIDList(PItemIDList(lParam), @PathName); 
        // папки "PathName" была выбрана
      end;}
     end;
     Result := 0;
   end;
var
  WindowList: Pointer;
  BrowseInfo: TBrowseInfo;
  Buffer: PChar;
  RootItemIDList, ItemIDList: PItemIDList;
  ShellMalloc: IMalloc;
  IDesktopFolder: IShellFolder;
  Eaten, Flags: LongWord;

const
  BIF_USENEWUI = $0040;
  BIF_NOCREATEDIRS = $0200;

begin
  Result := False;
  if not DirectoryExists(Directory) then Directory := '';
  FillChar(BrowseInfo, SizeOf(BrowseInfo), 0);
  if (ShGetMalloc(ShellMalloc) = S_OK) and (ShellMalloc <> nil) then
  begin
    Buffer := ShellMalloc.Alloc(MAX_PATH);
    try
      RootItemIDList := nil;
      if Root <> '' then
      begin
        SHGetDesktopFolder(IDesktopFolder);
        IDesktopFolder.ParseDisplayName(Application.Handle, nil,
        POleStr(Root), Eaten, RootItemIDList, Flags);
      end;
      OleInitialize(nil);
      with BrowseInfo do
      begin
        hwndOwner := Application.Handle;
        pidlRoot := RootItemIDList;
        pszDisplayName := Buffer;
        lpszTitle := PChar(Caption);
        // определяет то, как диалог будет появляться:
        ulFlags :=
          BIF_RETURNONLYFSDIRS or
          BIF_USENEWUI or
          BIF_EDITBOX * Ord(EditBox) or
          BIF_BROWSEINCLUDEFILES * Ord(ShowFiles) or
          BIF_NOCREATEDIRS * Ord(not AllowCreateDirs);
        lpfn    := @SelectDirCB;
        if Directory <> '' then lParam := Integer(PChar(Directory));
      end;
      WindowList := DisableTaskWindows(0);
      try
        ItemIDList := ShBrowseForFolder(BrowseInfo);
      finally
        EnableTaskWindows(WindowList);
      end;
      Result := ItemIDList <> nil;
      if Result then
      begin
        ShGetPathFromIDList(ItemIDList, Buffer);
        ShellMalloc.Free(ItemIDList);
        Directory := Buffer;
      end;
    finally
      ShellMalloc.Free(Buffer);
    end;
  end;
end;
__________________
THE CRACKER IS OUT THERE
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 09:43.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter