1. Dashboard
  2. Mitglieder
    1. Letzte Aktivitäten
    2. Benutzer online
    3. Team
    4. Mitgliedersuche
  3. Forenregeln
  4. Forum
    1. Unerledigte Themen
  • Anmelden
  • Registrieren
  • Suche
Alles
  • Alles
  • Artikel
  • Seiten
  • Forum
  • Erweiterte Suche
  1. AutoIt.de - Das deutschsprachige Forum.
  2. Mitglieder
  3. Oscar

Beiträge von Oscar

  • Neuer Gaming-PC

    • Oscar
    • 13. März 2018 um 08:52
    Zitat von Kicho

    Es gibt viele Spiele die man spielen kann. Eine gute Auswahl kann man immer finden.

    Und was willst Du uns damit jetzt sagen?

    Dafür gräbst Du einen 6 Monate alten Thread aus?

  • _ProgressEx

    • Oscar
    • 12. März 2018 um 17:56
    Zitat von wuff100

    Habe leider noch ein Projekt mit der Autoit Version 3.3.10.2 erstellt.


    Funktioniert damit nicht.


    Gibt es eine Abhilfe?

    Ach Gott! So eine alte AutoIt-Version. Seit der Version hat sich so viel getan.

    Beim überfliegen des Changelog ist mir einiges aufgefallen:

    - _GDIPlus_BitmapCreateDIBFromBitmap gab es noch nicht

    - _GDIPlus_ImageGetDimension gab es noch nicht

    - _GDIPlus_EffectCreateHueSaturationLightness war noch fehlerhaft

    - $STM_SETIMAGE gab es noch nicht

    und wer weiß, was noch alles?

    Also: Nein, es gibt keine Abhilfe! Jedenfalls nicht von mir.

    Ich denke, Du solltest mal Deine AutoIt-Version updaten.

  • Treeview nur Root aufklappen, Bug!?

    • Oscar
    • 12. März 2018 um 10:37

    Mir ist gerade ein Bug aufgefallen. Ich möchte bei einem Treeview nur den ersten (Root) Zweig aufklappen.

    Hier mal das Script dazu:

    AutoIt
    #include <GuiTreeView.au3>
    #include <TreeViewConstants.au3>
    #include <WinAPI.au3>
    
    Global $hGui = GUICreate('Test', 400, 200)
    Global $idTreeview = GUICtrlCreateTreeView(10, 10, 380, 180)
    Global $hTreeview = GUICtrlGetHandle($idTreeview)
    Global $hRoot = _GUICtrlTreeView_Add($hTreeview, 0, 'Root')
    Global $hAAA = _GUICtrlTreeView_AddChild($hTreeview, $hRoot, 'AAA')
    _GUICtrlTreeView_AddChild($hTreeview, $hAAA, 'AA')
    _GUICtrlTreeView_AddChild($hTreeview, $hAAA, 'AA')
    Global $hBBB = _GUICtrlTreeView_AddChild($hTreeview, $hRoot, 'BBB')
    _GUICtrlTreeView_AddChild($hTreeview, $hBBB, 'BB')
    _GUICtrlTreeView_AddChild($hTreeview, $hBBB, 'BB')
    Global $hCCC = _GUICtrlTreeView_AddChild($hTreeview, $hRoot, 'CCC')
    _GUICtrlTreeView_AddChild($hTreeview, $hCCC, 'CC')
    _GUICtrlTreeView_AddChild($hTreeview, $hCCC, 'CC')
    GUISetState()
    _GUICtrlTreeView_SetState($hTreeview, $hRoot, $TVIS_EXPANDED, True)
    Do
    Until GUIGetMsg() = -3
    Exit
    Alles anzeigen

    dabei passiert folgendes:

    Treeview-Bug1.png

    Vorne steht ein [-], aber der Baum wird nicht angezeigt. Füge ich nach _GUICtrlTreeView_SetState ein _WinAPI_InvalidateRect($hGui) ein, dann wird der Baum zumindest dargestellt: Treeview-Bug2.png

    Aber man kann die Zweige ("AAA", "BBB", "CCC") nicht anklicken. Weder markieren noch mit Klick auf das [+] weiter öffnen. Erst wenn man Root zuklappt und wieder aufklappt, sind die Zweige wieder anklickbar.

    Ich vermute den Fehler bei _GUICtrlTreeView_SetState, denn es gibt einen Workaround:

    AutoIt
    #include <GuiTreeView.au3>
    #include <TreeViewConstants.au3>
    #include <WinAPI.au3>
    
    Global $hGui = GUICreate('Test', 400, 200)
    Global $idTreeview = GUICtrlCreateTreeView(10, 10, 380, 180)
    Global $hTreeview = GUICtrlGetHandle($idTreeview)
    Global $hRoot = _GUICtrlTreeView_Add($hTreeview, 0, 'Root')
    Global $hAAA = _GUICtrlTreeView_AddChild($hTreeview, $hRoot, 'AAA')
    _GUICtrlTreeView_AddChild($hTreeview, $hAAA, 'AA')
    _GUICtrlTreeView_AddChild($hTreeview, $hAAA, 'AA')
    Global $hBBB = _GUICtrlTreeView_AddChild($hTreeview, $hRoot, 'BBB')
    _GUICtrlTreeView_AddChild($hTreeview, $hBBB, 'BB')
    _GUICtrlTreeView_AddChild($hTreeview, $hBBB, 'BB')
    Global $hCCC = _GUICtrlTreeView_AddChild($hTreeview, $hRoot, 'CCC')
    _GUICtrlTreeView_AddChild($hTreeview, $hCCC, 'CC')
    _GUICtrlTreeView_AddChild($hTreeview, $hCCC, 'CC')
    GUISetState()
    _SendMessage($hTreeview, $TVM_EXPAND, $TVE_EXPAND, $hRoot, 0, 'wparam', 'handle') ; <- Workaround
    Do
    Until GUIGetMsg() = -3
    Exit
    Alles anzeigen

    Ach, und _GUICtrlTreeView_Expand hilft mir nicht weiter, weil ich nicht alle Zweige aufklappen will.

    Wie gesagt, ich habe bereits einen "Workaround" gefunden. Ich wollte es euch nur mitteilen, falls jemand mit dem gleichen Fehler kämpft.

  • Ordner überprüfen verschiedene Arbeiten ausführen und das ganze als Dauerschleife

    • Oscar
    • 12. März 2018 um 08:23
    Zitat von Moritz_

    While Sleep(50000);pause und von vorne beginnen
    xml()
    WEnd

    Ganz schlecht!

    Ein Funktionsaufruf ist kein Ersatz für das fehlende GoTo in AutoIt. So, wie Du das machst, wird Dir das Script nach einiger Zeit abstürzen.

    Warum machst Du die Schleife nicht um alle Befehle?

    Code
    Func xml()
        While True
        ; ...
        WEnd
    EndFunc

    Das wäre dann eine Endlosschleife.

  • Treeview Icons einzeln ändern

    • Oscar
    • 10. März 2018 um 14:39

    Achso, ich habe mich noch gefragt, ob Du die Tickets in dem Treeview "sortiert" haben willst?

    Also je nach Status in einem eigenen Ast?

    Wenn ja, dann tausche die Funktion _UpdateTicketTreeview mal gegen diese hier aus:

    AutoIt
    Func _UpdateTicketTreeview() ; zum aktualisieren des Treeviews
        ; Const $OSC_NORMAL = 0, $OSC_ELEDIGT = 1, $OSC_RESERVIERT = 2, $OSC_WICHTIG = 4
        Local $aFiles, $idRoot, $idItem, $aidGroup[UBound($aLegends)], $iFlag
        $aFiles = _FileListToArrayRec($sMailerPath, '*.txt', $FLTAR_FILES + $FLTAR_NOHIDDEN + $FLTAR_NOSYSTEM + $FLTAR_NOLINK, $FLTAR_NORECUR, $FLTAR_NOSORT, $FLTAR_RELPATH)
        If @error Then Return
        _GUICtrlTreeView_BeginUpdate($idTickets)
        _GUICtrlTreeView_DeleteAll($idTickets)
        $idRoot = GUICtrlCreateTreeViewItem(StringRegExpReplace($sMailerPath, '.+\\(.+)\\', '$1'), $idTickets)
        _GUICtrlTreeView_SetIcon($idTickets, $idRoot, 'imageres.dll', 4) ; Icon fuer das oberste Item
        For $i = 0 To UBound($aidGroup) - 1
            $aidGroup[$i] = GUICtrlCreateTreeViewItem($aLegends[$i], $idRoot)
            _GUICtrlTreeView_SetIcon($idTickets, $aidGroup[$i], 'imageres.dll', 4) ; Icon fuer das oberste Item
        Next
        For $i = 1 To $aFiles[0]
            $iFlag = FileRead($sMailerPath & $aFiles[$i], 1) ; das Flag mit dem Status steht an erster Stelle der Datei (einstellig)
            Select ; hoechste Prioritaet nach oben und dann absteigend
                Case BitAND($iFlag, $OSC_ELEDIGT) = $OSC_ELEDIGT
                    $idItem = GUICtrlCreateTreeViewItem($aFiles[$i], $aidGroup[1])
                    _GUICtrlTreeView_SetIcon($idTickets, $idItem, 'imageres.dll', 101)
                Case BitAND($iFlag, $OSC_WICHTIG) = $OSC_WICHTIG
                    $idItem = GUICtrlCreateTreeViewItem($aFiles[$i], $aidGroup[3])
                    _GUICtrlTreeView_SetIcon($idTickets, $idItem, 'imageres.dll', 100)
                Case BitAND($iFlag, $OSC_RESERVIERT) = $OSC_RESERVIERT
                    $idItem = GUICtrlCreateTreeViewItem($aFiles[$i], $aidGroup[2])
                    _GUICtrlTreeView_SetIcon($idTickets, $idItem, 'imageres.dll', 102)
                Case BitAND($iFlag, $OSC_NORMAL) = $OSC_NORMAL
                    $idItem = GUICtrlCreateTreeViewItem($aFiles[$i], $aidGroup[0])
                    _GUICtrlTreeView_SetIcon($idTickets, $idItem, 'imageres.dll', 99)
            EndSelect
        Next
        _GUICtrlTreeView_EndUpdate($idTickets)
        For $idItem In $aidGroup
            GUICtrlSetState($idItem, $GUI_EXPAND)
        Next
        GUICtrlSetState($idRoot, $GUI_EXPAND)
    EndFunc
    Alles anzeigen
  • Probleme mit _FileListToArray()

    • Oscar
    • 10. März 2018 um 14:34

    Füge mal #AutoIt3Wrapper_UseX64=y als erste Zeile in Dein Script ein.

    Im Moment rufst Du es als 32-Bit-Version auf. Auf einem 64-Bit-System musst Du es aber als 64-Bit-Version aufrufen, damit Du alles zu sehen bekommst.

  • Treeview Icons einzeln ändern

    • Oscar
    • 10. März 2018 um 12:26

    Im Example zu GUICtrlCreateGroup wird das so gemacht, dass die Gruppe geschlossen wird. Von daher habe ich mir das so angewöhnt, dieses auch zu tun.

    Ich glaube aber, dass es nur einen Effekt hat, wenn man Radio-Controls verwendet (diese sind dann entsprechend gruppiert).

    In den Remarks steht allerdings nichts davon, dass es erforderlich wäre, die Gruppen zu schliessen. Das weglassen führt also wohl nicht zu einem Speicherleck wegen nicht geschlossener Handles oder so.

  • Basepointer auslesen mit NomadMemory.au3 oder WinAPI.au3

    • Oscar
    • 10. März 2018 um 10:17
    Zitat von alpines

    (Akkustand auf Desktop zeichnen mit Gdi+)

    Dafür habe ich mal eine UDF geschrieben: _GUICtrlBatterieLevel

  • Treeview Icons einzeln ändern

    • Oscar
    • 10. März 2018 um 08:51
    Zitat von mirko2002

    Öffne mal das Dropdown menü, nachdem Du eine datei erstellt hast die keinen markt ausgewählt hat. dann hast du anschließend im dropdownmenü keine einträge mehr zur auswahl.

    Ah, klar! Dann wird ein Leerstring in die Combobox geschrieben.

    Lässt sich aber durch eine kleine Abfrage ohne Neustart lösen. Tausche mal die Funktion "_TicketClick" gegen diese aus:

    AutoIt
    Func _TicketClick() ; wenn auf einen Eintrag im Treeview geklickt wurde
        ; Datei = $iNERW, $sMarkt, $sAbteilung, $sName, $sTelefon, $sBelegnummer, $sAnliegen, $sNotes
        ; $aidOSCinfos[8] 0=Markt, 1=Name KD, 2=Abteilung, 3=Telefon, 4=Belegnummer, 5=Reservierung, 6=Wichtig, 7=Anliegen
        Local $hSelect, $sFilename, $sData, $aData
        $hSelect = _GUICtrlTreeView_GetSelection($idTickets) ; das Handle des ausgewaehlten Items
        $sFilename = _GUICtrlTreeView_GetText($idTickets, $hSelect) ; der Text (Dateiname) des Items
        $sData = FileRead($sMailerPath & $sFilename) ; die Daten aus der Datei lesen
        If $sData = '' Then Return
        $aData = StringSplit($sData, @CRLF, $STR_ENTIRESPLIT + $STR_NOCOUNT) ; am Zeilenende (@CRLF) splitten
        If Not IsArray($aData) Or UBound($aData) <> 9 Then Return
        ; und die Daten in die Eingabefelder eintragen:
        If $aData[1] = '' Then
            _GUICtrlComboBox_SetCurSel($aidOSCinfos[0], -1)
        Else
            GUICtrlSetData($aidOSCinfos[0], $aData[1])
        EndIf
        GUICtrlSetData($aidOSCinfos[1], $aData[3])
        If $aData[2] = '' Then
            _GUICtrlComboBox_SetCurSel($aidOSCinfos[2], -1)
        Else
            GUICtrlSetData($aidOSCinfos[2], $aData[2])
        EndIf
        GUICtrlSetData($aidOSCinfos[3], $aData[4])
        GUICtrlSetData($aidOSCinfos[4], StringTrimRight($sFilename, 4))
        GUICtrlSetState($aidOSCinfos[5], (BitAND($aData[0], $OSC_RESERVIERT) ? $GUI_CHECKED : $GUI_UNCHECKED))
        GUICtrlSetState($aidOSCinfos[6], (BitAND($aData[0], $OSC_WICHTIG) ? $GUI_CHECKED : $GUI_UNCHECKED))
        GUICtrlSetState($idTicketOk, (BitAND($aData[0], $OSC_ELEDIGT) ? $GUI_CHECKED : $GUI_UNCHECKED))
        GUICtrlSetData($aidOSCinfos[7], $aData[6])
        GUICtrlSetData($idNotes, $aData[7])
    EndFunc
    Alles anzeigen

    Edit: Das Gleiche gilt ja auch für die Abteilung (ist ja auch eine Combobox). Script angepasst.

  • Treeview Icons einzeln ändern

    • Oscar
    • 9. März 2018 um 17:39
    Zitat von mirko2002

    Ich weiss nicht mehr weiter

    Dein ganzes Script zu debuggen, ist mir zu aufwendig.

    Ich habe es mal neu geschrieben. Im OnEventMode und ohne diese Restarts des Scripts (wozu sollen die gut sein?).

    Die verschiedenen Statusse (Normal, Erledigt, Reserviert, Wichtig) habe ich in eine Zahl (4 Bits) zusammengefasst.

    Für das Treeview muss man nicht die Riesenfunktion zum Directory einlesen benutzen. Das geht viel kürzer und die Priorität der Icons habe ich jetzt mal so gewählt, wie es mir am logischsten schien.

    Im ZIP-Archiv (im Anhang) befinden sich auch ein paar Beispieldatensätze, sodass Du siehst, dass es mit den verschiedenen Icons durchaus geht.

    Wenn Dir die ganzen Kommentare als Erklärung nicht ausreichen, dann frag einfach. :)

    Dateien

    OSC_Mailer_v1_1.zip 6,17 kB – 247 Downloads
  • _ProgressEx

    • Oscar
    • 8. März 2018 um 19:59

    Danke, für die "Blumen"!

    Solche UDFs sind oft ein Nebenprodukt, weil ich das gerade für ein Projekt brauche.

    Und wenn ihr die UDF auch gebrauchen könnt, dann freut mich das zusätzlich. :)

  • _ProgressEx

    • Oscar
    • 8. März 2018 um 12:26

    Ach ja, schon wieder eine Progressbar. :)

    Ich brauchte etwas Universelleres, als meine bisherigen Progressbars. Vielleicht könnt ihr die UDF ja auch gebrauchen...

    Mit dieser UDF kann man:

    - die Koordinaten auf der GUI frei wählen

    - die Breite und Höhe der Progressbar frei wählen

    - die Progressbar horizontal oder vertikal anzeigen lassen

    - die Farbe der Progressbar frei wählen

    - eine Prozentanzeige anzeigen lassen

    - die Prozentanzeige horizontal oder vertikal anzeigen lassen

    Screenshot:

    _ProgressEx_Screenshot.png

    Dateien

    _ProgressEx_v1_0.zip 3,63 kB – 459 Downloads
  • GDI+, Kleiner Farbverlauf

    • Oscar
    • 6. März 2018 um 19:19
    Zitat von Snake Plissken

    muss es bei Deiner Variablen Deklaration nicht heißen RadToDeg, da wir doch Radianten in Grad umrechnen?

    Nein, wir rechnen mit Grad/Deg (For-Schleife: 0...360). Der Sin-Befehl erwartet den Wert aber in Radian/Rad, deswegen ist DegToRad schon richtig.


    Edit: Wenn Du gerade anfängst Dich mit GDI+ zu beschäftigen, dann solltest Du auch gleich lernen, wie man einen Backbuffer verwendet. Das hat nämlich den Vorteil, dass man die Grafik schnell wieder neuzeichnen kann (beim Restore oder WM_PAINT).

    Außerdem sieht man es nicht, wenn Dein Programm die Grafiken, Linien, Punkte etc. zeichnet, sondern es wird erst die fertige Grafik auf das Fenster gezeichnet:

    AutoIt
    #include <GDIPlus.au3>
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    
    _GDIPlus_Startup()
    Global Const $Pi = 3.141592653589793
    Global Const $fDegToRad = $PI / 180
    Global $iARGB, $aSinColor[360]
    Global $iW = 640, $iH = 160, $iX = 10, $iY = 50, $iLine = 0
    
    For $iDeg = 0 To 359
        $aSinColor[$iDeg] = Int(255 * Sin($iDeg * $fDegToRad))
    Next
    ;~ _ArrayDisplay($aSinColor)
    
    Global $hGui = GUICreate("Einfacher Copper", $iW, $iH)
    GUISetBkColor(0x000000)
    Global $hGraphics = _GDIPlus_GraphicsCreateFromHWND($hGui) ; Graphic vom Fenster erstellen
    Global $hBitmap = _GDIPlus_BitmapCreateFromGraphics($iW, $iH, $hGraphics) ; Backbuffer erstellen
    Global $hGfxCtx = _GDIPlus_ImageGetGraphicsContext($hBitmap) ; Graphic vom Backbuffer
    Global $hPen = _GDIPlus_PenCreate(0xFF000000, 1)
    For $i = 0 To 180 Step 5
        $iARGB = "0xFF0000" & Hex($aSinColor[$i], 2)
        _GDIPlus_PenSetColor($hPen, $iARGB)
        _GDIPlus_GraphicsDrawLine($hGfxCtx, $iX, $iY + $iLine, $iW - $iX, $iY + $iLine, $hPen) ; wir zeichnen in den Backbuffer
        $iLine += 1
    Next
    GUISetState(@SW_SHOW)
    GUIRegisterMsg($WM_PAINT, '_WM_PAINT')
    _GDIPlus_GraphicsDrawImage($hGraphics, $hBitmap, 0, 0) ; hier wird der Backbuffer auf die Graphic des Fensters gezeichnet
    
    While True
        Switch GUIGetMsg()
            Case $GUI_EVENT_CLOSE
                _GDIPlus_PenDispose($hPen)
                _GDIPlus_GraphicsDispose($hGfxCtx)
                _GDIPlus_BitmapDispose($hBitmap)
                _GDIPlus_GraphicsDispose($hGraphics)
                _GDIPlus_Shutdown()
                Exit
            Case $GUI_EVENT_RESTORE
                _GDIPlus_GraphicsDrawImage($hGraphics, $hBitmap, 0, 0) ; beim Restore muss der Backbuffer auch wieder auf das Fenster gezeichnet werden
        EndSwitch
    WEnd
    
    Func _WM_PAINT($hWnd, $iMsg, $wParam, $lParam) ; wenn das Fenster neu gezeichnet werden muss (z.B. weil das Fenster ausserhalb des Desktopbereichs war)
        #forceref $hWnd, $iMsg, $wParam, $lParam
        _GDIPlus_GraphicsDrawImage($hGraphics, $hBitmap, 0, 0) ; den Backbuffer neu zeichnen
        Return $GUI_RUNDEFMSG
    EndFunc
    Alles anzeigen
  • GDI+, Kleiner Farbverlauf

    • Oscar
    • 6. März 2018 um 18:45

    Du musst das auch auf die möglichen Blauwerte (0...255) umrechnen:

    AutoIt
    #include <Array.au3>
    #include <GDIPlus.au3>
    #include <GUIConstantsEx.au3>
    
    Global Const $Pi = 3.141592653589793
    Global Const $fDegToRad = $PI / 180
    Global $iARGB, $aSinColor[360]
    
    Global $hGui = GUICreate("Einfacher Copper", 500, 500)
    GUISetState(@SW_SHOW)
    For $i = 0 To 359
        $aSinColor[$i] = Int(255 * Sin($i * $fDegToRad))
    Next
    ;~ _ArrayDisplay($aSinColor)
    _GDIPlus_Startup()
    $hGraphics = _GDIPlus_GraphicsCreateFromHWND($hGUI)
    $hPen = _GDIPlus_PenCreate(0xFF000000, 1)
    $k = 0
    For $j = 0 To 180 Step 5
        $iARGB = "0xFF0000" & Hex($aSinColor[$j], 2)
        _GDIPlus_PenSetColor($hPen, $iARGB)
        _GDIPlus_GraphicsDrawLine($hGraphics, 0, 50 + $k, 500, 50 + $k, $hPen)
        $k += 1
    Next
    Do
    Until GUIGetMsg() = $GUI_EVENT_CLOSE
    _GDIPlus_PenDispose($hPen)
    _GDIPlus_GraphicsDispose($hGraphics)
    _GDIPlus_Shutdown()
    Alles anzeigen
  • Treeview Icons einzeln ändern

    • Oscar
    • 6. März 2018 um 12:31

    Ich komme da nicht mehr mit! Poste bitte Dein gesamtes Script.

    Dein Script setzt die Icons übrigens nur beim einlesen der Dateien. Es reagiert nicht auf das setzen der Checkboxen.

  • Treeview Icons einzeln ändern

    • Oscar
    • 5. März 2018 um 19:28

    Hast Du denn meine geänderte Funktion aus Post#27 mal ausprobiert?

    Du müsstest dann die Zeile mit dem ContinueCase aktivieren (das ";~" vorne entfernen).

  • Treeview Icons einzeln ändern

    • Oscar
    • 5. März 2018 um 18:42
    Zitat von mirko2002

    soll er aber die Zeile 6 auslesen und auch dort wieder schauen ob Wert 4 oder 1 und auch dort die restlichen Icons anpassen.

    Häh? Was für restliche Icons?

    Das Treeview-Item kann nur ein Icon anzeigen. Wenn es laut Zeile 5 (Wert 4 vorhanden) bereits das Icon Nr. 111 hat, soll es dann laut Zeile 6 ein anderes Icon bekommen, oder was?

    Ich verstehe das jetzt so:

    AutoIt
    Func _GUICtrlTreeView_CreateDirectory($hTreeView, $sPath, $bFiles = False)
        Local $hFileItem, $FolderColor = 0x0000FF, $Folder, $aCount[2] = [0, 0]
        If Not StringInStr(FileGetAttrib($sPath), 'D') Then Return SetError(1, 0, 0)
        $sPath = FileGetLongName($sPath)
        Local $oFSO = ObjCreate('Scripting.FileSystemObject')
        If @error Then Return SetError(2, 0, 0)
        _GUICtrlTreeView_BeginUpdate($hTreeView)
        _GUICtrlTreeView_DeleteAll(GUICtrlGetHandle($hTreeView))
        Local $hTreeViewItem = GUICtrlCreateTreeViewItem($sPath, $hTreeView)
        GUICtrlSetColor(-1, $FolderColor)
        _GUICtrlTreeView_SetIcon($hTreeView, $hTreeViewItem, 'shell32.dll', 134) ;Icon 111
        $Folder = $oFSO.GetFolder($sPath)
        _CreateDirectoryRecursive($hTreeView, $Folder, $hTreeViewItem, $bFiles, $aCount)
        If $bFiles Then
            For $Files In $Folder.Files
                $hFileItem = GUICtrlCreateTreeViewItem($Files.Name, $hTreeViewItem)
                $read_reservierung = FileReadLine($sPath & $Files.Name, 5)
                $read_important = FileReadLine($sPath & $Files.Name, 6)
                Select
                    Case $read_reservierung = 4
                        _GUICtrlTreeView_SetIcon($hTreeView, $hFileItem, 'shell32.dll', 111) ;Icon 111
    ;~                     ContinueCase ; wenn Zeile 6 Vorrang vor Zeile 5 haben soll
                    Case $read_important = 4
                         _GUICtrlTreeView_SetIcon($hTreeView, $hFileItem, 'shell32.dll', 92)
                    Case Else
                         _GUICtrlTreeView_SetIcon($hTreeView, $hFileItem, 'shell32.dll', 5)
                EndSelect
                $aCount[1] += 1
            Next
        EndIf
        _GUICtrlTreeView_SetIcon($hTreeView, $hTreeViewItem, 'shell32.dll', 3, 2)
        _GUICtrlTreeView_SetIcon($hTreeView, $hTreeViewItem, 'shell32.dll', 110, 4)
        _GUICtrlTreeView_EndUpdate($hTreeView)
        GUICtrlSetState($hTreeViewItem, $GUI_EXPAND)
        $oFSO = ''
        Return $aCount
    EndFunc   ;==>_GUICtrlTreeView_CreateDirectory
    Alles anzeigen
  • Treeview Icons einzeln ändern

    • Oscar
    • 5. März 2018 um 17:48
    Zitat von mirko2002

    Er springt nicht in den Else-If Bereich rein, da die Bedingung beim ersten "If" bereits erfüllt ist, daher interessiert ihn der weitere Rest nicht...

    Genau! Du hast es bereits richtig erkannt.

    Also muss die Logik anders aussehen. Da Du aber dazu nichts schreibst, musst Du es halt selbst probieren.

    Vielleicht hilft Dir ja Select weiter? Oder zwei getrennte If-Abfragen?

  • Shutdown wenn Notebook in Akku Betrieb

    • Oscar
    • 5. März 2018 um 14:20

    Du bist seit 2006 hier angemeldet und verstehst Arrays nicht?

    Was hast Du bisher mit AutoIt gemacht?

    Wie wäre es mal mit dem lernen der Grundlagen?

  • Array aus Fileopendialog

    • Oscar
    • 5. März 2018 um 11:07

    Du kannst bei FileOpenDialog nicht einfach Parameter weglassen (Filter) und bei "Init Dir" sollte ein Pfad stehen und nicht der String "Pfad". Alternativ darf es dort ein Leerstring sein (es wird dann das aktuelle WorkingDir benutzt).

    Außerdem gibt FileOpenDialog bei einer Mehrfachauswahl die Dateien durch eine Pipe ("|") getrennt zurück. Wobei am Anfang das Verzeichnis steht und dahinter nur jeweils die Dateinamen.

    Will man alle Dateien in einem Array haben, muss man die Rückgabe etwas bearbeiten:

    AutoIt
    #include <Array.au3>
    #include <FileConstants.au3>
    
    Global $aFiles = _SelectFiles(5)
    _ArrayDisplay($aFiles)
    
    Func _SelectFiles($iSelectCount)
        Do
            Local $sFiles = FileOpenDialog("Bitte wähle die Dateien", '', 'All (*.*)', BitOR($FD_FILEMUSTEXIST, $FD_PATHMUSTEXIST, $FD_MULTISELECT))
            If @error Then Return
            If StringInStr($sFiles, '|') Then
                Local $aTmp = StringSplit($sFiles, '|', 2)
                Local $aFiles[UBound($aTmp) - 1]
                For $i = 1 To UBound($aTmp) - 1
                    $aFiles[$i - 1] = $aTmp[0] & $aTmp[$i]
                Next
            Else
                Local $aFiles[1] = [$sFiles]
            EndIf
            If UBound($aFiles) < $iSelectCount Then MsgBox($MB_ICONERROR + $MB_TOPMOST, "Fehler", "Es wurden zu wenig Dateien ausgewählt!")
        Until UBound($aFiles) >= $iSelectCount
        Return $aFiles
    EndFunc
    Alles anzeigen

Spenden

Jeder Euro hilft uns, Euch zu helfen.

Download

AutoIt Tutorial
AutoIt Buch
Onlinehilfe
AutoIt Entwickler
  1. Datenschutzerklärung
  2. Impressum
  3. Shoutbox-Archiv
Community-Software: WoltLab Suite™