Saving+previous+load+and+save+paths


 * Please see the [|discussion] page**

It is often useful if a program remembers where a file was last loaded from or saved to so that the next time a file open or file save dialogue is used it opens on the same directory as last time. Repeated calls of **SYS "GetOpenFileName"** re-open on the same directory as last time (unless overridden). However, that is a system-wide setting, not a program setting, and your program may have different dialogues that should start from different directories. The following code saves the loaded or saved filename in the registry so that next time it opens on the same directory again. The Save dialogue also pre-fills the filename with the last used filename. code format="bb4w" DEF FNFile_Open ft$="Select file to load"+CHR$0 LastLoad$ =FNReg_Rd(KeyRoot$+"LastLoad")+CHR$0 ff$ = "All files"+CHR$0+"*.*"+CHR$0+CHR$0 $$fp{}=LastLoad$ fs.lStructSize% = DIM(fs{}) fs.hwndOwner% = @hwnd% fs.lpstrFilter% = !^ff$ fs.lpstrInitialDir% = !^LastLoad$ fs.lpstrFile% = fp{} fs.nMaxFile% = 260 fs.lpstrTitle% = !^ft$ fs.flags% = 6 SYS "GetOpenFileName", fs{} TO result% IF result%:ff$=$$fp{}:PROCReg_Wr(KeyRoot$+"LastLoad",ff$):=ff$ =""     :      DEFFNFile_Save ft$="Select output file to save to"+CHR$0 LastSave$ =FNReg_Rd(KeyRoot$+"LastSave")+CHR$0 ff$ = "All files"+CHR$0+"*.*"+CHR$0+CHR$0 $$fp{}=LastSave$ fs.lStructSize% = DIM(fs{}) fs.hwndOwner% = @hwnd% fs.lpstrFilter% = !^ff$ fs.lpstrInitialDir% = !^LastSave$ fs.lpstrFile% = fp{} fs.nMaxFile% = 260 fs.lpstrTitle% = !^ft$ fs.flags% = 6 SYS "GetSaveFileName", fs{} TO result% IF result%:ff$=$$fp{}:PROCReg_Wr(KeyRoot$+"LastSave",ff$):=ff$ ="" code They are called with, for example, **in$=FNFile_Open:out$=FNFile_Save**. They need the usual file open dialogue structure set up with: code format="bb4w" DIM fs{lStructSize%, hwndOwner%, hInstance%, lpstrFilter%, \ \     lpstrCustomFilter%, nMaxCustFilter%, nFilterIndex%, \ \     lpstrFile%, nMaxFile%, lpstrFileTitle%, \ \     nMaxFileTitle%, lpstrInitialDir%, lpstrTitle%, \ \     flags%, nFileOffset{l&,h&}, nFileExtension{l&,h&}, \ \     lpstrDefExt%, lCustData%, lpfnHook%, lpTemplateName%} DIM fp{t&(260)} code The registry calls need **KeyRoot$** set to your program's registry branch which must be of the form: code format="bb4w" KeyRoot$="Software\MySoftwareHouse\MyApplicationName\" code See Simple Registry Usage for the **Reg_Rd** and **Reg_Wr** routines.