Drive dialog

0

Witam wszystkich.

Używam takiej funkcji do zmiany okna do wyboru katalogu :

function BrowseDialog(const Title: string; const Flag: integer): string;
var
  lpItemID    : PItemIDList;
  BrowseInfo  : TBrowseInfo;
  DisplayName : array[0..MAX_PATH] of Char;
  TempPath    : array[0..MAX_PATH] of Char;
begin
  Result := '';
  FillChar(BrowseInfo, sizeof(TBrowseInfo), #0);
  with BrowseInfo do begin
    hwndOwner      := Application.Handle;
    pszDisplayName := @DisplayName;
    lpszTitle      := PChar(Title);
    ulFlags        := Flag;
  end;
  lpItemID := SHBrowseForFolder(BrowseInfo);
  if lpItemId <> nil then begin
    SHGetPathFromIDList(lpItemID, TempPath);
    Result := IncludeTrailingBackslash(TempPath);
    GlobalFreePtr(lpItemID);
  end;
end;

i wywołanie :

   FFolder := BrowseDialog('Choose a folder....', BIF_BROWSEINCLUDEFILES);

i teraz pytanie.
W jaki sposób w wywołanym oknie dialogowym, uzyskać wybór tylko i wyłącznie dysków zainstalowanych w systemie, tak ja ma to miejsce w przypadku użycia DriveComboBox, którego nie chcę używać.
Wszelkie wskazówki mile widziane :)

0

Zainteresuj się moim artykułem w Gotowcach i zobacz czy taki dialog Tobie odpowiada.
Link do tekstu to: Dialog do wyboru katalogu

0

Teoretycznie powinna pomóc ta funkcja:

 
uses FileCtrl;

var
 s: String;
begin
if SelectDirectory('Wybierz folder', 'C:\', s, [sdNewFolder, sdNewUI, sdValidateDir, sdShowEdit], Self) then ShowMessage(s);
end;

W drugim parametrze można podać folder/dysk, którego zawartość ma być wyświetlona).
Jeśli chcesz użyć tylko samych dysków, trzeba jakoś odwołać się do "Mój komputer".

0

ale dyski zmapowane też są w gałęzi mój komp.

Jeśli pasuje Ci opcja, że pokazywane będą wszystkie dyski ale możliwe do wyboru tylko lokalne to w CallBackMessage (lpfn)

SendMessage(msg.hwnd, BFFM_ENABLEOK, 0, Integer(False))

coś takiego :)

0

THX. :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1