SmartPascal
TSaveDialog
Type
Displays a dialog for selecting a save file name Dialogs unit
  type TSaveDialog;
Description
The TSaveDialog is a visual component. It is used to allow a user to select the name of a file to save to.
 
It can be defined by dragging the save dialog icon from the Dialogs tab in Delphi, or by defining a TSaveDialog variable.
 
The TSaveDialog can be configured to suit your needs. When using it, you would proceed along the following steps:
 
Creating the dialog object
 
You define a TSaveDialog variable, and then assign a new TSaveDialog object to it:
 
var
  saveDialog : TSaveDialog;
begin
  saveDialog := TSaveDialog.Create(self);

 
Note that the dialog must have an anchor - here we provide the current object - self - as the anchor.
 
Setting options
 
Before displaying the dialog, you are likely to configure it to your needs by setting the dialog properties. Here are the main properties:
 
Title property
Gives the caption to the dialog.
 
FileName property
Gives a default file name to save. (Otherwise, the file name field is blank).
 
DefaultExt property
Defines the extension that will be added to the user file name, if manually typed (rather than selected from the file list). If their are two or more save filter extension types, then this value is ignored. However, it must be provided in order for the drop down list extension values to be used. Strange!
 
Filter property
This allows only certain file types to be displayed and selectable. The filter text is displayed in a drop down below the file name field. The following example selects for text files only:
 
saveDialog.Filter := 'Text files only|*.txt';
 
The drop down dialog shows the description before the | separator. After the separator, you define a mask that selects the files you want.
 
saveDialog.Filter := 'Text files|*.txt|Word files|*.doc';
 
Above we have allowed text and Word files as two options in the drop down list.
 
FilterIndex property
Defines which (starting at 1) of the drop down filter choices will be displayed first.
 
InitialDir property
Sets the starting directory in the dialog.
 
Displaying the dialog
 
We now call a method of TSaveDialog:
 
if saveDialog.Execute
then ...

 
Execute returns true if the user selected a file and hit OK. You can then save to the selected file:
 
Finishing with the dialog
 
The selected file obtained using the following property:
 
FileName property
This holds the full path plus file name of the selected file. Finally, we must free the dialog object:
 
saveDialog.free;
Notes
It is your responsibility to detect whether the user has selected an existing file - you will want to ask the user if the file should be overriden.
Related commands
Append Open a text file to allow appending of text to the end
AssignFile Assigns a file handle to a binary or text file
PromptForFileName Shows a dialog allowing the user to select a file
Reset Open a text file for reading, or binary file for read/write
TOpenDialog Displays a file selection dialog
 
Example code :
var
  saveDialog : TSaveDialog;    // Save dialog variable
begin
  // Create the save dialog object - assign to our save dialog variable
  saveDialog := TSaveDialog.Create(self);

  // Give the dialog a title
  saveDialog.Title := 'Save your text or word file';

  // Set up the starting directory to be the current one
  saveDialog.InitialDir := GetCurrentDir;

  // Allow only .txt and .doc file types to be saved
  saveDialog.Filter := 'Text file|*.txt|Word file|*.doc';

  // Set the default extension
  saveDialog.DefaultExt := 'txt';

  // Select text files as the starting filter type
  saveDialog.FilterIndex := 1;

  // Display the open file dialog
  if saveDialog.Execute
  then ShowMessage('File : '+saveDialog.FileName)
  else ShowMessage('Save file was cancelled');

  // Free up the dialog
  saveDialog.Free;
end;
Show full unit code
   An save file dialog is displayed with two drop down filter choices:
  
     Delphi project files
     Delphi pascal files    - this is displayed at the start
  
   The dialog is positioned to the current directory (which will be
   the Delphi project directory if running the code from within
   Delphi).
  
   If you select a file, such as 'Unit1.pas' then it is displayed
   in the ShowMessage dialog like this:
  
     File : C:Program FilesBorlandDelphi7ProjectsUnit1.pas