Avatar billede canker Nybegynder
03. november 2000 - 09:35 Der er 4 kommentarer og
1 løsning

Open folder

er der en som kender en \"open folder\" komponent. Delphi har kun opendialog, som er til filer??
Avatar billede borrisholt Novice
03. november 2000 - 09:58 #1
En form to knapper og så det her :

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.DFM}

uses
  shlobj;

function BrowseForComputer(const winhandle : THANDLE; const title : string = \'\'): string; //Show a dialog box and return a string with the selected computer
var
  BrowseInfo: TBrowseInfo;
  IDRoot: PItemIDList;
  Path: array[0..MAX_PATH] of Char;
begin
  // Get the Item ID for Network Neighborhood
  SHGetSpecialFolderLocation(winHandle, CSIDL_NETWORK, IDRoot);
  ZeroMemory(@BrowseInfo, SizeOf(TBrowseInfo));
  ZeroMemory(@path, MAX_PATH);
  BrowseInfo.hwndOwner := winhandle;
  BrowseInfo.pidlRoot := IDRoot;
  BrowseInfo.lpszTitle := PChar(title);
  BrowseInfo.pszDisplayName := @path;
  // Include this flag to show computer only
  BrowseInfo.ulFlags := BIF_BROWSEFORCOMPUTER;// or BIF_RETURNONLYFSDIRS  ;
  // Show the browse dialog, get the Item ID for the selected item and convert it to a path
  SHBrowseForFolder(BrowseInfo);
  result := path;
end;

function BrowseForFolder(hndl: HWND; msg: string=\'\'): string; {hndl iscalling forms handle}
var
  FolderName: string;
  GDir:  string;
  PList:  PItemIDList;
  bi:  TBrowseInfo;
begin
  FillChar(bi, SizeOf(TBrowseInfo), 0);
  FolderName:= StringOfChar(\' \', MAX_PATH);
  GDir:= StringOfChar(\' \', MAX_PATH);

  with bi do
  begin
    hwndOwner:=  hndl;
    pidlRoot:=  nil;
    pszDisplayName:= PChar(FolderName);
    lpszTitle := PChar(msg);
    lpfn:= nil;
    ulFlags:= BIF_DONTGOBELOWDOMAIN or BIF_RETURNONLYFSDIRS or BIF_RETURNFSANCESTORS;
  end;

  PList:= SHBrowseForFolder(bi);    {<-- show the dialog}

  if Plist<>nil then
  begin
    SHGetPathFromIDList(Plist, PChar(GDir));
    setlength(GDir, pos(#0, gdir)-1);
    result:= GDir;
  end
  else
    result:= \'\';
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  Caption := BrowseForFolder(Handle);
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
  Caption := BrowseForComputer(Handle);
end;

end.


Jens B

Avatar billede borrisholt Novice
03. november 2000 - 10:05 #2
Nu er der sikkert en del mennesker der vi argumentere for at detter er en smarter løsning :

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation
uses
  FileCtrl;
{$R *.DFM}

procedure TForm1.Button1Click(Sender: TObject);
var
  dir : String;
begin
  if Selectdirectory(\'\',\'\',Dir) then
    Caption := Dir;
end;

end.


fordi det er en del af Delphi 4 flere følgende. Den har dog den udlæmpe at den altis sidder nederst i højre hjørne ....

Skide iriterende hvis nogen sørger mig ..

Jens B
Avatar billede psv Nybegynder
03. november 2000 - 11:47 #3
BrowseForFolder: Hvad med UNC-stier?
Avatar billede psv Nybegynder
03. november 2000 - 11:54 #4
Prøvede lige med flagene og fjernede:

    ulFlags:=  BIF_RETURNONLYFSDIRS or BIF_RETURNFSANCESTORS; //BIF_DONTGOBELOWDOMAIN or

En helt anden ting er: Kan du få dialogen til at lokalisere en eksisterende sti?

Jeg vil eks. gerne ændre
\\\\Server\\Volume\\DirA\\Dir1
til
\\\\Server\\Volume\\DirA\\Dir2

Det ville være lidt nemmere hvis jeg åbner dialogen med træet udvidet til den første sti... Kan man det?

Avatar billede psv Nybegynder
03. november 2000 - 11:56 #5
Jeg smider selvf. points efter et svar :-)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester