|
#1
|
|||
|
|||
DirectoryListBox
Бьюсь,Бьюсь
а ни чего не получается может поможет кто а вопрос в следующем как используя DriveComboBox и DirectoryListBox Указать путь сохраняемому файлу |
#2
|
||||
|
||||
А с чего ты взял, что DriveComboBox и DirectoryListBox могут дать тебе путь к файлу? DriveComboBox даст диск, а DirectoryListBox даст директорию (это даже из названия понятно). Используй FileListBox и будет тебе счастье...
file.zip |
#3
|
|||
|
|||
ну, в общем задача перед мной такая встала:
необходимо чтоб пользователь выбрал носитель соответственно папку на нем имя файла в Edit (хотя оно автоматом в нем выскакивает при открытии формы) нажал на кнопочку "Сохранить" и файлик сохранялся соответственно выбраному пути вот я и думаю как сие чудо осуществить А ведь FileListBox укажет мне только названия файлов уже существующих в данной дирректории, ведь так или я что-то не понял? |
#4
|
|||
|
|||
тем более мне надо чтоб пользователь мог указать любой тип носителя
лог.диск или флэшка, дискета чтоб переносить между компами не связаными сетью и не подключеными к инету |
#5
|
||||
|
||||
Код:
Caption := DirectoryListBox1.Directory + '\' + Edit1.Text; А чам ShellListView не устраивает? Последний раз редактировалось Decoding, 19.09.2006 в 21:47. |
#6
|
||||
|
||||
Если я правильно понял проблему то SHBrowseForFolder в данном случае самое то.
|
#7
|
|||
|
|||
Aristarh Dark спасибо вам
и про SHBrowseForFolder можно подробнее Decoding спасибо, попробую ваш вариант а так же вариации на эту мысль |
#8
|
||||
|
||||
Цитата:
Эта функция вызовет стандартный диалог выбора папки, там можно отображать и файлы. А почему бы не воспользоваться стандратным диалогом сохранения файла? (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 |