diff --git a/lcl/dialogs.pp b/lcl/dialogs.pp index 263d0f7dc5..cbefb0262e 100644 --- a/lcl/dialogs.pp +++ b/lcl/dialogs.pp @@ -335,10 +335,16 @@ Function InputQuery(const ACaption, APrompt : String; var Value : String) : Bool Function InputBox(const ACaption, APrompt, ADefault : String) : String; Function PasswordBox(const ACaption, APrompt : String) : String; +type + TSelectDirOpt = (sdAllowCreate, sdPerformCreate, sdPrompt); + TSelectDirOpts = set of TSelectDirOpt; + function SelectDirectory(const Caption, InitialDirectory: string; var Directory: string): boolean; function SelectDirectory(const Caption, InitialDirectory: string; - var Directory: string; ShowHidden: boolean): boolean; + var Directory: string; ShowHidden: boolean; HelpCtx: Longint = 0): boolean; +function SelectDirectory(var Directory: string; + Options: TSelectDirOpts; HelpCtx: Longint): Boolean; procedure Register; diff --git a/lcl/include/messagedialogs.inc b/lcl/include/messagedialogs.inc index 5f3a0daf4c..3444c94fa3 100644 --- a/lcl/include/messagedialogs.inc +++ b/lcl/include/messagedialogs.inc @@ -225,7 +225,7 @@ begin end; function SelectDirectory(const Caption, InitialDirectory: string; - var Directory: string; ShowHidden: boolean): boolean; + var Directory: string; ShowHidden: boolean; HelpCtx: Longint): boolean; var SelectDirectoryDialog: TSelectDirectoryDialog; begin @@ -235,6 +235,7 @@ begin +[ofForceShowHidden]; SelectDirectoryDialog.InitialDir:=InitialDirectory; SelectDirectoryDialog.Title:=Caption; + SelectDirectoryDialog.HelpContext:=HelpCtx; Result:=SelectDirectoryDialog.Execute; if Result then Directory:=SelectDirectoryDialog.Filename @@ -242,6 +243,24 @@ begin Directory:=''; end; +function SelectDirectory(var Directory: string; + Options: TSelectDirOpts; HelpCtx: Longint): Boolean; +var + SelectDirectoryDialog: TSelectDirectoryDialog; +begin + SelectDirectoryDialog:=TSelectDirectoryDialog.Create(nil); + // TODO: sdAllowCreate, + // TODO: sdPrompt + SelectDirectoryDialog.HelpContext:=HelpCtx; + Result:=SelectDirectoryDialog.Execute; + if Result then begin + Directory:=SelectDirectoryDialog.Filename; + if (sdPerformCreate in Options) and (not DirPathExists(Directory)) then + ForceDirectories(Directory); + end else + Directory:=''; +end; + Function InputQuery(const ACaption, APrompt : String; MaskInput : Boolean; var Value : String) : Boolean; begin