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
#include <WinApi.au3>
#include <GUIConstantsEx.au3>
Global $sFilename
Global Const $HCBT_ACTIVATE = 5
Global $FSDEX_Hook
Global $FSDEX_sSave, $FSDEX_sCancel, $FSDEX_sStatic1, $FSDEX_sStatic2, $FSDEX_sStatic3, $FSDEX_sTitle
$hGui = GUICreate("Test")
$cSave = GUICtrlCreateButton("Save", 40, 40, 80, 25)
GUISetState()
While 1
$iMsg = GUIGetMsg()
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
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")
$FSDEX_sTitle = $sTitle
$FSDEX_sSave = $sButtonText1
$FSDEX_sCancel = $sButtonText2
$FSDEX_sStatic1 = $sStaticText1
$FSDEX_sStatic2 = $sStaticText2
$FSDEX_sStatic3 = $sStaticText3
$FSDEX_TId = _WinAPI_GetCurrentThreadId()
$FSDEX_Hook = _WinAPI_SetWindowsHookEx($WH_CBT, DllCallbackGetPtr($FSDEX_HookProc), 0, $FSDEX_TId)
$sFileSaveDialog = FileSaveDialog($sTitle, $sInitDir, $sFilter, $iOptions, $sDefaultName, $hWndOwner)
_WinAPI_UnhookWindowsHookEx($FSDEX_Hook)
DllCallbackFree($FSDEX_HookProc)
Return SetError(@error, @extended, $sFileSaveDialog)
EndFunc
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
Return _WinAPI_CallNextHookEx($FSDEX_Hook, $nCode, $wParam, $lParam)
EndFunc
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