Wow...
Ich mein ich poste sowas ja nicht aus Spaß, oder weil mir grad langweilig ist.
Ich habe die UDF gepostet, weil das genau das war, was du brauchtest um das Problem zu lösen.
Aber natürlich war dir das zu lang, deswegen probierst du lieber 3 Tage so herum, bis dir von wem anders gesagt wird, dass du die Lösung schon lange weißt.
Irgendwie erinnert mich die ganze Situation an jemanden aus der Shoutbox.
Aber ich verstehe nicht was an "zu lang" ein Problem ist. Du kannst es in eine externe Include Datei auslagern, oder du schreibst es einfach so ins script.
Allein schon das Include Misc.au3, (was du nur für _ChooseFont() brauchst) macht dein Script knapp 800 Zeilen länger. Das wird beim kompilieren sowieso alles in eine
Datei gehauen und fertig
wie m-obi schon gesagt hat: Wenn du die UDF aus Post 20 nimmst, dann kannst dus einfach so machen
Spoiler anzeigen
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <misc.au3>
$neu = 0
#region ### START Koda GUI section ### Form=
$Form1 = GUICreate("Croco´s EDITOR", 751, 584, 192, 124)
$menu1 = GUICtrlCreateMenu("Datei")
$item1 = GUICtrlCreateMenuItem("Neu", $menu1)
$item2 = GUICtrlCreateMenuItem("Öffnen", $menu1)
$item3 = GUICtrlCreateMenuItem("Speichern", $menu1)
$item4 = GUICtrlCreateMenuItem("Beenden", $menu1)
$menu2 = GUICtrlCreateMenu("Format")
$item5 = GUICtrlCreateMenuItem("Schriftart...", $menu2)
$Edit1 = GUICtrlCreateEdit("", 0, 0, 751, 584)
GUICtrlSetData(-1, "")
GUISetState(@SW_SHOW)
#endregion ### END Koda GUI section ###
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
$JA_NEIN = MsgBox(4, "Beenden", "Wollen sie wierklich Beenden?", 5)
If $JA_NEIN = "6" Then
Exit
EndIf
Case $item1
GUICtrlSetData($Edit1, "")
WinSetTitle($Form1, "", "Croco`s Editor")
Case $item2
$open = FileOpenDialog("Datei auswählen", "C\Users\", "Text Datein(*.txt)| (*.croco) | (*.ini)")
GUICtrlSetData($Edit1, FileRead($open))
Case $item3
$file = _FileSaveDialog("Datei Speichern", "", _
"Crocojunk-Dateien (*.croco)|*.croco|" & _
"Textdateien (*.txt)|*.txt|" & _
"Ini-Dateien (*.ini)|*.ini")
Local $iErr = @error, $iExt = @extended
Switch $iExt
Case 1
MsgBox(0, "", "Croco")
Case 2
MsgBox(0, "", "Text")
Case 3
MsgBox(0, "", "Ini")
EndSwitch
;~ FileWrite($file, GUICtrlRead($Edit1))
Case $item4
$JA_NEIN = MsgBox(4, "Beenden", "Wollen sie wierklich Beenden?", 5)
If $JA_NEIN = "6" Then
Exit
EndIf
Case $item5
$aFontNew = _ChooseFont()
If IsArray($aFontNew) Then
GUICtrlSetFont($Edit1, $aFontNew[3], $aFontNew[4], $aFontNew[1], $aFontNew[2])
GUICtrlSetColor($Edit1, $aFontNew[7])
EndIf
EndSwitch
WEnd
Func _FileSaveDialog($sTitle, $sInitDir, $sFilter = 'All (*.*)', $iOpt = 0, $sDefFile = '', $iDefFilter = 1, $hWnd = 0)
Local $iFileLen = 65536 ; Max chars in returned string
; API flags prepare
Local $iFlag = BitOR(BitShift(BitAND($iOpt, 2), -10), BitShift(BitAND($iOpt, 16), 3))
; Filter string to array convertion
If Not StringInStr($sFilter, '|') Then $sFilter &= '|*.*'
$sFilter = StringRegExpReplace($sFilter, '|+', '|')
Local $asFLines = StringSplit($sFilter, '|')
Local $i, $suFilter = ''
For $i = 1 To $asFLines[0] Step 2
If $i < $asFLines[0] Then _
$suFilter &= 'byte[' & StringLen($asFLines[$i]) + 1 & '];char[' & StringLen($asFLines[$i + 1]) + 1 & '];'
Next
; Create API structures
Local $uOFN = DllStructCreate('dword;int;int;ptr;ptr;dword;dword;ptr;dword' & _
';ptr;int;ptr;ptr;dword;short;short;ptr;ptr;ptr;ptr;ptr;dword;dword')
Local $usTitle = DllStructCreate('char[' & StringLen($sTitle) + 1 & ']')
Local $usInitDir = DllStructCreate('char[' & StringLen($sInitDir) + 1 & ']')
Local $usFilter = DllStructCreate($suFilter & 'byte')
Local $usFile = DllStructCreate('char[' & $iFileLen & ']')
Local $usExtn = DllStructCreate('char[1]')
For $i = 1 To $asFLines[0]
DllStructSetData($usFilter, $i, $asFLines[$i])
Next
; Set Data of API structures
DllStructSetData($usTitle, 1, $sTitle)
DllStructSetData($usInitDir, 1, $sInitDir)
DllStructSetData($usFile, 1, $sDefFile)
DllStructSetData($usExtn, 1, "")
DllStructSetData($uOFN, 1, DllStructGetSize($uOFN))
DllStructSetData($uOFN, 2, $hWnd)
DllStructSetData($uOFN, 4, DllStructGetPtr($usFilter))
DllStructSetData($uOFN, 7, $iDefFilter)
DllStructSetData($uOFN, 8, DllStructGetPtr($usFile))
DllStructSetData($uOFN, 9, $iFileLen)
DllStructSetData($uOFN, 12, DllStructGetPtr($usInitDir))
DllStructSetData($uOFN, 13, DllStructGetPtr($usTitle))
DllStructSetData($uOFN, 14, $iFlag)
DllStructSetData($uOFN, 17, DllStructGetPtr($usExtn))
DllStructSetData($uOFN, 23, BitShift(BitAND($iOpt, 32), 5))
;Set Timer to check FileName Input for file extension
Local $hCallBack = DllCallbackRegister("_Check_FSD_Input", "none", "hwnd;int;int;dword")
Local $ahTimer = DllCall("user32.dll", "int", "SetTimer", "hwnd", 0, _
"int", TimerInit(), "int", 100, "ptr", DllCallbackGetPtr($hCallBack))
; Call API function
Local $aRet = DllCall('comdlg32.dll', 'int', 'GetSaveFileName', 'ptr', DllStructGetPtr($uOFN))
;Free CallBack and kill the timer
DllCallbackFree($hCallBack)
DllCall("user32.dll", "int", "KillTimer", "hwnd", 0, "int", $ahTimer)
If Not IsArray($aRet) Or Not $aRet[0] Then Return SetError(1, 0, "")
[/autoit] [autoit][/autoit] [autoit];Return Results
Local $sRet = StringStripWS(DllStructGetData($usFile, 1), 3)
Return SetExtended(DllStructGetData($uOFN, 7), $sRet) ;@extended is the 1-based index of selected filter
EndFunc ;==>_FileSaveDialog
Func _Check_FSD_Input($hWndGUI, $MsgID, $WParam, $LParam)
Local $sSaveAs_hWnd = _WinGetHandleEx(@AutoItPID, "#32770", "", "FolderView")
If ControlGetFocus($sSaveAs_hWnd) = "Edit1" Then Return
[/autoit] [autoit][/autoit] [autoit]Local $sEdit_Data = ControlGetText($sSaveAs_hWnd, "", "Edit1")
Local $sFilter_Ext = ControlCommand($sSaveAs_hWnd, "", "ComboBox3", "GetCurrentSelection")
$sFilter_Ext = StringRegExpReplace($sFilter_Ext, ".*\(\*(.*?)\)$", "\1")
If $sFilter_Ext = ".*" Then
$sFilter_Ext = ""
ElseIf Not StringInStr($sFilter_Ext, ".") Then
Return
EndIf
Local $sEdit_Ext = StringRegExpReplace($sEdit_Data, "^.*\.", ".")
[/autoit] [autoit][/autoit] [autoit]If $sEdit_Ext <> $sFilter_Ext And ($sEdit_Ext <> $sEdit_Data Or $sFilter_Ext <> "") Then
$sEdit_Data = StringRegExpReplace($sEdit_Data, "\.[^.]*$", "")
ControlSetText($sSaveAs_hWnd, "", "Edit1", $sEdit_Data & $sFilter_Ext)
EndIf
EndFunc ;==>_Check_FSD_Input
Func _WinGetHandleEx($iPID, $sClassNN = "", $sPartTitle = "", $sText = "", $iVisibleOnly = 1)
If IsString($iPID) Then $iPID = ProcessExists($iPID)
Local $aWList = WinList("[CLASS:" & $sClassNN & ";REGEXPTITLE:(?i).*" & $sPartTitle & ".*]", $sText)
If @error Then Return SetError(1, 0, "")
For $i = 1 To $aWList[0][0]
If WinGetProcess($aWList[$i][1]) = $iPID And (Not $iVisibleOnly Or _
($iVisibleOnly And BitAND(WinGetState($aWList[$i][1]), 2))) Then Return $aWList[$i][1]
Next
Return SetError(2, 0, "")
EndFunc ;==>_WinGetHandleEx