Custom FileSaveDialog

  • Guten Abend,

    ich mache mir einen eigenen Custom FileSaveDialog, wo ich die Texte der Labels und Buttons selber vergeben kann.
    Das einzige was aber geändert wird ist der Abbrechen-Button. Der Rest bleibt alles wie vorher.
    Weiß jemand wo der Fehler in meinem Code steckt?

    Spoiler anzeigen
    [autoit]

    #include <WinApi.au3>
    #include <GUIConstantsEx.au3>

    [/autoit] [autoit][/autoit] [autoit]

    Global $sFilename
    Global Const $HCBT_ACTIVATE = 5
    Global $FSDEX_Hook
    Global $FSDEX_sSave, $FSDEX_sCancel, $FSDEX_sStatic1, $FSDEX_sStatic2, $FSDEX_sStatic3, $FSDEX_sTitle

    [/autoit] [autoit][/autoit] [autoit]

    $hGui = GUICreate("Test")
    $cSave = GUICtrlCreateButton("Save", 40, 40, 80, 25)
    GUISetState()

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    While 1
    $iMsg = GUIGetMsg()

    [/autoit] [autoit][/autoit] [autoit]

    Switch $iMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $cSave
    $sFilename = _FileSaveDialogEx("Save", "C:\", "Alle (*.*)", 0, "", "Save to:", "Filename:", "Filetype:", "&Save" , "&Abort", $hGui)
    MsgBox(0, "", $sFilename)
    EndSwitch
    WEnd

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    Func _FileSaveDialogEx($sTitle, $sInitDir, $sFilter, $iOptions = 0, $sDefaultName = "", $sStaticText1 = "", $sStaticText2 = "", $sStaticText3 = "", $sButtonText1 = "" , $sButtonText2 = "", $hWndOwner = 0)
    Local $FSDEX_TId, $sFileSaveDialog, $hRet
    Local $FSDEX_HookProc = DllCallbackRegister("__FileSaveDialogHookProc", "int", "int;int;int")

    [/autoit] [autoit][/autoit] [autoit]

    $FSDEX_sTitle = $sTitle
    $FSDEX_sSave = $sButtonText1
    $FSDEX_sCancel = $sButtonText2
    $FSDEX_sStatic1 = $sStaticText1
    $FSDEX_sStatic2 = $sStaticText2
    $FSDEX_sStatic3 = $sStaticText3

    [/autoit] [autoit][/autoit] [autoit]

    $FSDEX_TId = _WinAPI_GetCurrentThreadId()
    $FSDEX_Hook = _WinAPI_SetWindowsHookEx($WH_CBT, DllCallbackGetPtr($FSDEX_HookProc), 0, $FSDEX_TId)

    [/autoit] [autoit][/autoit] [autoit]

    $sFileSaveDialog = FileSaveDialog($sTitle, $sInitDir, $sFilter, $iOptions, $sDefaultName, $hWndOwner)
    _WinAPI_UnhookWindowsHookEx($FSDEX_Hook)
    DllCallbackFree($FSDEX_HookProc)
    Return SetError(@error, @extended, $sFileSaveDialog)
    EndFunc

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    Func __FileSaveDialogHookProc($nCode, $wParam, $lParam)
    If $nCode = $HCBT_ACTIVATE Then
    If $FSDEX_sSave <> "" Then _WinAPI_SetDlgItemText($wParam, 1, $FSDEX_sSave)
    If $FSDEX_sCancel <> "" Then _WinAPI_SetDlgItemText($wParam, 2, $FSDEX_sCancel)
    If $FSDEX_sStatic1 <> "" Then _WinAPI_SetDlgItemText($wParam, 1091, $FSDEX_sStatic1)
    If $FSDEX_sStatic2 <> "" Then _WinAPI_SetDlgItemText($wParam, 1090, $FSDEX_sStatic2)
    If $FSDEX_sStatic3 <> "" Then _WinAPI_SetDlgItemText($wParam, 1089, $FSDEX_sStatic3)
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    Return _WinAPI_CallNextHookEx($FSDEX_Hook, $nCode, $wParam, $lParam)
    EndFunc

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    Func _WinAPI_SetDlgItemText($hDlg, $nIDDlgItem, $lpString)
    Local $aRet = DllCall('user32.dll', "int", "SetDlgItemText", _
    "hwnd", $hDlg, _
    "int", $nIDDlgItem, _
    "str", $lpString)
    Return $aRet[0]
    EndFunc ;==>_WinAPI_SetDlgItemText

    [/autoit]

    2 Mal editiert, zuletzt von m-obi (10. Juni 2012 um 21:57)