Beware : This article posted on February 2, 2013 and than with HMG 3.1.3 release on 23 May 2013 added 5th and 6th parameters to that function by our genius Dr. Soto …
Look at changelog of HMG.
PutFile() is a HMG function that :
Opens ‘Save As’ System Dialog And Returns The Saved File name
Syntax:
PutFile ( acFilter , cTitle , cIniFolder , lNoChangeDir ) –> cSavedFileName
Although its name is “Put”, this function doesn’t “put” anything to anywhere; that is don’t write anything to disk. It only return a file name ( or empty string if user not selected / typed anything). File that name returned by PutFile() may exist or not. This is only difference between PutFile() and GetFile(); the second return only name of an existing file.
Therefore PutFile() function doesn’t check overwrite status. This is totally responsibility of programmer and if not care, PutFile() become a dangerous tool. The “Default File Name” and network environments will increase the risk. Of course no problem for intentionally overwrite.
As a result, PutFile() open a “Save As…” dialog box and returns a file name to save, selected / typed by user.
As above syntax indicated, this function has four parameters.
Whereas sometime required a bit more info : default file name.
When program suggest a default file name, in addition to select / type a new file name, user may feel more comfortable by only confirm (verbatim or after typing something) suggested file name.
This is a bit modified version of PutFile() (with a small test program); since accept default file name as 5th parameter, name is PutFile5P()
Note : This work is superseded by adding two parameters to official PutFile() function at HMG 3.1.4 2013/06/16.
Happy HMG’ing 😀
~~~~~~~~~~~~~~~~
/*
HMG Common Dialog Functions
PutFile5P() Test prg.
*/
#include "hmg.ch"
PROCEDURE Main()
LOCAL nTask
DEFINE WINDOW Win_1 ;
AT 0,0 ;
WIDTH 400 ;
HEIGHT 400 ;
TITLE 'PutFile with Default File Name' ;
MAIN
DEFINE MAIN MENU
POPUP 'Common &Dialog Functions'
ITEM 'PutFile5P()'ACTION MsgInfo( Putfile5P( ;
{ {'Text Files','*.txt'} },; // 1° acFilter ;
'Save Text',; // 2° cTitle
'C:\',; // 3° cIniFolder
,; // 4° lNoChangeDir
"New_Text.TXT" ) ) // 5° cDefaultFileName
END POPUP
END MENU
END WINDOW
ACTIVATE WINDOW Win_1
RETURN // TestPF5P.PRG
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
*-----------------------------------------------------------------------------*
FUNCTION Putfile5P ( aFilter, title, cIniFolder, nochangedir, cDeFilName )
*-----------------------------------------------------------------------------*
LOCAL c:='' , n
IF aFilter == Nil
aFilter := {}
EndIf
IF HB_ISNIL( cDeFilName )
cDeFilName := ''
ENDIF
FOR n := 1 TO Len ( aFilter )
c += aFilter [n] [1] + chr(0) + aFilter [n] [2] + chr(0)
NEXT
RETURN C_PutFile5P ( c, title, cIniFolder, nochangedir, cDeFilName )
*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#pragma BEGINDUMP
#define HB_OS_WIN_USED
#define _WIN32_WINNT 0x0400
#include <windows.h>
#include "hbapi.h"
#include "hbapiitm.h"
HB_FUNC ( C_PUTFILE5P )
{
OPENFILENAME ofn;
char buffer[512];
int flags = OFN_FILEMUSTEXIST | OFN_EXPLORER ;
if ( hb_parl(4) )
{
flags = flags | OFN_NOCHANGEDIR ;
}
if( strlen( hb_parc( 5 ) ) != 0 )
strcpy( buffer, hb_parc( 5 ) );
else
strcpy( buffer, "" );
memset( (void*) &ofn, 0, sizeof( OPENFILENAME ) );
ofn.lStructSize = sizeof(ofn);
ofn.hwndOwner = GetActiveWindow() ;
ofn.lpstrFilter = hb_parc(1) ;
ofn.lpstrFile = buffer;
ofn.nMaxFile = 512;
ofn.lpstrInitialDir = hb_parc(3);
ofn.lpstrTitle = hb_parc(2) ;
ofn.Flags = flags;
if( GetSaveFileName( &ofn ) )
{
hb_retc( ofn.lpstrFile );
}
else
{
hb_retc( "" );
}
}
#pragma ENDDUMP
