@@ -31,6 +31,7 @@ TfrmExtFileDialog = class(TExtForm)
3131 procedure comboEncodingChange (Sender: TObject);
3232 procedure comboFileTypeChange (Sender: TObject);
3333 procedure comboLineBreaksChange (Sender: TObject);
34+ procedure editFilenameEditingDone (Sender: TObject);
3435 procedure FormCloseQuery (Sender: TObject; var CanClose: Boolean);
3536 procedure FormCreate (Sender: TObject);
3637 procedure FormDestroy (Sender: TObject);
@@ -74,7 +75,6 @@ TfrmExtFileDialog = class(TExtForm)
7475 procedure AddFileType (FileMask, DisplayName: String);
7576 property FileName: String read GetFileName write SetFileName;
7677 property InitialDir: String read FInitialDir write SetInitialDir;
77- class var PreviousDir: String;
7878 property DefaultExt: String read FDefaultExt write FDefaultExt;
7979 property Options: TOpenOptions read FOptions write FOptions;
8080 property Files: TStringList read FFiles;
@@ -83,13 +83,15 @@ TfrmExtFileDialog = class(TExtForm)
8383
8484 // File-open-dialog with encoding selector
8585 TExtFileOpenDialog = class (TfrmExtFileDialog)
86+ procedure FormCreate (Sender: TObject); overload;
8687 procedure FormShow (Sender: TObject); overload;
8788 public
8889 property Encodings: TStringList read FEncodings write FEncodings;
8990 property EncodingIndex: Integer read FEncodingIndex write FEncodingIndex;
9091 end ;
9192
9293 TExtFileSaveDialog = class (TfrmExtFileDialog)
94+ procedure FormCreate (Sender: TObject); overload;
9395 procedure FormShow (Sender: TObject); overload;
9496 public
9597 property LineBreakIndex: TLineBreaks read FLineBreakIndex write FLineBreakIndex;
@@ -131,7 +133,7 @@ procedure TfrmExtFileDialog.FormCreate(Sender: TObject);
131133
132134procedure TfrmExtFileDialog.FormDestroy (Sender: TObject);
133135begin
134- PreviousDir := ShellTreeView.Path;
136+ AppSettings.WriteString(asFileDialogPreviousDir, ShellTreeView.Path) ;
135137 FFilterNames.Free;
136138 FFilterMasks.Free;
137139 FEncodings.Free;
@@ -141,9 +143,10 @@ procedure TfrmExtFileDialog.FormDestroy(Sender: TObject);
141143procedure TfrmExtFileDialog.FormShow (Sender: TObject);
142144var
143145 LineBreakIndexInt: Integer;
146+ PreviousDir: String;
144147begin
145148 ShellListView.MultiSelect := ofAllowMultiSelect in FOptions;
146- // Todo: support ofFileMustExist
149+ PreviousDir := AppSettings.ReadString(asFileDialogPreviousDir);
147150 if not FInitialDir.IsEmpty then
148151 SetInitialDir(FInitialDir)
149152 else if not PreviousDir.IsEmpty then
@@ -251,6 +254,12 @@ procedure TfrmExtFileDialog.comboLineBreaksChange(Sender: TObject);
251254 end ;
252255end ;
253256
257+ procedure TfrmExtFileDialog.editFilenameEditingDone (Sender: TObject);
258+ begin
259+ FFiles.Clear;
260+ FFiles.Add(GetFileName);
261+ end ;
262+
254263procedure TfrmExtFileDialog.FormCloseQuery (Sender: TObject;
255264 var CanClose: Boolean);
256265begin
@@ -265,10 +274,16 @@ procedure TfrmExtFileDialog.FormCloseQuery(Sender: TObject;
265274 Exit;
266275 end ;
267276
268- // Ask user whether to overwrite the selected file
269- if (Self is TExtFileSaveDialog) and ( ofOverwritePrompt in FOptions) and (FileExists(FileName)) then begin
277+ // Only for save dialogs: Ask user whether to overwrite the selected file
278+ if (ofOverwritePrompt in FOptions) and (FileExists(FileName)) then begin
270279 CanClose := MessageDialog(f_(' File already exists: %s' +sLineBreak+sLineBreak+' Overwrite it?' , [FileName]), mtConfirmation, [mbYes, mbNo]) = mrYes;
271280 end ;
281+
282+ // Only for open dialogs: Error if file does not exist
283+ if (ofFileMustExist in FOptions) and (not FileExists(FileName)) then begin
284+ ErrorDialog(f_(' File does not exist: %s' , [FileName]));
285+ CanClose := False;
286+ end ;
272287end ;
273288
274289procedure TfrmExtFileDialog.comboEncodingChange (Sender: TObject);
@@ -337,6 +352,8 @@ procedure TfrmExtFileDialog.SetFileName(const AValue: String);
337352var
338353 fn: String;
339354begin
355+ if AValue.IsEmpty then
356+ Exit;
340357 fn := ExpandFileName(AValue);
341358 SetInitialDir(ExtractFilePath(fn));
342359 editFilename.Text := ExtractFileName(fn);
@@ -349,6 +366,9 @@ procedure TfrmExtFileDialog.SetInitialDir(const AValue: String);
349366 i: Integer;
350367begin
351368 // Try to set path on tree
369+ // Note both .FileName and .InitialDir go here, and .FileName := '' sets the initial dir to the app directory.
370+ if AValue.IsEmpty then
371+ Exit;
352372 FInitialDir := AValue;
353373 CurPath := AValue;
354374 for i:=0 to 10 do begin
@@ -378,6 +398,13 @@ procedure TfrmExtFileDialog.SetFilterIndex(AValue: Integer);
378398
379399{ TExtFileOpenDialog }
380400
401+ procedure TExtFileOpenDialog.FormCreate (Sender: TObject);
402+ begin
403+ inherited ;
404+ Include(FOptions, ofFileMustExist);
405+ Caption := _(' Open existing file' );
406+ end ;
407+
381408procedure TExtFileOpenDialog.FormShow (Sender: TObject);
382409var
383410 EncodingVisible: Boolean;
@@ -392,6 +419,12 @@ procedure TExtFileOpenDialog.FormShow(Sender: TObject);
392419
393420{ TExtFileSaveDialog }
394421
422+ procedure TExtFileSaveDialog.FormCreate (Sender: TObject);
423+ begin
424+ inherited ;
425+ Caption := _(' Save to file' );
426+ end ;
427+
395428procedure TExtFileSaveDialog.FormShow (Sender: TObject);
396429var
397430 LinebreaksVisible: Boolean;
0 commit comments