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. Bitnugger

Beiträge von Bitnugger

  • GUICtrlCreateLabel (Box an TextGröße anpassen)

    • Bitnugger
    • 25. November 2018 um 19:29

    Hier eine kleine Demo mit der UDF _StringSize.au3 von Melba23 ...funktioniert allerdings nicht perfekt, wenn die Schriftart kursiv ist, dann fehlt rechts bei einigen ein kleines Stück.

    ReSizeLabel.au3
    C
    ;-- TIME_STAMP   2018-11-25 19:12:47   v 0.1
    
    #include <GUIConstantsEx.au3>
    #include <Array.au3>
    #include <Misc.au3>
    ;~ #include <StringSize.au3> ; wenn die Datei im User-Include-Verzeichnis ist
    #include "StringSize.au3" ; wenn die Datei im Script-Verzeichnis ist
    
    
    Global $g_idButton14, $g_idButton24, $g_idButton32, $g_idButton64, $g_idButton72, $g_idButtonRestore, $g_idLabelSize, $g_idLabelAttrib
    
    Example()
    
    Func Example()
        Local $hGUI = GUICreate("StringSize-Demo", 1010, 270)
    
        Local $sText = 'Ich bin ein Label'
        Local $iSize = 8.5, $iWeight = 800, $iAttrib = 0, $sName = 'Arial', $iWidth = 990
    
        Local $idLabel = GUICtrlCreateLabel($sText, 10, 30, 140, 22)
        GUICtrlSetFont(-1, $iSize, $iWeight, $iAttrib, $sName)
    
        $g_idButton14 = GUICtrlCreateButton("[F2] ReSize Label to 14", 10, 130, 156, 32)
        GUICtrlSetBkColor(-1, 0x5F9EA0)
    
        $g_idButton24 = GUICtrlCreateButton("[F3] ReSize Label to 24", 176, 130, 156, 32)
        GUICtrlSetBkColor(-1, 0x5F9EA0)
    
        $g_idButton32 = GUICtrlCreateButton("[F4] ReSize Label to 32", 342, 130, 156, 32)
        GUICtrlSetBkColor(-1, 0x5F9EA0)
    
        $g_idButton64 = GUICtrlCreateButton("[F5] ReSize Label to 64", 508, 130, 156, 32)
        GUICtrlSetBkColor(-1, 0x5F9EA0)
    
        ; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
        ; Ab Schriftgröße 72 scheint AutoIt bei einigen Fonts arge Probleme zu bekommen - die Buttons reagieren dann mehrere Sekunden nicht mehr!
        ; Mit Schriftgröße 65 fängt es an (bei Arial z.B. nicht) und ab 71 wird es dann arge, doch mit den Accelerators geht es trotzdem... hm...
        ; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
        $g_idButton72 = GUICtrlCreateButton("[F6] ReSize Label to 72", 674, 130, 156, 32)
        GUICtrlSetBkColor(-1, 0xFF0000)
    
        $g_idButtonRestore = GUICtrlCreateButton("[F1] Restore Label Size", 840, 130, 156, 32)
    ;~     GUICtrlSetColor(-1, 0x00FF00)
        GUICtrlSetBkColor(-1, 0xB34EE9)
    
        Local $idChooseFont = GUICtrlCreateButton("Andere Schriftart auswählen...", 10, 170, 986, 32)
    
        GUICtrlCreateLabel('Aktuelle Schrifart', 10, 210, 220, 22)
        GUICtrlSetFont(-1, 14)
    
        $g_idLabelSize = GUICtrlCreateLabel('Size : ' & $iSize, 10, 240, 120, 22)
        GUICtrlSetFont(-1, 11, 400, 0, 'Courier New')
        Local $idLabelWeight = GUICtrlCreateLabel('Weight : ' & $iWeight, 140, 240, 120, 22)
        GUICtrlSetFont(-1, 11, 400, 0, 'Courier New')
    ;~     $bItalic (2), $bUnderline (4), $bStrikethru (8)
    
        $g_idLabelAttrib = GUICtrlCreateLabel('Attrib : ' & $iAttrib & _GetsAttribString($iAttrib), 270, 240, 420, 22)
        GUICtrlSetFont(-1, 11, 400, 0, 'Courier New')
        Local $idLabelName = GUICtrlCreateLabel('Name : ' & $sName, 690, 240, 220, 22)
        GUICtrlSetFont(-1, 11, 400, 0, 'Courier New')
    
        ; Set GUIAccelerators for the button controlIDs
        Local $aAccelKeys[6][2] = [["{F1}", $g_idButtonRestore], ["{F2}", $g_idButton14], ["{F3}", $g_idButton24], ["{F4}", $g_idButton32], ["{F5}", $g_idButton64], ["{F6}", $g_idButton72]]
        GUISetAccelerators($aAccelKeys)
    
        GUISetState(@SW_SHOW)
    
        ; Loop until the user exits.
        While 1
            Switch GUIGetMsg()
                Case $GUI_EVENT_CLOSE
                    ExitLoop
                Case $g_idButton14
                    _SetLabel($idLabel, $sText, 14, $iWeight, $iAttrib, $sName, $iWidth)
                Case $g_idButton24
                    _SetLabel($idLabel, $sText, 24, $iWeight, $iAttrib, $sName, $iWidth)
                Case $g_idButton32
                    _SetLabel($idLabel, $sText, 32, $iWeight, $iAttrib, $sName, $iWidth)
                Case $g_idButton64
                    _SetLabel($idLabel, $sText, 64, $iWeight, $iAttrib, $sName, $iWidth)
                Case $g_idButton72
                    _SetLabel($idLabel, $sText, 72, $iWeight, $iAttrib, $sName, $iWidth) ; <<<<<<<< Buttons reagieren mehrere Sekunden nicht mehr!
                Case $g_idButtonRestore
                    _SetLabel($idLabel, $sText, $iSize, $iWeight, $iAttrib, $sName, $iWidth)
                Case $idChooseFont
                    ; _ChooseFont liefert ein Array zurück, in dem alle Werte als String gespeichert sind.
                    ; _StringSize prüft aber den Typ und will für: $iSize = Number, $iWeight & $iAttrib = Int, $sText = String
                    Local $a_vFont = _ChooseFont("Arial", 8)
                    If @error Then
                        MsgBox($MB_SYSTEMMODAL, "", "Error _ChooseFont: " & @error)
                    Else
    ;~                     $iSize   = Number($a_vFont[3]) ; dann funktioniert _SwitchButtonColor evtl. nicht mehr, weil die neue Schrifgröße nicht gefunden wird.
                        $iWeight = Int($a_vFont[4])
                        $iAttrib = Int($a_vFont[1])
                        ConsoleWrite("! @@ Debug line" & @TAB & @ScriptLineNumber & "   var: $iAttrib --> " & $iAttrib & @CRLF)
                        $sName = $a_vFont[2]
                        GUICtrlSetData($g_idLabelSize, 'Size : ' & $iSize)
                        GUICtrlSetData($idLabelWeight, 'Weight : ' & $iWeight)
                        GUICtrlSetData($g_idLabelAttrib, 'Attrib : ' & $iAttrib & _GetsAttribString($iAttrib))
                        GUICtrlSetData($idLabelName, 'Name : ' & $sName)
                        _SetLabel($idLabel, $sText, $iSize, $iWeight, $iAttrib, $sName, $iWidth)
                    EndIf
            EndSwitch
        WEnd
    EndFunc   ;==>Example
    
    Func _SetLabel($idLabel, $sText, $iSize, $iWeight, $iAttrib, $sName, $iWidth)
        ConsoleWrite('Get StringSize ' & $iSize & ' ...')
        Local $aStringSize = _StringSize($sText, $iSize, $iWeight, $iAttrib, $sName, $iWidth)
        If @error Then
            ConsoleWrite(' Error!' & @CRLF)
            ConsoleWrite("@@ Debug line" & @TAB & @ScriptLineNumber & "   var: $aStringSize --> " & $aStringSize & @CRLF & "!@ " & @TAB & "#Error: " & @error & @TAB & "#Extended: " & @extended & @CRLF)
            ConsoleWrite("$sText   --> " & $sText & @CRLF)
            ConsoleWrite("$iSize   --> " & $iSize & @CRLF)
            ConsoleWrite("$iWeight --> " & $iWeight & @CRLF)
            ConsoleWrite("$iAttrib --> " & $iAttrib & @CRLF)
            ConsoleWrite("$sName   --> " & $sName & @CRLF)
            ConsoleWrite("$iWidth  --> " & $iWidth & @CRLF)
            Return False
        Else
            ConsoleWrite(' Ok!' & @CRLF)
            _SwitchButtonColor($iSize)
            ConsoleWrite('> $aStringSize = ' & _ArrayToString($aStringSize, ', ') & @CRLF)
            GUICtrlSetFont($idLabel, $iSize, $iWeight, $iAttrib, $sName)
            GUICtrlSetData($idLabel, $aStringSize[0])
            GUICtrlSetData($g_idLabelSize, 'Size : ' & $iSize)
            Local $aPos = ControlGetPos(GUICtrlGetHandle($idLabel), '', '')
            ConsoleWrite('> $aPos        = ' & _ArrayToString($aPos, ', ') & @CRLF)
            GUICtrlSetPos($idLabel, $aPos[0], $aPos[1], $aStringSize[2], $aStringSize[3])
            Return True
        EndIf
    
    EndFunc   ;==>_SetLabel
    
    Func _SwitchButtonColor($iSize)
        Local Static $iLastSize, $aButtonIDs = [[14, $g_idButton14], [24, $g_idButton24], [32, $g_idButton32], [64, $g_idButton64], [72, $g_idButton72]]
        Local $idButton = _ArraySearch($aButtonIDs, $iLastSize)
        GUICtrlSetColor($idButton > -1 ? $aButtonIDs[$idButton][1] : $g_idButtonRestore, 0x000000)
        $idButton = _ArraySearch($aButtonIDs, $iSize)
        GUICtrlSetColor($idButton > -1 ? $aButtonIDs[$idButton][1] : $g_idButtonRestore, 0x00FF00)
        $iLastSize = $iSize
    EndFunc   ;==>_SwitchButtonColor
    
    Func _GetsAttribString($iAttrib)
        Local $sAttrib
        If $iAttrib = 0 Then $sAttrib = ''
        If BitAND($iAttrib, 2) Then $sAttrib = 'Italic'
        If BitAND($iAttrib, 4) Then $sAttrib &= ', Underline'
        If BitAND($iAttrib, 8) Then $sAttrib &= ', Strikethru'
        If StringLeft($sAttrib, 2) = ', ' Then $sAttrib = StringTrimLeft($sAttrib, 2)
        If $sAttrib Then $sAttrib = ' (' & $sAttrib & ')'
        Return $sAttrib
    EndFunc   ;==>_GetsAttribString
    Alles anzeigen

    Ab Schriftgröße 72 scheint AutoIt bei einigen Fonts arge Probleme zu bekommen - die Buttons reagieren dann mehrere Sekunden nicht mehr!

    Mit Schriftgröße 65 fängt es an (bei Arial z.B. nicht) und ab 71 wird es dann arge, doch mit den Accelerators geht es trotzdem... hm...

    Dateien

    StringSize.au3 14,19 kB – 244 Downloads
  • Den Namen der aktiven (oder aufrufenden) Function ermitteln

    • Bitnugger
    • 25. November 2018 um 13:27
    Zitat von Code-Jack

    Und ich würde mich SEHR über den entscheidenden Tipp freuen, wie ich der Lite-Version von SciTE diese lästige Auto-Einrückung komplett abgewöhnen kann!

    Suche mal in den Globalen Einstellungen (SciTEGlobal.properties) nach "indent.automatic=1" oder "indent."... oder "# Indentation"... wenn du globale Einstellungen ändern willst, kopierst du sie in die Benutzer-Einstellungen (SciTEUser.properties) und weist ihnen dort den gewünschten Wert zu - z.B.: "indent.automatic=0".

    Bei mir sind diese Dateien hier zu finden:

    c:\Program Files (x86)\AutoIt3\SciTE\SciTEGlobal.properties

    c:\Users\<UserName>\AppData\Local\AutoIt v3\SciTE\SciTEUser.properties

    Du wunderst dich, dass solche Einstellungen nicht im SciTE-Menu zu finden sind? Ganz einfach: Weil sie sehr selten bis niemals geändert werden... du bist also in gewisser Weise eine Anomalie... :rofl:

  • Den Namen der aktiven (oder aufrufenden) Function ermitteln

    • Bitnugger
    • 23. November 2018 um 21:23
    Zitat von Code-Jack

    Ich möchte, für eine formatierte Debug-Ausgabe, den Namen der gerade aktiven Function ermitteln.

    Wie könnte das gehen?

    Lege doch einfach eine globale Variable an, in der du den Namen der jeweils aktiven Funktion speicherst, sobald du sie betrittst.

    Zitat von Code-Jack

    Ist es innerhalb einer Function möglich, zu ermitteln, von welcher "höheren Function" sie aufgerufen wurde?

    Wenn du den Funktionsnamen der übergeordneten Funktion nicht als Parameter übergibst, hast du wohl keine Möglichkeit, ihn zu ermitteln.

    Du kannst aber ein globales Array anlegen, in dem du die Namen der Funktionen ablegst. Beim Betreten einer Funktion fügst du dann den aktuellen Namen hinzu und beim Verlassen entfernst du ihn und alle darauf folgenden wieder aus dem Array.

    So in etwa...

    Code
    ;-- TIME_STAMP   2018-11-23 20:47:26   v 0.1
    
    #Region    ;************ Includes ************
    #Include <Array.au3>
    #EndRegion ;************ Includes ************
    
    
    Global $g_aFuncNames[0]
    
    _ArrayDisplay($g_aFuncNames, '$g_aFuncNames')
    
    _Example()
    
    Func _Example()
        Local Static $sFuncName = '_Example'
        Local $iIndexFuncName = _ArrayAdd($g_aFuncNames, $sFuncName)
    
        _PrintFuncNames($iIndexFuncName)
    
        ; do it...
    
        _Test1()
        _Test2()
        _Test3()
    
        _ArrayDelete($g_aFuncNames, String($iIndexFuncName & '-' & UBound($g_aFuncNames) -1))
    EndFunc
    
    Func _Test1()
        Local Static $sFuncName = '_Test1'
        Local $iIndexFuncName = _ArrayAdd($g_aFuncNames, $sFuncName)
    
        _PrintFuncNames($iIndexFuncName)
    
        ; do it...
    
        _ArrayDelete($g_aFuncNames, String($iIndexFuncName & '-' & UBound($g_aFuncNames) -1))
    EndFunc
    Func _Test2()
        Local Static $sFuncName = '_Test2'
        Local $iIndexFuncName = _ArrayAdd($g_aFuncNames, $sFuncName)
    
        _PrintFuncNames($iIndexFuncName)
    
        ; do it...
    
        _Test1()
    
        _ArrayDelete($g_aFuncNames, String($iIndexFuncName & '-' & UBound($g_aFuncNames) -1))
    EndFunc
    Func _Test3()
        Local Static $sFuncName = '_Test3'
        Local $iIndexFuncName = _ArrayAdd($g_aFuncNames, $sFuncName)
    
        _PrintFuncNames($iIndexFuncName)
    
        ; do it...
    
        _Test1()
        _Test2()
    
        _ArrayDelete($g_aFuncNames, String($iIndexFuncName & '-' & UBound($g_aFuncNames) -1))
    EndFunc
    
    Func _PrintFuncNames($iIndexFuncName)
        Local Static $aFunc = [' es gibt keine uebergeordnete Funktion', ' meine uebergeordnete Funktion ist '], $FO = '%s Ich bin Funktion %s und %s\r\n'
        ConsoleWrite(StringFormat($FO, $iIndexFuncName < 1 ? '>' : '!', $g_aFuncNames[$iIndexFuncName], $iIndexFuncName < 1 ? $aFunc[0] : $aFunc[1] & $g_aFuncNames[$iIndexFuncName -1]))
    EndFunc
    Alles anzeigen
  • Den Background einzelner ListView Elemente ändern

    • Bitnugger
    • 22. November 2018 um 22:24

    Evtl. änderst du noch den Titel dieses Threads...

    Falsch: Den Background einzelner ListBOX Elemente ändern

    Richtig: Den Background einzelner ListView Elemente ändern

    Passender wäre: Hintergrundfarbe einzelner ListView-Items/SubItems ändern

  • Den Background einzelner ListView Elemente ändern

    • Bitnugger
    • 22. November 2018 um 20:20

    Jeep, war schön mit dir... der Nächste bitte... 8o

  • Den Background einzelner ListView Elemente ändern

    • Bitnugger
    • 22. November 2018 um 20:06

    Habe oben im Script noch ein paar Fehler korrigiert...

    Zitat von DasIch

    Moment mal.. Quasi alles was ich hätte machen müssen wäre am Anfang eine Überschrift zu setzen?!

    Ja... und bei ListViewColorsFonts_SetItemColors() eine Spalte (SubItem) angeben, die/dass dann auch existiert - oder -1, um die ganze Zeile zu färben!

    Local $listview = ListViewColorsFonts_SetItemColors($Grp_lstGroupsLeftUser, $i, -1, 0xFF0000) ; set red back colors for the entire item in row $i

  • Den Background einzelner ListView Elemente ändern

    • Bitnugger
    • 22. November 2018 um 19:49
    C
    ;-- TIME_STAMP   2018-11-22 20:05:49   v 0.1
    
    Opt('MustDeclareVars', 1)
    
    #Region ;************ Includes ************
    ;~ #include <ButtonConstants.au3>
    ;~ #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    ;~ #include <GUIListBox.au3>
    ;~ #include <StaticConstants.au3>
    ;~ #include <TabConstants.au3>
    ;~ #include <WindowsConstants.au3>
    ;~ #include <GuiEdit.au3>
    ;~ #include <File.au3>
    ;~ #include <ProgressConstants.au3>
    #include <GuiListView.au3>
    #include <ListViewColorsFonts.au3>
    ;~ #include <GuiListViewEx.au3>
    #EndRegion ;************ Includes ************
    
    Global $frmMain = GUICreate("Active Directory Verwaltung", 791, 598, 191, 127)
    
    #Region Vergleich
    Global $Grp_lblLeftUser = GUICtrlCreateLabel("Zeige Gruppen von: ", 16, 87, 361, 18) ;Label User links
    GUICtrlSetFont(-1, 9, 500, 0, "Arial")
    Global $Grp_txtLeftUser = GUICtrlCreateInput("UserLinks", 16, 104, 121, 22) ;Textfeld User links
    GUICtrlSetFont(-1, 9, 500, 0, "Arial")
    Global $Grp_cmdLeftUserOk = GUICtrlCreateButton("OK", 144, 103, 75, 25) ;OK User links
    GUICtrlSetFont(-1, 9, 500, 0, "Arial")
    
    Global $Grp_lblGroupsLeftUser = GUICtrlCreateLabel("Gruppen", 16, 144, 361, 18)
    GUICtrlSetFont(-1, 9, 500, 0, "Arial")
    Global $Grp_lstGroupsLeftUser = GUICtrlCreateListView("Gruppen", 16, 160, 361, 410, $LVS_SHOWSELALWAYS) ;  GUICtrlCreateList("", 16, 160, 361, 410, BitOR($gui_ss_default_list, $ws_hscroll, $lbs_extendedsel)) ;Liste User Links
    ConsoleWrite("$Grp_lstGroupsLeftUser     --> " & $Grp_lstGroupsLeftUser & @CRLF)
    GUICtrlSetFont(-1, 9, 500, 0, "Arial")
    
    Global $Grp_HiddenLeft = GUICtrlCreateLabel("0", 230, 103, 30, 18)
    ;~ GUICtrlSetState(-1, $GUI_HIDE)
    
    Global $Grp_lblRightUser = GUICtrlCreateLabel("Zeige Gruppen von: ", 400, 87, 361, 18) ;Label User rechts
    GUICtrlSetFont(-1, 9, 500, 0, "Arial")
    Global $Grp_txtRightUser = GUICtrlCreateInput("UserRechts", 400, 104, 121, 22) ;Textfeld User rechts
    GUICtrlSetFont(-1, 9, 500, 0, "Arial")
    Global $Grp_cmdRightUserOk = GUICtrlCreateButton("OK", 528, 103, 75, 25) ;OK User rechts
    GUICtrlSetFont(-1, 9, 500, 0, "Arial")
    
    Global $Grp_lblGroupsRightUser = GUICtrlCreateLabel("Gruppen", 400, 144, 361, 18)
    GUICtrlSetFont(-1, 9, 500, 0, "Arial")
    
    ; Entweder hier für den Parameter "text" den Namen der Spalte (z.B. "Gruppen") mit angeben...
    ; Syntax: GUICtrlCreateListView ( "text", left, top [, width [, height [, style = -1 [, exStyle = -1]]]] )
    Global $Grp_lstGroupsRightUser = GUICtrlCreateListView("Gruppen", 400, 160, 361, 410, $LVS_SHOWSELALWAYS) ; Liste User rechts
    ; ODER... nachträglich eine Spalte hinzufügen... denn wenn das Listview keine Spalten hat, wird auc hnichts angezeigt!!!
    ; Syntax: _GUICtrlListView_AddColumn ( $hWnd, $sText [, $iWidth = 50 [, $iAlign = -1 [, $iImage = -1 [, $bOnRight = False]]]] )
    ;~ _GUICtrlListView_AddColumn($Grp_lstGroupsRightUser, "Gruppen")
    
    ConsoleWrite("$Grp_lstGroupsRightUser    --> " & $Grp_lstGroupsRightUser & @CRLF)
    GUICtrlSetFont(-1, 9, 500, 0, "Arial")
    
    Global $Grp_HiddenRight = GUICtrlCreateLabel("0", 614, 103, 30, 18)
    ;~ GUICtrlSetState(-1, $GUI_HIDE)
    #EndRegion Vergleich
    
    GUISetState(@SW_SHOW, $frmMain)
    
    Global $nMsg
    While 1
        $nMsg = GUIGetMsg(1)
        Switch $nMsg[0]
            Case $GUI_EVENT_CLOSE
                Exit
    
            Case $Grp_cmdLeftUserOk
                _Suche(1) ;Linker Button
    
            Case $Grp_cmdRightUserOk
                _Suche(2) ;Rechter Button
    
        EndSwitch
    WEnd
    
    Func _Suche($iWo)
        ConsoleWrite('@@ (77) :(' & @MIN & ':' & @SEC & ') _Suche()' & @CR) ;### Function Trace
        Switch $iWo
            ;Links
            Case 1
                _GUICtrlListView_DeleteAllItems($Grp_lstGroupsLeftUser)
                Local $sSuche = GUICtrlRead($Grp_txtLeftUser)
                If $sSuche = "" Then
                    MsgBox(0, "", "Bitte einen User auswählen!")
                    GUICtrlSetData($Grp_HiddenLeft, 0)
                Else
                    GUICtrlSetData($Grp_lblGroupsLeftUser, "Gruppen von " & $sSuche)
                    Local $aGroupSearch = ["Gruppe1", "Gruppe2", "Gruppe3", "Gruppe4", "Gruppe5", "Gruppe6"]
    
                    If UBound($aGroupSearch) - 1 < 1 Then
                        MsgBox(0, "", "Keine Gruppen gefunden. Bitte den Usernamen prüfen!")
                        GUICtrlSetData($Grp_HiddenLeft, 0)
                    Else
                        Local $hWo[UBound($aGroupSearch)]
                        For $i = 0 To UBound($aGroupSearch) - 1
                            $hWo[$i] = GUICtrlCreateListViewItem($aGroupSearch[$i], $Grp_lstGroupsLeftUser)
                            ConsoleWrite("$hWo[" & $i & "]           --> " & $hWo[$i] & @CRLF)
                        Next
                        _Compare(0, $hWo)
                    EndIf
                EndIf
    
                ;Rechts
            Case 2
                _GUICtrlListView_DeleteAllItems($Grp_lstGroupsRightUser)
                Local $sSuche = GUICtrlRead($Grp_txtRightUser)
                If $sSuche = "" Then
                    MsgBox(0, "", "Bitte einen User auswählen!")
                    GUICtrlSetData($Grp_HiddenRight, 0)
                Else
                    GUICtrlSetData($Grp_lblGroupsRightUser, "Gruppen von " & $sSuche)
                    Local $aGroupSearch = ["Gruppe1", "Gruppe2", "Gruppe3", "Gruppe5", "Gruppe6"]
    
                    If UBound($aGroupSearch) - 1 < 1 Then
                        MsgBox(0, "", "Keine Gruppen gefunden. Bitte den Usernamen prüfen!")
                        GUICtrlSetData($Grp_HiddenRight, 0)
                    Else
                        Local $hWo[UBound($aGroupSearch)]
                        For $i = 0 To UBound($aGroupSearch) - 1
                            $hWo[$i] = GUICtrlCreateListViewItem($aGroupSearch[$i], $Grp_lstGroupsRightUser)
                            ConsoleWrite("$hWo[" & $i & "]           --> " & $hWo[$i] & @CRLF)
                        Next
                        _Compare(1, $hWo)
                    EndIf
                EndIf
    
        EndSwitch
    EndFunc   ;==>_Suche
    
    Func _Compare($iWo, $hWo)
        ConsoleWrite('@@ (131) :(' & @MIN & ':' & @SEC & ') _Compare()' & @CR) ;### Function Trace
        Local $sListeLinks, $sListeRechts
        Local $aListeLinks, $aListeRechts
    
        ;Wenn links gefüllt ist, setze HiddenLeft Label
        If $iWo = 0 Then
            If _GUICtrlListView_GetItemCount($Grp_lstGroupsLeftUser) > 0 Then
                GUICtrlSetData($Grp_HiddenLeft, 1)
            Else
                GUICtrlSetData($Grp_HiddenLeft, 0)
            EndIf
        EndIf
    
        ;Wenn rechts gefüllt ist, setze HiddenRight Label
        If $iWo = 1 Then
            If _GUICtrlListView_GetItemCount($Grp_lstGroupsRightUser) > 0 Then
                GUICtrlSetData($Grp_HiddenRight, 1)
            Else
                GUICtrlSetData($Grp_HiddenRight, 0)
            EndIf
        EndIf
    
        ;Wenn die Liste links UND die Liste rechts gefüllt ist, führe folgendes aus
        If GUICtrlRead($Grp_HiddenLeft) = 1 And GUICtrlRead($Grp_HiddenRight) = 1 Then
    
            Local $Init = ListViewColorsFonts_Init($Grp_lstGroupsLeftUser, 7) ; $fColorsFonts = 7, ( $iAddRows = 100, $bNative = False )
            ListViewColorsFonts_Init($Grp_lstGroupsRightUser, 7) ; $fColorsFonts = 7, ( $iAddRows = 100, $bNative = False )
    
            ;Linkes Array
            For $i = 0 To _GUICtrlListView_GetItemCount($Grp_lstGroupsLeftUser) - 1
                $sListeLinks = $sListeLinks & _GUICtrlListView_GetItemText($Grp_lstGroupsLeftUser, $i) & ";"
            Next
            $aListeLinks = StringSplit($sListeLinks, ";")
            _ArrayDelete($aListeLinks, UBound($aListeLinks) - 1)
    
            ;Rechtes Array
            For $i = 0 To _GUICtrlListView_GetItemCount($Grp_lstGroupsRightUser) - 1
                $sListeRechts = $sListeRechts & _GUICtrlListView_GetItemText($Grp_lstGroupsRightUser, $i) & ";"
            Next
            $aListeRechts = StringSplit($sListeRechts, ";")
            _ArrayDelete($aListeRechts, UBound($aListeRechts) - 1)
    
            ;Links nach fehlenden Gruppen suchen
            For $i = 1 To UBound($aListeLinks) - 1
                If _ArraySearch($aListeRechts, $aListeLinks[$i]) < 0 Then
    ;~                 $listview = ListViewColorsFonts_SetItemColors($Grp_lstGroupsLeftUser, $i, -1, "0xFF0000") ; Red back color for entire item
    ;~                 MsgBox(0, $i, "Links: " & $aListeLinks[$i])
    ;~                 Local $listview = ListViewColorsFonts_SetItemColors($Grp_lstGroupsLeftUser, $i, 3, 0xFF0000) ; Red back color only for subitem 3
                    Local $listview = ListViewColorsFonts_SetItemColors($Grp_lstGroupsLeftUser, $i, 0, 0xFF0000) ; Red back color only for subitem 3
                    ConsoleWrite("@@ Debug line" & @TAB & @ScriptLineNumber & "   var: $listview --> " & $listview & @CRLF & "!@ " & @TAB & "#Error: " & @error & @CRLF)
                    ; 4 - Invalid listview subitem
    
                    ;Error Msg ausgeben
                    If $listview < 0 Then ConsoleWrite("Error " & @error & @CRLF)
                EndIf
            Next
            ListViewColorsFonts_Redraw($Grp_lstGroupsLeftUser)
    
        EndIf
    EndFunc   ;==>_Compare
    Alles anzeigen

    4 - Invalid listview subitem.png

  • Den Background einzelner ListView Elemente ändern

    • Bitnugger
    • 22. November 2018 um 17:33
    Zitat von DasIch

    Leider behebt es das Problem nicht, da nun seltsamerweise keine Einträge in der Listview erstellt werden. Es läuft kurz durch als würde es die Liste befüllen, diese bleibt jedoch leer.

    Zitat von DasIch

    Ich kriege auch noch immer den Error 2, seltsamerweise

    Du musst schon etwas genauer werden... Error 2... von welcher Funktion?

    Prüfe doch einfach mal nach jedem Funktionsaufruf, was für einen Rückgabewert du bekommst und lasse ihn dir mit ConsoleWrite anzeigen.

    Bsp.:

    Code
    $Grp_lstGroupsLeftUser = GUICtrlCreateListView("", 16, 160, 361, 410)
    ; oder...
    ;~ $Grp_lstGroupsLeftUser = GUICtrlCreateListView("", 16, 160, 361, 410, $LVS_SHOWSELALWAYS)
    ConsoleWrite('$Grp_lstGroupsLeftUser = ' & $Grp_lstGroupsLeftUser & @CRLF)
    
    
    ; usw...

    Falls das auch nicht hilft, dann gib doch einfach mal deinen kompletten Codes raus, damit man dir ohne Glaskugel helfen kann... kannst ihn mir ja als PM schicken, wenn er nicht im Forum landen soll.

  • Den Background einzelner ListView Elemente ändern

    • Bitnugger
    • 22. November 2018 um 16:27
    Zitat von DasIch

    Error ist 2, aber warum, weiß ich leider nicht.

    ; Return values .: Failure - Returns -1 and sets @error:

    ; 1 - This function requires that $fColorsFonts includes 1/2/4

    ; 2 - Listview not found

    ; 3 - Invalid listview item

    ; 4 - Invalid listview subitem

    ; 5 - Too many color parameters

    ; 6 - Invalid color value

    Der Fehler sagt also, dass das Listview nicht gefunden wurde...

    Syntax ........: ListViewColorsFonts_SetItemColors( $idListView, $iItem, $iSubItem = -1, $iBackColor = 0, $iForeColor = 0, $iBackSelect = 0, $iForeSelect = 0, $iBackUnfocus = 0, $iForeUnfocus = 0 )

    Von der Syntax her scheint aber alles ok zu sein... deshalb denke ich, liegt er Fehler bei den Styles, die du beim Erstellen des Listviews verwendest.

    Zitat von DasIch

    $Grp_lstGroupsLeftUser = GUICtrlCreateListView("", 16, 160, 361, 410, BitOR($gui_ss_default_list, $ws_hscroll, $lbs_extendedsel))

    $GUI_SS_DEFAULT_LIST und $LBS_EXTENDEDSEL (Allows multiple items to be selected by using the SHIFT key and the mouse or special key combinations.) sind Styles für eine ListBox, aber nicht für ein Listview!

    $WS_HSCROLL (Creates a window that has a horizontal scroll bar.) würde ich auch weglassen, denn die ScrollBar erscheint automatisch, wenn die Einträge nicht passen.

    ; Control default styles (Listview)

    Global Const $GUI_SS_DEFAULT_LISTVIEW = BitOR($LVS_SHOWSELALWAYS, $LVS_SINGLESEL) ; $LVS_SINGLESEL willst du nicht, also lässt du $GUI_SS_DEFAULT_LISTVIEW weg und nimmst nur $LVS_SHOWSELALWAYS, falls gewünscht.

    Analog passend und richtig wäre demnach:

    $Grp_lstGroupsLeftUser = GUICtrlCreateListView("", 16, 160, 361, 410, $LVS_SHOWSELALWAYS)

    oder...

    $Grp_lstGroupsLeftUser = GUICtrlCreateListView("", 16, 160, 361, 410, BitOr($LVS_SHOWSELALWAYS, $WS_HSCROLL))

    Versuche es mal damit und gib Bescheid, ob es nun klappt...

  • Den Background einzelner ListView Elemente ändern

    • Bitnugger
    • 21. November 2018 um 18:47
    Zitat von DasIch

    Die UDF die du verlinkt hast, ist zwar sehr gut und stark, aber doch "etwas" zu umständlich einzubauen. Oder ich weiß einfach nur nicht, wie.

    Falls noch nicht geschehen, erstellst du ein Verzeichnis für deine eigenen Includes, z.B. Autoit3_MyIncludes. Damit die darin enthaltenen Includes gefunden werden, musst du es in der SciTE-Config (Ctrl+1) bei User Include Folder eintragen.

    Nun entpackst du das Archiv ListViewColorsFonts.7z in ein Verzeichnis mit Namen ListViewColorsFonts.

    Als letzte Aktion kopierst du alle Dateien aus dem Verzeichnis ..\ListViewColorsFonts\UDFs\ in das Verzeichnis ..\Autoit3_MyIncludes\ und startest SciTE dann neu.

    Um die UDF dann zu benutzen, musst du in deinem Fall lediglich drei Zeilen an richtiger Stelle einfügen... hier mal ein Beispiel:

    Code
    #include <ListViewColorsFonts.au3>
    
    ; ...
    
    ListViewColorsFonts_Init($Grp_lstGroupsLeftUser, 7) ; $fColorsFonts = 7, ( $iAddRows = 100, $bNative = False )
    
    ; ...
    
    Local $hWo[UBound($aGroupSearch)]
    For $i = 1 To UBound($aGroupSearch) - 1
        $hWo[$i] = GUICtrlCreateListViewItem(_AD_FQDNToSamAccountName($aGroupSearch[$i]), $Grp_lstGroupsLeftUser)
    Next
    _Compare(0, $hWo)
    
    ; ...
    
    ; Dann sollen einzelne Zellen, nachdem eine Prüfung ob sie in der anderen ListView fehlen, gefärbt werden:
    For $i = 1 To UBound($aListeLinks) - 1
        If _ArraySearch($aListeRechts, $aListeLinks[$i]) < 0 Then
            ListViewColorsFonts_SetItemColors($Grp_lstGroupsLeftUser, $i, -1, 0xFF0000) ; Red back color for entire item
    ;~         ListViewColorsFonts_SetItemColors($Grp_lstGroupsLeftUser, $i, 3, 0xFF0000) ; Red back color only for subitem 3
        EndIf
    Next
    ListViewColorsFonts_Redraw($Grp_lstGroupsLeftUser)
    
    ; ...
    Alles anzeigen
  • ListView füllen und ProgressBar

    • Bitnugger
    • 21. November 2018 um 17:53
    Zitat von Code-Jack

    Übrigens weiß ich nicht, wieso Du so schlechte Werte in der Konsole hast?

    Bin selbst auch sehr erstaunt... zumal ich auf einem AMD Turion(tm) II Neo N54L Dual-Core Processor (Windows 7 Home X64) fast dieselben Werte wie du habe, aber auf meinem Intel i7 920 Quad-Core Processor (Windows 10 Pro X64) so miserable Werte. Auf Windows 10 hatte bis gestern allerdings noch für openfiles das Scannen von lokalen Dateien mit der Option /Local ON aktiviert, was den PC merklich ausbremst. Das Deaktivieren dieser Option hat aber lediglich 1 Sekunde an Geschwindigkeitsgewinn gebracht.

    Kann bitte mal jemand testen, wie schnell es bei ihm auf einem vergleichbaren Quad-Core mit Windows 10 Pro X64 läuft...

    Code
    MEDION ERAZER X7700 D / Windows 10 Pro X64
    Intel i7 920 Quad-Core Processor / NVIDIA GeForce GTX 285
    ! Array $aLV[1600][32] erzeugen...         benoetigte Zeit: 0 Sekunden
    ! Breite/Ausrichtung der Items anpassen... benoetigte Zeit: 1 Sekunden
    ! Array im Listview anzeigen...            benoetigte Zeit: 7 Sekunden
    ! Farben im Listview setzen...             benoetigte Zeit: 2 Sekunden
    
    HP ProLiant MicroServer G7 N54L Server / Windows 7 Home X64
    AMD Turion(tm) II Neo N54L Dual-Core Processor / ATI Mobility Radeon HD 4200 Series (OnBoard-GraKa)
    ! Array $aLV[1600][32] erzeugen...         benoetigte Zeit: 0 Sekunden
    ! Breite/Ausrichtung der Items anpassen... benoetigte Zeit: 1 Sekunden
    ! Array im Listview anzeigen...            benoetigte Zeit: 1 Sekunden
    ! Farben im Listview setzen...             benoetigte Zeit: 1 Sekunden
    Alles anzeigen
  • ListView füllen und ProgressBar

    • Bitnugger
    • 20. November 2018 um 23:13

    Hier mal eine Demo...

    C
    ;-- TIME_STAMP   2018-11-20 23:02:41
    
    #Region    ;************ Includes ************
    ;~ #Include <WindowsConstants.au3>
    ;~ #Include <GuiListView.au3>
    #include <GUIConstantsEx.au3>
    #include <Date.au3>
    #include <GUIConstantsEx.au3>
    #include "..\..\..\UDFs\ListViewColorsFonts.au3"
    ;~ #include "..\..\..\UDFs\GuiListViewEx.au3"
    #EndRegion ;************ Includes ************
    
    ; @ScriptFullPath = 'F:\_Archive\_Programmieren\AutoIt3\UDFs\ListViewColorsFonts\Examples\0) UDF examples\7) ListViewColorsFonts_Redraw\_GUICtrlListView_AddArray.au3'
    
    _GUICtrlListView_AddArray_Demo()
    
    Func _GUICtrlListView_AddArray_Demo()
        #Region - GUI Create
        Local $hGUI = GUICreate('GUICtrlCreateListView', 400, 300, 400, -1, BitOR($GUI_SS_DEFAULT_GUI, $WS_MAXIMIZEBOX, $WS_SIZEBOX), $WS_EX_WINDOWEDGE)
        Local $idLV = GUICtrlCreateListView('Name|Status1|Status2|Status3|Status4|Status5|Status6|Status7|Status8|Status9|Status10|Status11|Status12|Status13|Status14|Status15|Status16|Status17|Status18|Status19|Status20|Status21|Status22|Status23|Status24|Status25|Status26|Status27|Status28|Status29|Status30|Status31', 2, 2, 396, 296)
        GUISetState(@SW_MAXIMIZE)
        #EndRegion
    
        Local $sStartTime = _NowCalc()
        ConsoleWrite('! Array $aLV[1600][32] erzeugen...         ')
        Local $aLV[1600][32], $sAdd
        For $i = 0 To UBound($aLV) -1 Step 1
            $aLV[$i][0] = 'Name' & $i + 1
            For $j = 1 To UBound($aLV, 2) -1 Step 1
                $aLV[$i][$j] = 'Status' & $j
            Next
        Next
        ConsoleWrite('benoetigte Zeit: '&_DateDiff('s', $sStartTime, _NowCalc())&' Sekunden' & @CRLF)
    
        $sStartTime = _NowCalc()
        Local $iAllColSize = 0, $iWidth = 109
        ConsoleWrite('! Breite/Ausrichtung der Items anpassen... ')
        Local $aWJLV = [[$iWidth, 0], [$iWidth, 2], [$iWidth, 2], [$iWidth, 2], [$iWidth, 2], [$iWidth, 2], [$iWidth, 2], [$iWidth, 2], [$iWidth, 2], [$iWidth, 2], [$iWidth, 2], [$iWidth, 2], [$iWidth, 2], [$iWidth, 2], [$iWidth, 2], [$iWidth, 2], [$iWidth, 2], [$iWidth, 2], [$iWidth, 2], [$iWidth, 2], [$iWidth, 2], [$iWidth, 2], [$iWidth, 2], [$iWidth, 2], [$iWidth, 2], [$iWidth, 2], [$iWidth, 2], [$iWidth, 2], [$iWidth, 2], [$iWidth, 2], [$iWidth, 2], [$iWidth, 2], [$iWidth, 2]]
        For $i = 0 To UBound($aWJLV) -1 Step 1
            $iAllColSize += $aWJLV[$i][0]
            _GUICtrlListView_SetColumnWidth($idLV, $i, $aWJLV[$i][0])
            _GUICtrlListView_JustifyColumn($idLV, $i, $aWJLV[$i][1]) ; 0 left, 1 right, 2 center
        Next
        ConsoleWrite('benoetigte Zeit: '&_DateDiff('s', $sStartTime, _NowCalc())&' Sekunden' & @CRLF)
    ;~     $iWidth = 109, $iAllColSize = 3597 --> OK
    ;~     $iWidth = 110, $iAllColSize = 3630 --> BAD HEADER COLOR (Status 31)
    ;~     $iWidth = 150, $iAllColSize = 4950 --> BAD HEADER COLOR (Status 23 to Status 31)
    ;~     https://www.autoitscript.com/forum/topic/181346-colors-and-fonts-in-custom-drawn-listviews-udf-version/?do=findComment&comment=1410417
    
        $sStartTime = _NowCalc()
        ConsoleWrite('! Array im Listview anzeigen...            ')
        _GUICtrlListView_AddArray($idLV, $aLV)
        ConsoleWrite('benoetigte Zeit: '&_DateDiff('s', $sStartTime, _NowCalc())&' Sekunden' & @CRLF)
    
        ; Perform initializations to add colors/fonts to single items/subitems
        ListViewColorsFonts_Init( $idLV, 7 ) ; $fColorsFonts = 7, ( $iAddRows = 100, $bNative = False )
    
        ; Set a green back color for all odd entire items and a yellow back color for all even entire items
        $sStartTime = _NowCalc()
        ConsoleWrite('! Farben im Listview setzen...             ')
        Local $iItemCount = _GUICtrlListView_GetItemCount($idLV)
        For $i = 0 To $iItemCount -1 Step 1
            ListViewColorsFonts_SetItemColors( $idLV, $i, -1, Mod($i, 2) ? 0xCCFFCC : 0xFFFFCC) ; Green or Yellow back color for entire item
        Next
    
        ; Force an update of local variables in drawing function
        ListViewColorsFonts_Redraw( $idLV )
        ConsoleWrite('benoetigte Zeit: '&_DateDiff('s', $sStartTime, _NowCalc())&' Sekunden' & @CRLF)
        ConsoleWrite('> $iAllColSize = ' & $iAllColSize & @CRLF)
    
        #Region - GUI SwitchLoop
        While True
            Switch GUIGetMsg()
                Case $GUI_EVENT_CLOSE
                    Exit
            EndSwitch
        WEnd
        #EndRegion
    EndFunc  ;==>_GUICtrlListView_AddArray_Demo
    Alles anzeigen
    Code: Ausgabe
    ! Array $aLV[1600][32] erzeugen...         benoetigte Zeit: 0 Sekunden
    ! Breite/Ausrichtung der Items anpassen... benoetigte Zeit: 1 Sekunden
    ! Array im Listview anzeigen...            benoetigte Zeit: 8 Sekunden
    ! Farben im Listview setzen...             benoetigte Zeit: 2 Sekunden
  • Forenupdate - November 2018 - Probleme / Anregungen / Feedback - Sammelthread

    • Bitnugger
    • 20. November 2018 um 15:21
    Zitat von autoBert

    Das Einfügen von Zitaten verweigert auch ab und zu den Dienst.

    Das ist mir auch aufgefallen... es wird nicht direkt eingefügt, aber meistens kann ich es dann mit Hilfe des Buttons Zitate einfügen.

    Zitate.png

  • ListView füllen und ProgressBar

    • Bitnugger
    • 20. November 2018 um 01:19
    Zitat von Code-Jack

    Mich wundert, dass ...MapIndexToID laut Hilfe angeblich eine echte, beständige ID zurück liefern soll.

    In der Konsole erscheint bei mir:

    C
    ;-- TIME_STAMP   2018-11-20 01:11:00
    
    #Region    ;************ Includes ************
    #Include <GuiListView.au3>
    #include <GUIConstantsEx.au3>
    #EndRegion ;************ Includes ************
    
    _GUICtrlListView_MapIndexToID_Demo()
    
    Func _GUICtrlListView_MapIndexToID_Demo()
        #Region - GUI Create
        Local $hGUI = GUICreate('GUICtrlCreateListView', 400, 300, 400, -1)
        Local $idLV = GUICtrlCreateListView('Name|Status', 2, 2, 396, 296)
        GUISetState()
        #EndRegion
    
        Local $aLV = [['Name1', 'Status1'], ['Name2', 'Status2'], ['Name3', 'Status3'], ['Name4', 'Status4'], ['Name5', 'Status5'], ['Name6', 'Status6'], ['Name7', 'Status7'], ['Name8', 'Status8'], ['Name9', 'Status9']]
    
        Local $aWJLV = [[250, 0], [140, 2]]
        For $i = 0 To UBound($aWJLV) -1 Step 1
            _GUICtrlListView_SetColumnWidth($idLV, $i, $aWJLV[$i][0])
            _GUICtrlListView_JustifyColumn($idLV, $i, $aWJLV[$i][1]) ; 0 left, 1 right, 2 center
        Next
    
        _GUICtrlListView_AddArray($idLV, $aLV)
    
        Local $aItemIndexID[UBound($aLV)][2]
        For $i = 0 To UBound($aItemIndexID) -1 Step 1
            $aItemIndexID[$i][0] = $i ; Index
            $aItemIndexID[$i][1] = _GUICtrlListView_MapIndexToID($idLV, $i) ; ID
        Next
        _ArrayDisplay($aItemIndexID, '$aItemIndexID', '', 0, Default, 'Index des Items|ID des Items')
        _GUICtrlListView_InsertItem($idLV, 'Insert1', 7) ; <<<<<<<<<<<<<<<
        _GUICtrlListView_AddSubItem($idLV, 7, 'Item1', 1)
        ReDim $aItemIndexID[UBound($aLV) +1][2]
        For $i = 0 To UBound($aItemIndexID) -1 Step 1
            $aItemIndexID[$i][0] = $i ; Index
            $aItemIndexID[$i][1] = _GUICtrlListView_MapIndexToID($idLV, $i) ; ID
        Next
        _ArrayDisplay($aItemIndexID, '$aItemIndexID - after InsertItem', '', 0, Default, 'Index des Items|ID des Items')
    
        #Region - GUI SwitchLoop
        While True
            Switch GUIGetMsg()
                Case $GUI_EVENT_CLOSE
                    Exit
            EndSwitch
        WEnd
        #EndRegion
    EndFunc  ;==>_GUICtrlListView_MapIndexToID_Demo
    Alles anzeigen
    Zitat von Code-Jack

    GUICtrlSetBkColor scheint mit dieser Art von ID jedenfalls ebenfalls unzufrieden zu sein.

    Ich vermute mal, GUICtrlSetBkColor funktioniert wohl nur, wenn das Item mit GUICtrlCreateListViewItem erstellt wurde.

  • Zeilen in Exceltabelle löschen

    • Bitnugger
    • 19. November 2018 um 21:53
    Zitat von Friedhelm39

    Zum Ablauf fehlt mir die _Print.au3. Wo finde ich die?

    Das ist eines von meinen eigenen Includes... brauchst du nicht... diese Zeile (4) kannst du einfach löschen... ich habe es vergessen.

    Zitat von Friedhelm39

    Wenn Du den Script (oder heißt es das Script?) mal noch mit _Excel_RangeRead erweitern solltest, ich wäre daran interessiert.

    Ja, das Script.

    Schau dir doch einfach mal die Beispiele zu _Excel_RangeRead in der AutoIt-Hilfe (F1) an...

    Der Inhalt kann nicht angezeigt werden, da du keine Berechtigung hast, diesen Inhalt zu sehen.

  • ListView füllen und ProgressBar

    • Bitnugger
    • 19. November 2018 um 20:38
    Zitat von Code-Jack

    GUICtrlSetBkColor(-1, 0xFFFFFF) ; Color weiß
    GUICtrlSetBkColor(-1, $GUI_BKCOLOR_LV_ALTERNATE)

    Hihi... nein, also so nicht, denn mit dem zweiten Befehl überschreibst du ja den ersten.

    Quatsch... wird nicht überschrieben, weil $GUI_BKCOLOR_LV_ALTERNATE ein Special Flag ist... finde es aber irgendwie schräg, dass es mit GUICtrlSetBkColor() gesetzt wird... und kein Aas korrigiert mich, wenn ich Müll labere... 8o Für meine Begriffe hätte man sich dieses stiefmütterliche "Feature" sparen können... ich will die Farbe für jedes Item bzw. jede Zelle explizit bestimmen können.

    Zitat von https://c/forum/topic/36545-gui_bkcolor_lv_alternate/

    From the help file

    The special flag $GUI_BKCOLOR_LV_ALTERNATE can be used with Listview control to give alternate background of the ListviewItems lines.

    The odd lines will get the color set by GUICtrlSetBkColor of the Listview control.

    The even lines will get the color set by GUICtrlSetBkColor of the ListviewItem control.

    C
    ;-- TIME_STAMP   2018-11-19 20:25:31   v 0.1
    
    #include <GUIConstants.au3>
    #include <GuiListView.au3>
    
    ;create form
    ;whlt
    $Form1 = GUICreate("AForm1", 370, 270, 193, 115)
    ;create listview
    ;ltwh
    $ListView1 = GUICtrlCreateListView("000000|111111|222222222222222", 10, 10, 350, 250)
    ;set to alternate the colors
    GUICtrlSetBkColor($ListView1, $GUI_BKCOLOR_LV_ALTERNATE)
    
    ;insert item
    $ListView1_0 = GUICtrlCreateListViewItem("aaa|111|nononono", $ListView1) ;set alternate color
    GUICtrlSetBkColor(-1, 0xffff00)
    $ListView1_1 = GUICtrlCreateListViewItem("bbb|222|yes", $ListView1) ;set alternate color
    GUICtrlSetBkColor(-1, 0xffff00)
    $ListView1_2 = GUICtrlCreateListViewItem("ccc|333|nononono", $ListView1)
    GUICtrlSetBkColor(-1, 0xffff00) ;set alternate color
    _GUICtrlListView_SetColumnWidth($listview1, 0, $LVSCW_AUTOSIZE_USEHEADER) ;resize the columns to header
    
    GUISetState(@SW_SHOW)
    
    While 1
        $nMsg = GUIGetMsg()
        Switch $nMsg
            Case $GUI_EVENT_CLOSE
                Exit
        EndSwitch
    WEnd
    Alles anzeigen

    Das Problem dabei ist, dass du dann nicht mehr _GUICtrlListView_AddArray verwenden kannst... aber hier findest du eine alternative Möglichkeit. Den Link zum Download findest du am Ende des ersten Beitrags.

    Schau dir vielleicht zuerst das Beispiel \ListViewColorsFonts\Examples\3) Alternating colors\1) Alternating row colors.au3 an...

  • Zeilen in Exceltabelle löschen

    • Bitnugger
    • 19. November 2018 um 18:59
    Zitat von BananaJoe

    Lass das $RC= weg und schreiben nur $oExcelB.Sheets(1).Activate

    Weil??? ...das nämlich sowas von egal ist!

    Wenn alles so ist, wie es sein sollte, dann liefert $oExcelB.Sheets(1).Activate im Erfolgsfall True und andernfalls False zurück.

    Damit alles so ist, wie es sein sollte, muss bei der Arbeit mit COM-Objekten ein COM-ERROR-HANDLER installiert sein, der auftretende COM-Fehler abfängt, da AutoIt andernfalls abstürzt.

    Die Seite Obj/COM Reference in der AutoIt-Hilfe ist Pflichtlektüre, wenn man mit COM-Objekten arbeiten will!!!

    Im Anhang noch mal das (erweiterte) Beispiel-Script test2.au3 im Archiv, diesmal aber mit COM-ERROR-HANDLER!

    Dateien

    test2.zip 9,52 kB – 5 Downloads
  • _DownloadWithProgress

    • Bitnugger
    • 18. November 2018 um 15:32
    Zitat von Code-Jack

    Kann es eventuell an Windows XP liegen?

    Kann...

    Zitat von sockettools.com


    The latest version of TLS that is supported on the Windows XP platform is TLS 1.0. However, an update is available that will provide support for TLS 1.2.

    https://social.technet.microsoft.com/Forums/en-US/1…forum=itproxpsp

    https://sockettools.com/kb/support-for…-on-windows-xp/

  • _DownloadWithProgress

    • Bitnugger
    • 18. November 2018 um 14:41
    Zitat von Code-Jack

    Und diese funzt nicht:


    Global $sURL = 'https://www.edv-dompteur.de/image/mini/Lichteffekte_500t.jpg'

    Zitat von Oscar

    Hast Du eventuell Probleme mit Deiner Internetverbindung?

    Wenn das der Fall sein sollte, dann hilft die Funktion _InternetSetOptionsW... bewirkt aber auch keine Wunder!

    Bei mir funktioniert es jedenfalls (auch ohne _InternetSetOptionsW) mit beiden Links!

    Code
    #Region    ;************ Includes ************
    #Include <InetConstants.au3>
    #EndRegion ;************ Includes ************
    
    ;-- TIME_STAMP   2018-11-18 14:43:29   v 0.1
    
    Global Const $INTERNET_OPTION_CONNECT_TIMEOUT = 2, $INTERNET_OPTION_RECEIVE_TIMEOUT = 6
    Global $CONNECT_TIMEOUT = 0xFFFFFF, $RECEIVE_TIMEOUT = 0xFFFFFF
    
    Global $sURL, $vInetGet
    
    _Get1('> ohne_InternetSetOptionsW()' & @CRLF)
    _Get2('> ohne_InternetSetOptionsW()' & @CRLF)
    
    _InternetSetOptionsW()
    
    ; ...hier dein Script
    ;~ InetGet(...)
    
    _Get1('> mit_InternetSetOptionsW()' & @CRLF)
    _Get2('> mit_InternetSetOptionsW()' & @CRLF)
    
    Func _Get1($sMsg)
        Local $sSaveAs = StringLeft($sMsg, 5) = '> mit' ? 'mit_selfhtml812.zip' : 'ohne_selfhtml812.zip'
    ;~     Diese URL funzt:
        $sURL = 'http://SunSITE.Informatik.RWTH-Aachen.DE/ftp/pub/packages/SELFHTML/selfhtml812.zip'
        $vInetGet = InetGet($sURL, $sSaveAs, BitOR($INET_FORCERELOAD, $INET_BINARYTRANSFER))
        ConsoleWrite($sMsg & ($vInetGet ? '+ ' & $sSaveAs & ' wurde erfolgreich gespeichert' : '! Fehler beim Herunterladen von ' & $sSaveAs) & @CRLF)
    EndFunc
    
    Func _Get2($sMsg)
        Local $sSaveAs = StringLeft($sMsg, 5) = '> mit' ? 'mit_Lichteffekte_500t.jpg' : 'ohne_Lichteffekte_500t.jpg'
    ;~     Und diese funzt nicht:
        $sURL = 'https://www.edv-dompteur.de/image/mini/Lichteffekte_500t.jpg'
        $vInetGet = InetGet($sURL, $sSaveAs, BitOR($INET_FORCERELOAD, $INET_BINARYTRANSFER))
        ConsoleWrite($sMsg & ($vInetGet ? '+ ' & $sSaveAs & ' wurde erfolgreich gespeichert' : '! Fehler beim Herunterladen von ' & $sSaveAs) & @CRLF)
    EndFunc
    
    Func _InternetSetOptionsW()
        Local $hWININET = DllOpen("wininet.dll"), $hInternet = 0, $aRes, $tTime = DllStructCreate("long")
        DllStructSetData($tTime, 1, $CONNECT_TIMEOUT)
        $aRes = DllCall($hWININET, 'dword', 'InternetSetOptionW', 'int', $hInternet, 'dword', $INTERNET_OPTION_CONNECT_TIMEOUT, "ptr", DllStructGetPtr($tTime), "dword", DllStructGetSize($tTime))
        If @error Or $aRes[0] = 0 Then
            DllCall($hWININET, 'int', 'InternetCloseHandle', 'int', $hInternet)
            DllClose($hWININET)
            ConsoleWrite('! CONNECT_TIMEOUT konnte nicht geändert werden!' & @CRLF)
            Return SetError(1, 0, "")
        EndIf
        ConsoleWrite('+ CONNECT_TIMEOUT wurde geändert!' & @CRLF)
    
        DllStructSetData($tTime, 1, $RECEIVE_TIMEOUT)
        $aRes = DllCall($hWININET, 'int', 'InternetSetOptionW', 'int', $hInternet, 'dword', $INTERNET_OPTION_RECEIVE_TIMEOUT, "ptr", DllStructGetPtr($tTime), "dword", DllStructGetSize($tTime))
        If @error Or $aRes[0] = 0 Then
            DllCall($hWININET, 'int', 'InternetCloseHandle', 'int', $hInternet)
            DllClose($hWININET)
            ConsoleWrite('! RECEIVE_TIMEOUT konnte nicht geändert werden!' & @CRLF)
            Return SetError(1, 0, "")
        EndIf
        ConsoleWrite('+ RECEIVE_TIMEOUT wurde geändert!' & @CRLF)
    
        Return True
    EndFunc  ;==>__InternetSetOptionsW
    Alles anzeigen

    InetGet.png

  • Subclassing und AutoIts interne Nachrichtenverarbeitung

    • Bitnugger
    • 18. November 2018 um 13:19
    Zitat von chesstiger

    Ich präferiere eigentlich die zweitere Möglichkeit, weil die Subclassing-API bei mir immer mal wieder Probleme verursacht hat.

    Das Thema hatten wir doch vor kurzem... Oscar hatte da auch ein Problem damit... im blauen Forum gibt es dazu auch einen Thread.

    Ich arbeite derzeit auch an einem großen Projekt, bei dem ich mehrere Listviews (farbig) und Header (mehrzeilig) mit Subclassing bearbeite und hatte auch arge Probleme damit (Script stürzt ab oder friert ein).

    Der Grund war bei mir folgende Zeilen:

    Return _WinAPI_DefSubclassProc($hWnd, $iMsg, $iWParam, $iLParam)

    Return _WinAPI_CallWindowProc($pOldWndProc, $hWnd, $iMsg, $iWParam, $iLParam)

    Die habe ich durch diese ersetzt und mein Problem war damit gelöst:

    Return DllCall("comctl32.dll", "lresult", "DefSubclassProc", "hwnd", $hWnd, "uint", $iMsg, "wparam", $iWParam, "lparam", $iLParam)[0]

    Return DllCall("user32.dll", "lresult", "CallWindowProc", "ptr", $pOldWndProc, "hwnd", $hWnd, "uint", $iMsg, "wparam", $iWParam, "lparam", $iLParam)[0]

    Zitat von chesstiger

    Nun stehe ich jedoch vor dem Problem, dass beim Ersetzen der WndProc scheinbar AutoIts internes Nachrichtenhandling nicht mehr greift.

    Ja, bin sehr erstaunt, dass es mit WndProc nicht (mehr) geht...

    C: Subclassing_Example_2.au3
    ;-- TIME_STAMP   2018-11-18 11:36:18   v 0.1
    
    #include <WinAPI.au3>
    #include <WinAPIShellEx.au3>
    #include <ButtonConstants.au3>
    #include <WindowsConstants.au3>
    
    Opt("GUIOnEventMode", True)
    $hWnd = GUICreate("Subclassing Example", 600, 400)
    GUISetOnEvent(-3, onClosePressed)
    $cButton1 = GUICtrlCreateButton("Button 1" & @CRLF & "subclassProc2", 0, 0, 200, 200, $BS_MULTILINE)
    GUICtrlSetOnEvent(-1, onButtonPressed)
    $cButton2 = GUICtrlCreateButton("Button 2" & @CRLF & "subclassProc2", 200, 0, 200, 200, $BS_MULTILINE)
    GUICtrlSetOnEvent(-1, onButtonPressed)
    $cButton3 = GUICtrlCreateButton("Button 3" & @CRLF & "subclassProc3", 400, 0, 200, 200, $BS_MULTILINE)
    GUICtrlSetOnEvent(-1, onButtonPressed)
    $cLog = GUICtrlCreateEdit("=== Action Log ===" & @CRLF, 0, 200, 600, 200)
    
    ;subclassing $cButton1
    $hSCCB1 = DllCallbackRegister(subclassProc2, "ptr", "hwnd;uint;wparam;lparam;uint_ptr;dword_ptr")
    $pSCCB1 = DllCallbackGetPtr($hSCCB1)
    _WinAPI_SetWindowSubclass(GUICtrlGetHandle($cButton1), $pSCCB1, 1000, $cButton1)
    ;subclassing $cButton2
    $hSCCB2 = DllCallbackRegister(subclassProc2, "ptr", "hwnd;uint;wparam;lparam;uint_ptr;dword_ptr")
    $pSCCB2 = DllCallbackGetPtr($hSCCB2)
    _WinAPI_SetWindowSubclass(GUICtrlGetHandle($cButton2), $pSCCB2, 1001, $cButton2)
    ;subclassing $cButton3
    $hSCCB3 = DllCallbackRegister(subclassProc3, "ptr", "hwnd;uint;wparam;lparam;uint_ptr;dword_ptr")
    $pSCCB3 = DllCallbackGetPtr($hSCCB3)
    _WinAPI_SetWindowSubclass(GUICtrlGetHandle($cButton3), $pSCCB3, 1002, $cButton3)
    ;exit routine to free resources
    OnAutoItExitRegister(onExitApp)
    GUISetState()
    
    While True
        Sleep(20)
    WEnd
    
    Func onClosePressed()
        Exit
    EndFunc
    
    Func onButtonPressed()
        writeLog("AutoIt: Button with ID " & @GUI_CtrlId & " pressed!")
    EndFunc
    
    Func onExitApp()
        _WinAPI_RemoveWindowSubclass(GUICtrlGetHandle($cButton3), $pSCCB3, 1002)
        DllCallbackFree($hSCCB3)
        _WinAPI_RemoveWindowSubclass(GUICtrlGetHandle($cButton2), $pSCCB2, 1001)
        DllCallbackFree($hSCCB2)
        _WinAPI_RemoveWindowSubclass(GUICtrlGetHandle($cButton1), $pSCCB1, 1000)
        DllCallbackFree($hSCCB1)
    EndFunc
    
    Func writeLog($s)
    ;~     GUICtrlSetData($cLog, GUICtrlRead($cLog) & @CRLF & StringFormat("[%02d:%02d:%02d.%03d] %s", @HOUR, @MIN, @SEC, @MSEC, $s))
        GUICtrlSetData($cLog, StringFormat("[%02d:%02d:%02d.%03d] %s\r\n", @HOUR, @MIN, @SEC, @MSEC, $s), 1)
    EndFunc
    
    ;external called functions
    
    Func subclassProc2($hWnd, $iMsg, $iWParam, $iLParam, $iID, $pData)
        If $iMsg = $WM_LBUTTONDOWN Then
            Local $sButton = ($pData = $cButton1 ? '$cButton1' : '$cButton2')
            writeLog("subclassProc2: Button " & $sButton & " pressed ")
        EndIf
    ;~     Return _WinAPI_DefSubclassProc($hWnd, $iMsg, $iWParam, $iLParam)
        Return DllCall("comctl32.dll", "lresult", "DefSubclassProc", "hwnd", $hWnd, "uint", $iMsg, "wparam", $iWParam, "lparam", $iLParam)[0]
    EndFunc
    
    Func subclassProc3($hWnd, $iMsg, $iWParam, $iLParam, $iID, $pData)
        If $iMsg = $WM_LBUTTONDOWN Then writeLog("subclassProc3: Button pressed  $cButton3 = " & $cButton3 & "  $pData = " & $pData)
    ;~     Return _WinAPI_DefSubclassProc($hWnd, $iMsg, $iWParam, $iLParam)
        Return DllCall("comctl32.dll", "lresult", "DefSubclassProc", "hwnd", $hWnd, "uint", $iMsg, "wparam", $iWParam, "lparam", $iLParam)[0]
    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™