I understand how to create a custom wizard page. Just not sure how to add a file picker, and restrict it to a .jpg file type. I have a code section that runs at the end of the installation to take user defined input during setup and modify a settings file, just need to understand how to take the value of a file they choose during a setup screen step, and then copy it, rename it, and dump it into the program files folder.
For the purpose of file selections you should use a separate input file wizard page, which you can create by the CreateInputFilePage
. Then, the Add
method of the TInputFileWizardPage
page object class contains the AFilter
parameter where you can specify the filter for files that can be selected by its associated file open dialog. In this example we allow the users select only *.jpg files:
[Setup]
AppName=My Program
AppVersion=1.5
DefaultDirName={pf}\My Program
[Code]
var
InputPage: TInputFileWizardPage;
procedure InitializeWizard;
begin
// create the input file wizard page
InputPage := CreateInputFilePage(wpWelcome, 'Caption', 'Description',
'SubCaption');
// and insert one item in which the user will be restricted to select
// only *.jpg files
InputPage.Add('Prompt', 'JPG files (*.jpg)|*.jpg', '.jpg');
end;
If that input file wizard page doesn't fit to your design and you want to make your own, then you need the GetOpenFileName
function to show an open file dialog. Even this function contains a parameter where you can specify the filter string. In this case it is the Filter
parameter. In this script example is shown, how to invoke a file open dialog with a *.jpg file filter:
[Setup]
AppName=My Program
AppVersion=1.5
DefaultDirName={pf}\My Program
[Code]
procedure InitializeWizard;
var
FileName: string;
begin
if GetOpenFileName('Prompt', FileName, 'C:\InitialDirectory',
'JPG files (*.jpg)|*.jpg', '.jpg')
then
MsgBox(Format('Selected file: %s', [FileName]), mbInformation, MB_OK);
end;
As you can see in the above code, the filter string consists from the caption part and the filtering portion separated by the |
char. You can also specify multiple filters by separating each filter string, again, by the |
char, or you can specify multiple extensions for a single filter by separating extensions by ;
.
So, e.g. to create a filter named JPG files
filtering only *.jpg files you can write:
JPG files|*.jpg
To make two filters, let's say one for *.jpg files and one for *.jpeg files you can write:
JPG files|*.jpg|JPEG files|*.jpeg
And finally, to make a single filter for *.jpg and *.jpeg files you can write:
JPEG files|*.jpg;*.jpeg
For details I would refer you to the Delphi reference page for the TOpenDialog.Filter
property.
Collected from the Internet
Please contact [email protected] to delete if infringement.
Comments