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

Delphi Sources



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

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 27.03.2007, 14:12
Uzver Uzver вне форума
Прохожий
 
Регистрация: 27.03.2007
Сообщения: 2
Репутация: 10
По умолчанию ???Про диалог открытия файла/папки.

Как вызвать диалог открытия чтоб в нем отображались не только файлы или папки, а и то и другое по типу проводника: слева папки - справа их содержимое. И чтобы можно было выбрать как папку так и файл. и можно ли это сделать без дополнительной формы в проэкте и как? Заранее блогадарен всем кто ответит.
Ответить с цитированием
  #2  
Старый 27.03.2007, 15:54
Аватар для 4kusNick
4kusNick 4kusNick вне форума
Местный
 
Регистрация: 06.09.2006
Адрес: Россия, Санкт-Петербург
Сообщения: 444
Репутация: 550
По умолчанию

Повозись с этим, мож поможет =)
Это стандартный диалог выбора папки с доп параметрами.
Но для того, что хочешь сделать ты, на мой взгляд, удобнее будет использовать новую форму и на ней уже размещать дерево папок и список файлов. Причем лучше все это делать руками (заполнение дерева, списка), дабы потом была возможность легко что-нить переделать..
Но, как говорится, на вкус и цвет... =)
Код:
// функция показа диалога для выбора папки
function AdvBrowseDirectory(sCaption: String; wsRoot: WideString; sDirectory: String; bEditBox: Boolean = False; bShowFiles: Boolean = False; bAllowCreateDirs: 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(sDirectory) then sDirectory := '';
  FillChar(BrowseInfo, SizeOf(BrowseInfo), 0);
  if (ShGetMalloc(ShellMalloc) = S_OK) and (ShellMalloc <> nil) then
  begin
    Buffer := ShellMalloc.Alloc(MAX_PATH);
    try
      RootItemIDList := nil;
      if wsRoot <> '' then
      begin
        SHGetDesktopFolder(IDesktopFolder);
        IDesktopFolder.ParseDisplayName(Application.Handle, nil,
        POleStr(wsRoot), Eaten, RootItemIDList, Flags);
      end;
      OleInitialize(nil);
      with BrowseInfo do
      begin
        hwndOwner := Application.Handle;
        pidlRoot := RootItemIDList;
        pszDisplayName := Buffer;
    lpszTitle := PChar(sCaption);
        // определяет то, как диалог будет появляться:
        ulFlags :=
          BIF_RETURNONLYFSDIRS or
          BIF_USENEWUI or
     BIF_EDITBOX * Ord(bEditBox) or
     BIF_BROWSEINCLUDEFILES * Ord(bShowFiles) or
     BIF_NOCREATEDIRS * Ord(not bAllowCreateDirs);
        lpfn    := @SelectDirCB;
        if sDirectory <> '' then lParam := Integer(PChar(sDirectory));
      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);
        sDirectory := Buffer;
      end;
    finally
      ShellMalloc.Free(Buffer);
    end;
  end;
end;
__________________
THE CRACKER IS OUT THERE

Последний раз редактировалось 4kusNick, 27.03.2007 в 16:02.
Ответить с цитированием
Ответ


Delphi Sources

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

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

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

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


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


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

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

ВКонтакте   Facebook   Twitter