File "savepos.inc"

Path: /LAN Scanner/savepos.inc
File size: 2.8 KB
MIME-type:
Charset: utf-8


' Just call CB_SAVEPOS at the very beginning of your Dialog CALLBACK
' to save and restore position of your Dialog upon creation / closing

'------------------------------------------------------------------------------
MACRO POS_FILE = LocalAppdata() + "\" + EXE.NAME$ + ".pos"
'------------------------------------------------------------------------------

'------------------------------------------------------------------------------
MACRO CB_SAVEPOS
    SELECT CASE AS LONG CB.MSG
        CASE %WM_INITDIALOG
            LoadDialogPos CB.HNDL
        CASE %WM_SYSCOMMAND
            SaveDialogPos CB.HNDL
    END SELECT
END MACRO
'------------------------------------------------------------------------------

'------------------------------------------------------------------------------
FUNCTION EXIST(BYVAL fileOrFolder AS STRING) AS LONG
    LOCAL Dummy&
    ON ERROR GOTO Inexistant
    Dummy& = GETATTR(fileOrFolder)
    Inexistant:
    RESUME FLUSH
    FUNCTION = (ERRCLEAR = 0)
END FUNCTION
'------------------------------------------------------------------------------

'------------------------------------------------------------------------------
%CSIDL_LOCAL_APPDATA  = &H001c ' <user name>\Local Settings\Application Data (non roaming)
DECLARE FUNCTION SHGetFolderPath LIB "Shell32.dll" _
    ALIAS "SHGetFolderPathA" (BYVAL hwnd AS DWORD, BYVAL csidl AS LONG, _
    BYVAL hToken AS DWORD, BYVAL dwFlags AS DWORD, pszPath AS ASCIIZ) AS LONG
FUNCTION LocalAppdata AS STRING
    LOCAL szBaseFolder AS ASCIIZ * %MAX_PATH
    ShGetFolderPath (BYVAL %NULL, _             ' hWnd, "typically null"
                     %CSIDL_LOCAL_APPDATA, _    ' (supported) CSIDL value
                     BYVAL %NULL, _             ' hToken for security, null  = Default
                     BYVAL 0, _                 ' above
                     szBaseFolder)
    FUNCTION = TRIM$(szBaseFolder)
END FUNCTION
'------------------------------------------------------------------------------

'------------------------------------------------------------------------------
SUB SaveDialogPos(hDlg AS DWORD)
    LOCAL ff, x, y AS LONG
    IF IsIconic(hDlg) THEN EXIT SUB
    DIALOG GET LOC hDlg TO x, y
    ff = FREEFILE
    OPEN POS_FILE FOR OUTPUT AS #ff
        PRINT #ff, x
        PRINT #ff, y
    CLOSE #ff
END SUB
'------------------------------------------------------------------------------

'------------------------------------------------------------------------------
SUB LoadDialogPos(hDlg AS DWORD)
    LOCAL ff, x, y AS LONG
    LOCAL e AS STRING
    IF NOT EXIST(POS_FILE) THEN EXIT SUB
    ff = FREEFILE
    OPEN POS_FILE FOR INPUT AS #ff
        LINE INPUT #ff, e : x = VAL(e)
        LINE INPUT #ff, e : y = VAL(e)
    CLOSE #ff
    DIALOG SET LOC hDlg, x, y
END SUB
'------------------------------------------------------------------------------