Rev 9 | Blame | Compare with Previous | Last modification | View Log | Download
; -- im_bas.iss --; Copyright (C) 2004 RLD Automation; FL7.5.0, Windows 2000 + XP#pragma option -v+#pragma verboselevel 9#define Debug#define Company "RLD Automation";FactoryLink version#define FlVer "Fl8x"#define FlDefault "Fl80";FactoryLink and/or OS version and SP required#define SysVer "FactoryLink Fl8.x";Application definitions#define AppName "FactoryLink IM-BAS Protocol Driver"#define AppId "IM_BAS"#define AppShort "Im_bas"#define BaseDir "..\..\..\Flink"#define FlAppVersion GetFileVersion(BaseDir+"\Bin\"+FlDefault+"\"+AppShort+".exe");Entry for ctlist file#define CtList "im_basm im_basp im_basd";Key files to add#define Key1 "imbasmsg"#define Key2 "imbasdat"#define Key3 "imbastim"#define Key4 "al_tsfmt";Message files to add#define Msg1 "imbas_ac"#define Msg2 ""#define Msg3 "al_fmt"[Setup]AppName={#AppName}AppVerName={#AppName} {#FlAppVersion}, for {#SysVer}AppCopyright=Copyright © 2003 {#Company}.AppPublisher={#Company}AppPublisherURL=http://www.tecnomatix.comAppSupportURL=http://support.tecnomatix.comAppUpdatesURL=http://support.tecnomatix.comAppVersion=1.0 ;{#FlAppVersion}OutputBaseFilename={#AppShort}Install{#FlVer}OutputDir=..\..\Setup\{#FlVer}WizardImageFile=..\Tecnomatix.bmpWizardSmallImageFile=..\SetupModernSmall25.bmpUninstallable=trueUninstallDisplayIcon={app}\{#AppShort}.exeUninstallDisplayName={#AppName}UninstallFilesDir={sys}\uninstallLicenseFile=.\license.txtInfoBeforeFile=.\infobefore.txtPrivilegesRequired=adminRestartIfNeededByRun=trueDisableStartupPrompt=trueDisableProgramGroupPage=trueDiskSpanning=falseDefaultDirName={code:GetPrgDir|{pf}\{#AppShort}};DefaultGroupName={#Company}DirExistsWarning=noMinVersion=4,4UsePreviousAppDir=trueWizardStyle=modern;UninstallStyle=modernWindowVisible=falseBackColor=clSilverBackColor2=clBlackBackColorDirection=toptobottom;WizardDebug=noWizardImageBackColor=clWhiteSetupIconFile=..\Im_bas.icoWizardImageStretch=falseShowLanguageDialog=yesAppID={{BAE0FD8A-0180-4D85-962A-1FD296500037}[Types]Name: full; Description: Full installation;Name: "compact"; Description: "Compact installation"Name: custom; Description: Custom installation; Flags: iscustom[Components]Name: main; Description: {#AppName}; Types: full custom; Flags: fixedName: manual; Description: {#AppShort} Task Manual; Types: fullName: alarm; Description: Alarm Logger Extensions; Types: fullName: debug; Description: {#AppShort} Task Debug Support-files; Types: fullName: tmsim; Description: TM simulation program; Types: full[Tasks]Name: desktopicon; Description: Desktop icon for TM-sim program; Components: tmsimName: quicklaunchicon; Description: Quick launch icon for TM-sim program; Components: tmsim[Files];FactoryLink filesSource: {#BaseDir}\Ac\{#AppShort}.ac; DestDir: {app}\ac; Components: main;Source: {#BaseDir}\Bin\Fl70\{#AppShort}.exe; DestDir: {app}\bin; Flags: ignoreversion; Components: main; Check: CheckFlVersion('FL70');Source: {#BaseDir}\Bin\Fl70\{#AppShort}.map; DestDir: {app}\bin; Flags: ignoreversion; Components: debug; Check: CheckFlVersion('FL70');Source: {#BaseDir}\Bin\Fl71\{#AppShort}.exe; DestDir: {app}\bin; Flags: ignoreversion; Components: main; Check: CheckFlVersion('FL71');Source: {#BaseDir}\Bin\Fl71\{#AppShort}.map; DestDir: {app}\bin; Flags: ignoreversion; Components: debug; Check: CheckFlVersion('FL71');Source: {#BaseDir}\Bin\Fl72\{#AppShort}.exe; DestDir: {app}\bin; Flags: ignoreversion; Components: main; Check: CheckFlVersion('FL72');Source: {#BaseDir}\Bin\Fl72\{#AppShort}.map; DestDir: {app}\bin; Flags: ignoreversion; Components: debug; Check: CheckFlVersion('FL72')Source: {#BaseDir}\Bin\Fl75\{#AppShort}.exe; DestDir: {app}\bin; Flags: ignoreversion; Components: main; Check: CheckFlVersion('FL75')Source: {#BaseDir}\Bin\Fl75\{#AppShort}.map; DestDir: {app}\bin; Flags: ignoreversion; Components: debug; Check: CheckFlVersion('FL75')Source: {#BaseDir}\Bin\Fl80\{#AppShort}.exe; DestDir: {app}\bin; Flags: ignoreversion; Components: main; Check: CheckFlVersion('FL80')Source: {#BaseDir}\Bin\Fl80\{#AppShort}.map; DestDir: {app}\bin; Flags: ignoreversion; Components: debug; Check: CheckFlVersion('FL80')Source: {#BaseDir}\Bin\TM-sim.exe; DestDir: {app}\bin; Flags: ignoreversion; Components: tmsimSource: {#BaseDir}\Bin\TM-sim.ini; DestDir: {app}\bin; Flags: confirmoverwrite; Components: tmsimSource: {#BaseDir}\Bin\{#AppShort}.ini; DestDir: {app}\bin; Flags: confirmoverwrite; Components: mainSource: {#BaseDir}\Bin\FlMsgRLD.dll; DestDir: {sys}; Flags: ignoreversion; Components: mainSource: {#BaseDir}\Bin\BlackBox.dll; DestDir: {sys}; Flags: ignoreversion; Components: debugSource: {#BaseDir}\Bin\RLDTitle.exe; DestDir: {app}\bin; Flags: uninsneveruninstall; Components: mainSource: {#BaseDir}\Ctgen\{#AppShort}.ctg; DestDir: {app}\ctgen; Components: mainSource: {#BaseDir}\Ctgen\{#AppShort}.rtm; DestDir: {app}\ctgen; Components: mainSource: {#BaseDir}\Help\en\{#AppShort}.hlp; DestDir: {app}\help\de; Components: mainSource: {#BaseDir}\Help\en\{#AppShort}.hlp; DestDir: {app}\help\en; Components: mainSource: {#BaseDir}\Help\en\{#AppShort}.hlp; DestDir: {app}\help\fr; Components: main#if (len(Key1) > 0)Source: {#BaseDir}\Key\En\{#Key1}.key; DestDir: {app}\key\de; Components: mainSource: {#BaseDir}\Key\En\{#Key1}.key; DestDir: {app}\key\en; Components: mainSource: {#BaseDir}\Key\En\{#Key1}.key; DestDir: {app}\key\fr; Components: main#endif#if (len(Key2) > 0)Source: {#BaseDir}\Key\En\{#Key2}.key; DestDir: {app}\key\de; Components: mainSource: {#BaseDir}\Key\En\{#Key2}.key; DestDir: {app}\key\en; Components: mainSource: {#BaseDir}\Key\En\{#Key2}.key; DestDir: {app}\key\fr; Components: main#endif#if (len(Key3) > 0)Source: {#BaseDir}\Key\En\{#Key3}.key; DestDir: {app}\key\de; Components: mainSource: {#BaseDir}\Key\En\{#Key3}.key; DestDir: {app}\key\en; Components: mainSource: {#BaseDir}\Key\En\{#Key3}.key; DestDir: {app}\key\fr; Components: main#endif#if (len(Key4) > 0)Source: {#BaseDir}\Key\En\{#Key4}.key; DestDir: {app}\key\de; Components: alarmSource: {#BaseDir}\Key\En\{#Key4}.key; DestDir: {app}\key\en; Components: alarmSource: {#BaseDir}\Key\En\{#Key4}.key; DestDir: {app}\key\fr; Components: alarm#endif;Source: {#BaseDir}\Mps\{code:GetFlVersion}\{#AppShort}.mps; DestDir: {app}\mps\{#AppShort}.mps; Components: mainSource: {#BaseDir}\Msg\En\{#AppShort}.txt; DestDir: {app}\msg\de; Components: mainSource: {#BaseDir}\Msg\En\{#AppShort}.txt; DestDir: {app}\msg\en; Components: mainSource: {#BaseDir}\Msg\En\{#AppShort}.txt; DestDir: {app}\msg\fr; Components: main#if (len(Msg1) > 0)Source: {#BaseDir}\Msg\En\{#Msg1}.txt; DestDir: {app}\msg\de; Components: mainSource: {#BaseDir}\Msg\En\{#Msg1}.txt; DestDir: {app}\msg\en; Components: mainSource: {#BaseDir}\Msg\En\{#Msg1}.txt; DestDir: {app}\msg\fr; Components: main#endif#if (len(Msg2) > 0)Source: {#BaseDir}\Msg\En\{#Msg2}.txt; DestDir: {app}\msg\de; Components: mainSource: {#BaseDir}\Msg\En\{#Msg2}.txt; DestDir: {app}\msg\en; Components: mainSource: {#BaseDir}\Msg\En\{#Msg2}.txt; DestDir: {app}\msg\fr; Components: main#endif#if (len(Msg3) > 0)Source: {#BaseDir}\Msg\En\Fl75\{#Msg3}.txt; DestDir: {app}\msg\de; Components: alarm; Check: CheckFlVersion('Fl75')Source: {#BaseDir}\Msg\En\Fl75\{#Msg3}.txt; DestDir: {app}\msg\en; Components: alarm; Check: CheckFlVersion('Fl75')Source: {#BaseDir}\Msg\En\Fl75\{#Msg3}.txt; DestDir: {app}\msg\fr; Components: alarm; Check: CheckFlVersion('Fl75')Source: {#BaseDir}\Msg\En\Fl80\{#Msg3}.txt; DestDir: {app}\msg\de; Components: alarm; Check: CheckFlVersion('FL80')Source: {#BaseDir}\Msg\En\Fl80\{#Msg3}.txt; DestDir: {app}\msg\en; Components: alarm; Check: CheckFlVersion('FL80')Source: {#BaseDir}\Msg\En\Fl80\{#Msg3}.txt; DestDir: {app}\msg\fr; Components: alarm; Check: CheckFlVersion('FL80')#endif;Debug viewerSource: {#BaseDir}\bin\dbgview*; DestDir: {app}\bin; Flags: ignoreversion; Components: debug;DocumentationSource: {src}\{#AppShort}.pdf; DestDir: {app}\..\Documentation\English; Flags: external skipifsourcedoesntexist; Components: manual;Source: ..\im_bas.exe; DestDir: {app}\bin; DestName: ReadMeIm_bas.exe; Flags: isreadme; Components: main;ProtectionSource: {#BaseDir}\bin\inst_seq.exe; DestDir: {app}; Flags: deleteafterinstall; Components: mainSource: {#BaseDir}\opt\rld.opt; DestDir: {app}\opt; Flags: onlyifdoesntexist; Components: mainSource: {src}\rld.opt; DestDir: {app}; Flags: deleteafterinstall external skipifsourcedoesntexist; Components: main;Honeywell IPC620 systems;Source: {#BaseDir}\plc\ipc620\*; DestDir: {app}\plc\ipc620; Components: main;SIEMENS S5 PLC's;Source: {#BaseDir}\plc\s5\*; DestDir: {app}\plc\s5; Components: main;SIEMENS S7 S300 and S400 range;Source: {#BaseDir}\plc\s7\SinecH1.zip; DestDir: {app}\plc\s7; Components: main;Readme file;Source: ..\Im_bas.txt; DestDir: "{app}"; Flags: isreadme; Components: main[Registry]Root: HKLM; Subkey: SOFTWARE\Tecnomatix\FactoryLink\Configuration Explorer\Menus\Node Classes\NC_TASKGROUP; ValueType: String; ValueName: ; ValueData: NC_TASKGROUP; Flags: noerror createvalueifdoesntexist; Components: mainRoot: HKLM; Subkey: SOFTWARE\Tecnomatix\FactoryLink\Configuration Explorer\Menus\Node Classes\NC_TASKGROUP; ValueType: String; ValueName: Opened Icon; ValueData: folderclosed; Flags: createvalueifdoesntexist; Components: mainRoot: HKLM; Subkey: SOFTWARE\Tecnomatix\FactoryLink\Configuration Explorer\Menus\Node Classes\NC_TASKGROUP; ValueType: String; ValueName: Closed Icon; ValueData: folderopened; Flags: createvalueifdoesntexist; Components: mainRoot: HKLM; Subkey: SOFTWARE\Tecnomatix\FactoryLink\Configuration Explorer\Menus\Node Classes\NC_TASKGROUP; ValueType: String; ValueName: Description; ValueData: Task Group; Flags: createvalueifdoesntexist; Components: mainRoot: HKLM; Subkey: SOFTWARE\Tecnomatix\FactoryLink\Configuration Explorer\Menus\Node Classes\NC_TASKGROUP; ValueType: String; ValueName: TG_CAPTION Device Interfaces; ValueData: Device Interfaces; Flags: createvalueifdoesntexist; Components: mainRoot: HKLM; Subkey: SOFTWARE\Tecnomatix\FactoryLink\Configuration Explorer\Menus\Node Classes\NC_TASKGROUP; ValueType: String; ValueName: Task Group Device Interfaces; ValueData: {code:GetDriverString}; Components: main[Icons]Name: {commondesktop}\TM Simulator; Filename: {app}\bin\/TM-sim.exe; Components: tmsim; Tasks: desktopiconName: {userappdata}\Microsoft\Internet Explorer\Quick Launch\TM Simulator; Filename: {app}\bin\/TM-sim.exe; Components: tmsim; Tasks: quicklaunchicon[Run]Filename: {app}\bin\acctmgr.exe; Parameters: -c -d -v; Check: AddTitle('{#AppShort},{#CtList}'); Flags: runhidden; StatusMsg: Updating FactoryLink account manager index...; Components: mainFilename: {app}\inst_seq.exe; Parameters: -M{#AppId} -S{app}\rld.opt; Flags: runhidden; StatusMsg: Updating RLD protection...; Components: mainFilename: {app}\bin\mkhelp.exe; Flags: runhidden; StatusMsg: Updating FactoryLik help file index...; Components: main[UninstallRun]Filename: {app}\bin\RLDTitle.exe; Parameters: " /REMOVE={#AppId}"; Flags: runhidden; StatusMsg: Updating FactoryLink account manager index...; Components: mainFilename: {app}\bin\acctmgr.exe; Parameters: -c -d -v; Check: RemoveTitle('{#AppShort}'); Flags: runhidden; StatusMsg: Updating FactoryLink account manager index...; Components: main[InstallDelete][Messages]RunEntryShellExec=Yes, I would like to view the README fileBeveledLabel={#Company}#ifdef Debug#expr SaveToFile(AddBackslash(SourcePath) + "Preprocessed.iss")#endif[Code]varDriverList: String;TaskName: String;UsagePage: TInputOptionWizardPage;WinVerPage: TOutputMsgWizardPage;FlVersion: String;function InitializeSetup(): Boolean;beginTaskName := '{#AppShort}';RegQueryStringValue(HKLM, 'SOFTWARE\Tecnomatix\FactoryLink\Configuration Explorer\Menus\Node Classes\NC_TASKGROUP', 'Task Group Drivers', DriverList);if (DriverList = '') then beginRegQueryStringValue(HKLM, 'SOFTWARE\USDATA\FactoryLink\Configuration Explorer\Menus\Node Classes\NC_TASKGROUP', 'Task Group Device Interfaces', DriverList);if (DriverList = '') then beginDriverList := 'opcexp,opcclnt,ioxlator,edi_dev,te__,mb_plus,mbus,modp,mbustcp,sqrd,ab__,ab__rapd,netdtl,ktdtl,gene,asyn,omrn,sdrv,siem,h1mp,ti__,omux,ov60,mist,ldnr,t405,reli,gem_,dan2,eibi,apac2,bn90,dmod,es__,moor,rocm,tmdm,rmdm,hdp_rocm,bris,profibus,sinec_h1,s_3964r,stple,stplcnfg,Flgmmsg,Flgmport,Flgmproc,Flgmrprt,te__load,te__drq,eths,jbus,ucini,ucdef,ucref,ksv24ini,ksv24def,ksv24ref,comwiz,Mecomdef,Mecomrd,Mecomwr,odx,eci00,eci01,eci02,eco,S7D';end;end;if (Pos(TaskName, DriverList) = 0) then beginDriverList := DriverList + ',' + TaskName;end;Result := True;end;function GetDriverString(DefaultInput: String): String;begin{ Return the driver list }Result := DriverList;end;function CheckFlVersion(DefaultInput: String): Boolean;begin{ Return the Fl version }Result := false;if (DefaultInput = FlVersion) then beginResult := true;end;end;function CheckFl70(): Boolean;begin{ Return the Fl version }Result := false;if (FlVersion = 'FL70') then beginResult := true;end;end;function CheckNotFl70(): Boolean;begin{ Return the Fl version }Result := true;if (FlVersion = 'FL70') then beginResult := false;end;end;{Read the FactoryLink directory from the autostart service program location,using the environment variable FLINK will result in a directory withshort names. By using the autostart server the long names are found, andthe setup progam will use these names instead of the notation in short}function GetPrgDir(S: String): String;varMyDir: String;begin{read the autostart service directory, filename and extension}RegQueryStringValue( HKEY_LOCAL_MACHINE, 'System\CurrentControlSet\Control\Session Manager\Environment', 'FLINK', MyDir);{return default in case no directory is found}if (Length( MyDir) <= 0) then beginMyDir := S;end;{return the directory to install the program}Result := MyDir;end;{Add a AC line for the current task to the titles file, add a lineto the CTlist file. The taskname and ct-line are specified in thefunction-parameter: taskname,ct-line}function AddTitle( MyEntry: String): Boolean;varMyText: TArrayOfString;MyFile: String;MyAC: String;MyCT: String;k: Integer;bText: Boolean;found: Integer;begin{first file to load is th etitles file in the AC directory}MyFile := GetPrgDir( '') + '\ac\titles';bText := LoadStringsFromFile( MyFile, MyText);{AC entry looks like: taskname.ac}k := Pos( ',', MyEntry);if k = 0 then k := Pos( ':', MyEntry);MyAC := Copy( MyEntry, 0, k-1) + '.ac';MyCT := MyEntry;StrSet( ':', k, MyCt);{search for ac entry}found := 0;k := 0;while (k < GetArrayLength(MyText)) and (found = 0) do beginfound := Pos( MyAC, MyText[ k]);k := k + 1;end;{if the entry is not found, add a line to the titles file}if (found = 0) then beginSetArrayLength(MyText, GetArrayLength(MyText)+1);MyText[ GetArrayLength(MyText)-1] := MyAC;SaveStringsToFile( MyFile, MyText, false);end;{add entry to ctlist file}MyFile := GetPrgDir( '') + '\ctgen\ctlist';bText := LoadStringsFromFile( MyFile, MyText);{search for ctgen entry}found := 0;k := 0;while (k < GetArrayLength(MyText)) and (found = 0) do beginfound := Pos( MyCT, MyText[ k]);k := k + 1;end;{if the entry is not found, add a line to the ctlist file}if (found = 0) then beginSetArrayLength(MyText, GetArrayLength(MyText)+1);MyText[ GetArrayLength(MyText)-1] := MyCT;SaveStringsToFile( MyFile, MyText, false);end;{return always true, ac file must be installed, this functiononly adds a line to the titles file}Result := True;end;{Remove a AC line for the current task in the titles file, and removea line in the CTlist file the entry is specified with the task namein the function-parameter}function RemoveTitle( MyEntry: String): Boolean;varMyText: TArrayOfString;MyFile: String;MyAC: String;MyCT: String;Temp: String;k: Integer;found: Integer;bText: Boolean;beginMyAC := MyEntry + '.ac';MyCT := MyEntry + ':';{search the task name in the ctlist file}MyFile := GetPrgDir( '') + '\ctgen\ctlist';SetArrayLength( MyText, 0);bText := LoadStringsFromFile( MyFile, MyText);{search for the task name}for k:=0 to GetArrayLength(MyText)-1 do beginTemp := MyText[ k];if (found = 0) thenfound := Pos( MyCT, MyText[ k]);{if the entry is found, remove the line from the titles file}if (found <> 0) then beginif ((k+1) < GetArrayLength(MyText)) then beginMyText[ k] := MyText[ k+1];end else {begin;}MyText[ k] := '';end;end;if (found <> 0) then begin{shorten array with one}SetArrayLength( MyText, GetArrayLength( MyText) - 1);SaveStringsToFile( MyFile, MyText, false);end;{search the task name in the titles file}MyFile := GetPrgDir( '') + '\ac\titles';bText := LoadStringsFromFile( MyFile, MyText);found := 0;{search for the task name}for k:=0 to GetArrayLength(MyText)-1 do beginTemp := MyText[ k];if (found = 0) thenfound := Pos( MyAC, MyText[ k]);{if the entry is found, remove the line from the titles file}if (found <> 0) then beginif ((k+1) < GetArrayLength(MyText)) then beginMyText[ k] := MyText[ k+1];end else {begin;}MyText[ k] := '';end;end;if (found <> 0) then begin{shorten array with one}SetArrayLength( MyText, GetArrayLength( MyText) - 1);SaveStringsToFile( MyFile, MyText, false);end;{return always true, ac file must be removed}Result := True;end;procedure InitializeWizard;begin{ Create the pages }{ UserPage := CreateInputQueryPage(wpWelcome,'Personal Information', 'Who are you?','Please specify your name and the company for whom you work, then click Next.');UserPage.Add('Name:', False);UserPage.Add('Company:', False);}UsagePage := CreateInputOptionPage(wpInfoBefore,'FactoryLink Version Information', 'For which version are you installing the {#AppName}?','Please select the correct version of FactoryLink, then click Next.',True, False);UsagePage.Add('FactoryLink 7.5'); {selection 0}UsagePage.Add('FactoryLink 8.0'); {selection 1}WinVerPage := CreateOutputMsgPage(UsagePage.ID,'FactoryLink Version Information', 'Supported Windows Operating Systems?','FactoryLink 8.0 is supported for Windows XP with at least Service Pack 2 applied!' +Chr(13) + Chr(13) + Chr(13) +'Click Back if you want to change your FactoryLink version setting now, or click Next to ' +'continue with the installation.');{KeyPage := CreateInputQueryPage(UsagePage.ID,'Personal Information', 'What''s your registration key?','Please specify your registration key and click Next to continue. If you don''t ' +'have a valid registration key, click Back to choose a different usage mode.');KeyPage.Add('Registration key:', False);ProgressPage := CreateOutputProgressPage('Personal Information','What''s your registration key?');DataDirPage := CreateInputDirPage(wpSelectDir,'Select Personal Data Directory', 'Where should personal data files be installed?','Select the folder in which Setup should install personal data files, then click Next.',False, '');DataDirPage.Add('');}{ Set default values, using settings that were stored last time if possible }case GetPreviousData('FlVersion', '') of'FL750': UsagePage.SelectedValueIndex := 0;'FL80': UsagePage.SelectedValueIndex := 1;elseUsagePage.SelectedValueIndex := 1;end;{DataDirPage.Values[0] := GetPreviousData('DataDir', '');}end;function NextButtonClick(CurPageID: Integer): Boolean;{var}{I: Integer;}begin{ Validate certain pages before allowing the user to proceed }if CurPageId = UsagePage.ID then begincase UsagePage.SelectedValueIndex of1: FlVersion := 'FL80';0: FlVersion := 'FL75';elseFlVersion := 'FL80';end;end;{if CurPageID = UserPage.ID then beginif UserPage.Values[0] = '' then beginMsgBox('You must enter your name.', mbError, MB_OK);Result := False;end else beginif DataDirPage.Values[0] = '' thenDataDirPage.Values[0] := 'C:\' + UserPage.Values[0];Result := True;end;end else}{if CurPageID = KeyPage.ID then begin}{ Just to show how 'OutputProgress' pages work.Always use a try..finally between the Show and Hide calls as shown below. }{ ProgressPage.SetText('Authorizing registration key...', '');ProgressPage.SetProgress(0, 0);ProgressPage.Show;tryfor I := 0 to 10 do beginProgressPage.SetProgress(I, 10);Sleep(100);end;finallyProgressPage.Hide;end;if KeyPage.Values[0] = 'inno' thenResult := Trueelse beginMsgBox('You must enter a valid registration key. (Hint: The key is "inno".)', mbError, MB_OK);Result := False;end;end else}Result := True;end;procedure RegisterPreviousData(PreviousDataKey: Integer);begin{ Store the settings so we can restore them next time }SetPreviousData(PreviousDataKey, 'FlVersion', FlVersion);end;