Fileopen problem

  • Die Dateiendung musst du auch leider im FileOpenDialog mit anhängen. ;)
    Du kannst es auch wie ich machen und dir dein eigenes Dateiendungssytem für einen FileOpenDialog basteln (z.B. Wenn keine Endung angegeben wird, hängt er eine Standardendung an).

    Edit: Oder du machst es wie Seubo es in seinem Post über mir demonstriert hat. :D

  • Übrigens heißt es Dateien und nicht Datein. Sieht besser aus wenn man die deutsche Rechtschreibung beibehält. ;)

  • so das mit datein speicher hab ich jetz geschafft

    ich hab jetzt eine andere frage und zwar geht es um _choosecolor und _choosefont
    ich hab mir in der hilfe die beispiele angeguckt doch ich blick da nicht wierklich durch.

    kann mir das einer erklären??

    EDIT\\ kann ich das irgendwie vereinfachen??

    danke

    Einmal editiert, zuletzt von crocojunk (10. April 2010 um 23:29)

  • Was ist daran so schwer?
    Weil ich wahrscheinlich sowieso gegen eine Wand rede wenn ich dir sage, dass du die Hilfe lesen sollst, schreibe ich dir ein Beispiel.

    Spoiler anzeigen
    [autoit]

    #include <Misc.au3>
    #include <GUIConstantsEx.au3>

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

    $hWnd = GUICreate("Beispiel", 500, 300)
    $ButtonFont = GUICtrlCreateButton("Schrift", 8, 8, 75, 25)
    $ButtonColor = GUICtrlCreateButton("Farbe", 88, 8, 75, 25)
    $LabelTest = GUICtrlCreateLabel("AutoIt ist cool!", 8, 40, 492, 260)
    GUISetState()

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

    While 1
    Switch GUIGetMsg()
    Case $GUI_EVENT_CLOSE
    Exit
    Case $ButtonFont
    $aFontNew = _ChooseFont()
    If IsArray($aFontNew) Then
    GUICtrlSetFont($LabelTest, $aFontNew[3], $aFontNew[4], $aFontNew[1], $aFontNew[2])
    GUICtrlSetColor($LabelTest, $aFontNew[7])
    EndIf
    Case $ButtonColor
    $ColorNewRGB = _ChooseColor(2)
    GUISetBkColor($ColorNewRGB, $hWnd)
    EndSwitch
    WEnd

    [/autoit]
  • aso geht das .


    die hilfe hatte mich total iritiert ich dachte da müssten ein haufen variabeln hinter stehen.

    ok danke

  • Was für ein Haufen Variablen? Du meinst die OPTIONALEN Parameter? Du weißt schon was optional heißt oder?

  • ähh nein ich lerne immer noch.

    ich setzt mich immer an projekte und lerne dann in dem ich es selber mache nur bei manchen sachen hilft mir auch die hilfe nicht weiter.

    Ich lese mir die hilfe auch durch.

  • Ok, dann erklär ich dir das mal z.B. anhand von _ChooseFont.
    In der Hilfe steht ja

    Code
    _ChooseFont([$sFontName = "Courier New" [, $iPointSize = 10 [, $iColorRef = 0 [, $iFontWeight = 0 [, $iItalic = False [, $iUnderline = False [, $iStrikethru = False [, $hWndOwner = 0]]]]]]]])

    Das heißt in dem Fall sind alle Parameter optional.
    Also wenn du schreibst

    [autoit]

    _ChooseFont()

    [/autoit]


    nimmt er die Standart-Parameter die hinterlegt sind.

  • aso dann ist ja klar.

    also wenn in der hilfe steht die befehle dahinter sind optional dann brauch ich die nicht verwenden und wenn alle optional sind brauch ich nur () dahintersetzen.


    cool danke

  • gibt es eine möglichkeit das er die datein die in mein format sind also .croco auch mit dem programm öffnet womit sie erstellt wurden??


    danke


    Keine Dummen Antworten oder blöde Kommentare.
    Danke :)

  • Ich hab ein problem und brauche hilfe das problem plagt mich schon schneller und zwar ich hab den FilesaveDialog will speichern die datein die ich erstellt hab das funktioniert auch ich kann unter mehreren dateiformaten auswählen wie soll ich das in das filewrite machen und das er auch als das format schreibt.

    Ich bin am verzweifeln ich habs 2 tage versucht es alleine hinzukriegen aber das hat nicht gefunzt.

    kann mir einer helfen.


    Keine Dummen Antworten oder blöde Kommentare.
    Danke :)

  • Benutzt du die UDF die ich gepostet habe? Du kannst @extended abfragen. So erkennst du welches Format der User gewählt hat.

    [autoit]


    $sPath = _FileSaveDialog(....) ; mit mehreren Dateiformaten
    Switch @extended
    Case 1
    If Not StringRight($sPath,4) = ".txt" then $sPath &= ".txt"
    Case 2
    If Not StringRight($sPath,6) = ".croco" then $sPath &= ".croco"
    Endswitch

    [/autoit]

    So oder so ähnlich. Schnell im Browser getippt, aber das Prinzip sollte deutlich werden.

  • also ich hab das schon vorher in ein case gehabt kann ich die einfach damit einfügen oder wie??


    momentan hab ich es so


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

    case $speichern

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

    $file = Filesavedialog ("Speichern", ""," (*.croco) | Textdatei (*.txt) | (*.ini)")
    $save = Filewrite ($file, "",Guictrlread ($Edit1))

    [/autoit]


    kann ich dann einfach vor filewrite @extended schreiben??

    EDIT\\ Ich weiß nicht ob man 2 switches drin haben kann.


    danke

    Keine Dummen Antworten oder blöde Kommentare.
    Danke :)

    2 Mal editiert, zuletzt von crocojunk (13. April 2010 um 20:53)

  • also ich hab das jetzt ausprobiert und es funktioniert nicht ka warum.

    ich denke weil ich vorher schon ein case habe wo das drinn stand und schon ein switch im programm habe.

  • Du kannst so vile Switches drin haben wie du willst, nur sie müssen richtig verschachtelt sein. Wie sieht denn dein Script bis jetzt aus und wo hakt es genau.

  • also es ist so gut wie fertig nur mein einziges problem ist das er das format schreibt weil ich hab mehre formate einam .croco und .txt
    hätte ich ein format wüsste ich wie es geht aber ich hab mehrere.

    Hier ist der script

    Spoiler anzeigen
    [autoit]

    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    #include <misc.au3>
    $neu = 0

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

    #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 ###

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

    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", "", "(*.croco)|Textdateien (*.txt)| (*.ini)")
    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

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

    EndSwitch
    WEnd

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

    ab zeile 35 ist filesave

  • Warum nimmst du denn nicht die UDF von SEuBo vom Post #20? Da bekommste über @extended das gewählte Dateiformat.

  • 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
    [autoit]

    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    #include <misc.au3>
    $neu = 0

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

    #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 ###

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

    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

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

    EndSwitch
    WEnd

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

    Func _FileSaveDialog($sTitle, $sInitDir, $sFilter = 'All (*.*)', $iOpt = 0, $sDefFile = '', $iDefFilter = 1, $hWnd = 0)
    Local $iFileLen = 65536 ; Max chars in returned string

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

    ; API flags prepare
    Local $iFlag = BitOR(BitShift(BitAND($iOpt, 2), -10), BitShift(BitAND($iOpt, 16), 3))

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

    ; Filter string to array convertion
    If Not StringInStr($sFilter, '|') Then $sFilter &= '|*.*'
    $sFilter = StringRegExpReplace($sFilter, '|+', '|')

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

    Local $asFLines = StringSplit($sFilter, '|')
    Local $i, $suFilter = ''

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

    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

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

    ; 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]')

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

    For $i = 1 To $asFLines[0]
    DllStructSetData($usFilter, $i, $asFLines[$i])
    Next

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

    ; 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))

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

    ;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))

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

    ; Call API function
    Local $aRet = DllCall('comdlg32.dll', 'int', 'GetSaveFileName', 'ptr', DllStructGetPtr($uOFN))

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

    ;Free CallBack and kill the timer
    DllCallbackFree($hCallBack)
    DllCall("user32.dll", "int", "KillTimer", "hwnd", 0, "int", $ahTimer)

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

    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

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

    Func _Check_FSD_Input($hWndGUI, $MsgID, $WParam, $LParam)
    Local $sSaveAs_hWnd = _WinGetHandleEx(@AutoItPID, "#32770", "", "FolderView")

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

    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")

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

    If $sFilter_Ext = ".*" Then
    $sFilter_Ext = ""
    ElseIf Not StringInStr($sFilter_Ext, ".") Then
    Return
    EndIf

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

    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

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

    Func _WinGetHandleEx($iPID, $sClassNN = "", $sPartTitle = "", $sText = "", $iVisibleOnly = 1)
    If IsString($iPID) Then $iPID = ProcessExists($iPID)

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

    Local $aWList = WinList("[CLASS:" & $sClassNN & ";REGEXPTITLE:(?i).*" & $sPartTitle & ".*]", $sText)
    If @error Then Return SetError(1, 0, "")

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

    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

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

    Return SetError(2, 0, "")
    EndFunc ;==>_WinGetHandleEx

    [/autoit]
  • Ich es ein neues problem aufgetreten und zwar ich will die von mir gespeicherten datein öffnen.

    erst hatte ich immer

    [autoit]

    $open = FileOpenDialog ("Datei auswählen", "C\Users\" , "Text Datein(*.txt)| (*.croco) | (*.ini)")
    GUICtrlSetData ($Edit1, FileRead ($open))

    [/autoit]

    es hat auch erst funktioniert doch jetzt als ich den script getestet hab konnte ich zwar die datei öffnen aber es stand nichts im edit??

    kann mir da einer ein tipp geben??

    Keine Dummen Kommentare oder antworten.

    danke