2 Listviews "verbinden"

  • Hallo,

    Ich habe 2 Listview´s in meinem GUI, in einem stehen Benutzernamen, in dem anderen die Werte zu den Benutzern. Ich musste 2 Listviews nehmen, damit man immer den Benutzernamen hat, wärend man sich die Werte zu ihm ansieht.

    Nun sind aber mehr Benutzer hinzu gekommen, sodass bei beiden Listviews ein Scrollbalken entstanden ist.
    Gibt es die Möglichkeit, die beiden Controls zu verbinden, sodas wenn in einem der Scrollbalken benutzt wird, auch im anderen fenster synchron gescrollt wird?

    Wäre für jede Hilfe dankbar

    MfG TheLuBu

    • Offizieller Beitrag

    Ja, das geht. Zeig mal dein Script, dann kann man es einbauen.

  • Hier der Auszug des GUI´s

    Spoiler anzeigen
    [autoit]

    $Agentview = GUICreate("Tabbed Monitoring Dialog", 407, 438, 193, 85)
    $PageControl1 = GUICtrlCreateTab(8, 8, 396, 384,$WS_VSCROLL)
    GUICtrlSetResizing(-1, $GUI_DOCKWIDTH+$GUI_DOCKHEIGHT)
    ReDim $Tabs[UBound($Kampcode)]
    ReDim $Listview[UBound($Kampcode)]
    ReDim $Listview2[UBound($Kampcode)]
    ReDim $Kampkennzahl[UBound($Kampcode)]
    $Zeile = UBound($newArray) -1
    For $i = 1 To UBound($Kampcode) - 1
    $Tabs[$i] = GUICtrlCreateTabItem($Kampcode[$i][2])
    $data = StringSplit($AgentKamp[$i], "|")
    $Listview2[$i] = GUICtrlCreateListView("Agent ", 16, 160, 128, 224, -1, BitOR($LVS_EX_FULLROWSELECT,$LVS_EX_TRACKSELECT))
    GUICtrlSetBkColor($Listview2[$i], 0xFFFFFF)
    GUICtrlSetBkColor($Listview2[$i], $GUI_BKCOLOR_LV_ALTERNATE)
    For $k = 2 To $data[0]
    GUICtrlCreateListViewItem($data[$k], $Listview2[$i])
    GUICtrlSetBkColor(-1, 0xFFDEAD)
    Next
    $Listview[$i] = GUICtrlCreateListView("Kontakte Gesamt|Kontaktzeit|ø-Kontakt-Zeit|Gespräche/Kontakte", 145, 160, 238, 224, -1, BitOR($LVS_EX_FULLROWSELECT,$LVS_EX_TRACKSELECT))
    GUICtrlSetBkColor($Listview[$i], 0xFFFFFF)
    GUICtrlSetBkColor($Listview[$i], $GUI_BKCOLOR_LV_ALTERNATE)
    For $k = 2 To $data[0]
    $Agent = _Array2DSearch($newArray, " "&$data[$k], -1, 0, 0, 0, False, True)
    $a = StringSplit($Agent[0], "|")
    If $a[1] <> -1 Then
    GUICtrlCreateListViewItem($newArray[$a[1]][$s1[2]]&" "&$newArray[$Zeile][$s1[2]]&"|"&$newArray[$a[1]][$s2[2]]&" "&$newArray[$Zeile][$s2[2]]&"|"&$newArray[$a[1]][$s3[2]]&" "&$newArray[$Zeile][$s3[2]]&"|"&$newArray[$a[1]][$s4[2]]&" "&$newArray[$Zeile][$s4[2]], $Listview[$i])
    GUICtrlSetBkColor(-1, 0xFFDEAD)
    Else
    GUICtrlCreateListViewItem("0|0|0|0", $Listview[$i])
    GUICtrlSetBkColor(-1, 0xFFDEAD)
    EndIf
    Next
    Next
    GUICtrlCreateTabItem("")

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

    $Button1 = GUICtrlCreateButton("&OK", 94, 408, 75, 25, $WS_GROUP)
    $Button2 = GUICtrlCreateButton("&Cancel", 174, 408, 75, 25, $WS_GROUP)
    $Button3 = GUICtrlCreateButton("&Help", 256, 408, 75, 25, $WS_GROUP)
    GUISetState(@SW_SHOW)

    [/autoit]
  • Hallo

    schau dir das Beispiel zu

    [autoit]

    _GUICtrlListView_EnsureVisible

    [/autoit]

    an. Das ist die Lösung wenn beide LVs vom Index her identisch aufgebaut sind. Mit

    [autoit]

    _GUICtrlListView_SetItemFocused

    [/autoit]

    kannst du dann auch in der 2. LV den Focus setzen,

    mfg autoBert


  • Aber welchen

    [autoit]

    Case

    [/autoit]

    muss ich denn dafür nutzen? Ich muss ja das GUI drauf warten lassen, das sich entweder die Scrollbalken bewegen oder das eine Zeile ausgewählt wird. Aber mit welcher Fnktion kriege ich das raus?

  • Wie kann ich denn herausfinden, welches Item angewählt ist? Die 2 Funktionen funktionieren ja nur, wenn man sie auf ein bestimmtes Item ($iIndex) anwendet, nicht auf die gesamte Listview.

  • Zitat von Hilfe

    GUICtrlRead

    Liest den Status oder die Daten eines Controls.
    ...
    Typ Wert
    ListView Control-ID des ausgewählten Listeneintrags. 0 bedeutet, dass kein Eintrag ausgewählt ist.

    mfg autoBert

  • OK jetzt hab ichs auch verstanden :D

    [autoit]

    Case $Listview2
    $ID = GuiCtrlRead($Listview2)
    _GUICtrlListView_GetItemFocused($Listview, $ID)
    _GUICtrlListView_EnsureVisible($Listview, $ID)
    Case $Listview
    $ID = GuiCtrlRead($Listview)
    _GUICtrlListView_GetItemFocused($Listview2, $ID)
    _GUICtrlListView_EnsureVisible($Listview2, $ID)

    [/autoit]

    Ich denke so meintest du es autobert, oder?
    Ich habe jetzt allerdings das Problem, da $Listview und $Listview2 Arrays sind ( Es werden in jedem Tab des GUI´s 2 stück erstellt, und die Tabs sind auch variabel), das ich nicht weiß wie ich für eine Variable Anzahl die Cases erstellt (bereits mit For ... Next versucht, geht nicht)

    • Offizieller Beitrag

    Du könntest es dir und uns einfacher machen, wenn du ein einigermaßen Lauffähiges Beispiel postest.
    Am besten mit Beispieldaten.

    Zitat

    Ich habe jetzt allerdings das Problem, da $Listview und $Listview2 Arrays sind ( Es werden in jedem Tab des GUI´s 2 stück erstellt, und die Tabs sind auch variabel), das ich nicht weiß wie ich für eine Variable Anzahl die Cases erstellt (bereits mit For ... Next versucht, geht nicht)

    Mit dieser Aussage kann man leider nix anfangen, was haben jetzt die 2 Array's mit den Listviews zu tun?
    Werden die Listviews per Array befüllt? Welches Format hat dein Listview?
    Sorry, aber solche Aussagen sind etwas für einen Wahrsager.
    Ich frage mich warum man dir alle Informationen aus der Nase ziehen muß?

  • Hat etwas gedauert, die Dummy Daten zu schreiben
    Im 2ten Tab sieht man wie es momentan bei mir ist, und das möchte ich eben ändern, aber für alle Tabs.

    Spoiler anzeigen
    [autoit]

    #include <ButtonConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <TabConstants.au3>
    #include <WindowsConstants.au3>
    #include <ListviewConstants.au3>
    #Include <GuiListView.au3>
    #include <Date.au3>

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

    Global $Kampcode[15][3], $newarray[15][15], $AgentKamp[15]

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

    $Datumsplitnow = StringSplit(_NowCalcDate(), "/")
    $iDay = $Datumsplitnow[3]
    $iMonth = $Datumsplitnow[2]
    $iYear = $Datumsplitnow[1]
    $Yearsplit = StringSplit($iYear, "")
    $DatumJJ = $Yearsplit[3] & $Yearsplit[4]

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

    For $i = 1 To 14
    For $k = 1 To 14
    $newarray[$i][$k] = Random(0, 1000)
    Next
    Next
    $newarray[8][13] = "alle abschließend bearbeiteten Agenten-Kontakte ohne falsche Nummer, Fax und Anrufbeantworter"
    $newarray[12][12] = "Zeitdauer, die der Agent im Client angemeldet war (Differenz zwischen Client-Logout und Client-Login)"
    $newarray[14][11] = "Abschluss mit Ergebnis ABL: Ablehnung"
    $newarray[11][9] = "Abschluss mit Ergebnis OK"
    $newarray[1][1] = "A"
    $newarray[2][1] = "B"
    $newarray[3][1] = "C"
    $newarray[4][1] = "D"
    $newarray[5][1] = "E"
    $newarray[6][1] = "F"
    $newarray[7][1] = "G"
    $newarray[8][1] = "H"
    $newarray[9][1] = "I"
    $newarray[10][1] = "J"
    $newarray[11][1] = "K"
    $newarray[12][1] = "L"
    $newarray[13][1] = "M"
    $newarray[14][1] = "N"
    $AgentKamp[1] = "|A|B|C|D|E|F|G|"
    $AgentKamp[2] = "|A|B|C|D|E|F|G|H|I|J|K|L|M"
    $AgentKamp[3] = "|A|B|C|D|E|F|G|"
    $AgentKamp[4] = "|A|B|C|D|E|F|G|"
    $AgentKamp[5] = "|A|B|C|D|E|F|G|"
    $AgentKamp[6] = "|A|B|C|D|E|F|G|H|I|J|K|L|M|N|"
    $AgentKamp[7] = "|A|B|C|D|E|F|G|"
    $AgentKamp[8] = "|A|B|C|D|E|F|G|"
    $AgentKamp[9] = "|A|B|C|D|E|F|G|"
    $AgentKamp[10] = "|A|B|C|D|E|F|G|H|I|J|K|L|M|N|"
    $AgentKamp[11] = "|A|B|C|D|E|F|G|"
    $AgentKamp[12] = "|A|B|C|D|E|F|G|H|I|J|K|L|M|N|"
    $AgentKamp[13] = "|A|B|C|D|E|F|G|"
    $AgentKamp[14] = "|A|B|C|D|E|F|G|"

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

    $Kampcode[1][2] = 'DE_TL_HSP_' & $iMonth & '_' & $DatumJJ
    $Kampcode[2][2] = 'DE_TL_SPP_' & $iMonth & '_' & $DatumJJ
    $Kampcode[3][2] = 'DE_TL_TAF_' & $iMonth & '_' & $DatumJJ
    $Kampcode[4][2] = 'DE_TL_TMD_' & $iMonth & '_' & $DatumJJ
    $Kampcode[5][2] = 'DE_TL_VF_' & $iMonth & '_' & $DatumJJ
    $Kampcode[6][2] = 'DE_ZK_Haupt_' & $iMonth & '_' & $DatumJJ
    $Kampcode[7][2] = 'DE_ZK_CC_' & $iMonth & '_' & $DatumJJ
    $Kampcode[8][2] = 'DE_ZK_O2_' & $iMonth & '_' & $DatumJJ
    $Kampcode[9][2] = 'DE_ZK_O2_CC_' & $iMonth & '_' & $DatumJJ
    $Kampcode[10][2] = 'MC_HSP_' & $iMonth & '_' & $DatumJJ
    $Kampcode[11][2] = 'MC_SPO_' & $iMonth & '_' & $DatumJJ
    $Kampcode[12][2] = 'MC_TAF_' & $iMonth & '_' & $DatumJJ
    $Kampcode[13][2] = 'MC_TMD_WOP_NOP_' & $iMonth & '_' & $DatumJJ
    $Kampcode[14][2] = 'MC_VF_WOP_NOP_' & $iMonth & '_' & $DatumJJ

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

    Dim $Tabs[UBound($Kampcode)]
    Dim $Listview[UBound($Kampcode)]
    Dim $Listview2[UBound($Kampcode)]
    Dim $hListView[UBound($Kampcode)]
    Dim $hListView2[UBound($Kampcode)]
    Dim $Kampkennzahl[UBound($Kampcode)]

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

    $Agentview = GUICreate("Tabbed Monitoring Dialog", 407, 438, 193, 85)
    $PageControl1 = GUICtrlCreateTab(8, 8, 396, 384, $WS_VSCROLL)
    GUICtrlSetResizing(-1, $GUI_DOCKWIDTH + $GUI_DOCKHEIGHT)
    $Zeile = UBound($newArray) - 1
    #Region Suche
    $KontaktGesamt = _Array2DSearch($newArray, "alle abschließend bearbeiteten Agenten-Kontakte ohne falsche Nummer, Fax und Anrufbeantworter", -1, UBound($newArray) - 2, 0, 0, False, True)
    $s1 = StringSplit($KontaktGesamt[0], "|")

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

    $Kontaktzeit = _Array2DSearch($newArray, "Zeitdauer, die der Agent im Client angemeldet war (Differenz zwischen Client-Logout und Client-Login)", -1, UBound($newArray) - 2, 0, 0, False, True)
    $s2 = StringSplit($Kontaktzeit[0], "|")

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

    $Kontaktdurchschnitt = _Array2DSearch($newArray, "Abschluss mit Ergebnis ABL: Ablehnung", -1, UBound($newArray) - 2, 0, 0, False, True)
    $s3 = StringSplit($Kontaktdurchschnitt[0], "|")

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

    $Pausenzeit = _Array2DSearch($newArray, "Abschluss mit Ergebnis OK", -1, UBound($newArray) - 2, 0, 0, True, False)
    #EndRegion Suche
    For $i = 1 To UBound($Kampcode) - 1
    $Tabs[$i] = GUICtrlCreateTabItem($Kampcode[$i][2])
    $data = StringSplit($AgentKamp[$i], "|")
    $Listview2[$i] = GUICtrlCreateListView("Agent ", 16, 160, 128, 224, -1, BitOR($LVS_EX_FULLROWSELECT, $LVS_EX_TRACKSELECT))
    ;~ $hListView2[$i] = GUICtrlGetHandle($ListView2[$i])
    GUICtrlSetBkColor($Listview2[$i], 0xFFFFFF)
    GUICtrlSetBkColor($Listview2[$i], $GUI_BKCOLOR_LV_ALTERNATE)
    For $k = 2 To $data[0]
    GUICtrlCreateListViewItem($data[$k], $Listview2[$i])
    GUICtrlSetBkColor(-1, 0xFFDEAD)
    Next
    $Listview[$i] = GUICtrlCreateListView("Nettokontakt|Netto pro h|Annahmen|Ablehnung|Quote", 145, 160, 238, 224, -1, BitOR($LVS_EX_FULLROWSELECT, $LVS_EX_TRACKSELECT))
    ;~ $hListView[$i] = GUICtrlGetHandle($ListView[$i])

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

    GUICtrlSetBkColor($Listview[$i], 0xFFFFFF)
    GUICtrlSetBkColor($Listview[$i], $GUI_BKCOLOR_LV_ALTERNATE)
    For $k = 2 To $data[0]
    $Agent = _Array2DSearch($newArray, " " & $data[$k], -1, 0, 0, 0, False, True)
    $a = StringSplit($Agent[0], "|")
    If $a[1] <> -1 Then

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

    $Annahme = "0"
    For $e = 1 To UBound($Pausenzeit) - 1
    $s4 = StringSplit($Pausenzeit[$e], "|")
    $Annahme += $newArray[$a[1]][$s4[2]]
    Next
    $Quote = $Annahme / $newArray[$a[1]][$s1[2]] * 100
    $Quote = Round ( $Quote , 2 )
    $Kontaktproh = $newArray[$a[1]][$s1[2]] / $newArray[$a[1]][$s2[2]] * 60
    $Kontaktproh = Round ( $Kontaktproh , 2 )

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

    GUICtrlCreateListViewItem($newArray[$a[1]][$s1[2]] & "|" & $Kontaktproh & "|" & $Annahme & "|" & $newArray[$a[1]][$s3[2]] & "|" & $Quote, $Listview[$i])
    GUICtrlSetBkColor(-1, 0xFFDEAD)
    Else
    GUICtrlCreateListViewItem("0|0|0|0|0", $Listview[$i])
    GUICtrlSetBkColor(-1, 0xFFDEAD)
    EndIf
    Next
    Next
    GUICtrlCreateTabItem("")

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

    $Button1 = GUICtrlCreateButton("&OK", 94, 408, 75, 25, $WS_GROUP)
    $Button2 = GUICtrlCreateButton("&Cancel", 174, 408, 75, 25, $WS_GROUP)
    $Button3 = GUICtrlCreateButton("&Help", 256, 408, 75, 25, $WS_GROUP)
    GUISetState(@SW_SHOW)

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    GUISetState(@SW_HIDE)
    GUIDelete($Agentview)
    ExitLoop
    Case $Button1
    GUISetState(@SW_HIDE)
    GUIDelete($Agentview)
    ExitLoop
    Case $Button2
    GUISetState(@SW_HIDE)
    GUIDelete($Agentview)
    ExitLoop
    Case $Button3
    GUISetState(@SW_HIDE)
    GUIDelete($Agentview)
    ExitLoop

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

    EndSwitch
    ;~ For $i = 1 To UBound($Listview2)
    ;~ if _GUICtrlListView_GetTopIndex($hListView[$i])<_GUICtrlListView_GetTopIndex($hListView2[$i]) then
    ;~ _GUICtrlListView_Scroll($hListView2[$i], 0, -12)
    ;~ elseif _GUICtrlListView_GetTopIndex($hListView[$i])>_GUICtrlListView_GetTopIndex($hListView2[$i]) then
    ;~ _GUICtrlListView_Scroll($hListView2[$i], 0, +12)
    ;~ EndIf
    ;~ Next
    WEnd

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

    Func _Array2DSearch($avArray, $vWhat2Find, $iDim=-1, $iStart=0, $iEnd=0, $iCaseSense=0, $fPartialSearch=False, $1stFound=False)
    Local $error = 0, $1D, $arFound[1]=[0]
    If $1stFound Then $arFound[0] = -1
    If ( Not IsArray($avArray) ) Then
    SetError(1)
    Return 0
    EndIf
    Local $UBound2nd = UBound($avArray,2)
    If @error = 2 Then $1D = True
    If ( $iEnd = 0 ) Or ( $iEnd = -1 ) Then $iEnd = UBound($avArray)-1
    If $iStart = -1 Then $iStart = 0
    If $iCaseSense = -1 Then $iCaseSense = 0
    If $iCaseSense <> 0 Then $iCaseSense = 1
    Select
    Case ( $iDim > $UBound2nd ) Or ( $iDim < -1 )
    $error += 2
    Case ( $iStart < 0 ) Or ( $iStart > UBound($avArray)-1 )
    $error += 4
    Case ( $iEnd < $iStart ) Or ( $iEnd > UBound($avArray)-1 )
    $error += 8
    EndSelect
    If $error <> 0 Then
    SetError($error)
    Return 0
    EndIf
    If $fPartialSearch <> True Then $fPartialSearch = False
    If $1D Then
    For $i = $iStart To $iEnd
    Select
    Case $iCaseSense = 0 And (Not $fPartialSearch)
    If $avArray[$i] = $vWhat2Find Then
    If $1stFound Then
    $arFound[0] = $i
    Return $arFound
    Else
    ReDim $arFound[UBound($arFound)+1]
    $arFound[UBound($arFound)-1] = $i
    $arFound[0] += 1
    EndIf
    EndIf
    Case $iCaseSense = 1 And (Not $fPartialSearch)
    If $avArray[$i] == $vWhat2Find Then
    If $1stFound Then
    $arFound[0] = $i
    Return $arFound
    Else
    ReDim $arFound[UBound($arFound)+1]
    $arFound[UBound($arFound)-1] = $i
    $arFound[0] += 1
    EndIf
    EndIf
    Case $iCaseSense = 0 And $fPartialSearch
    If StringInStr($avArray[$i], $vWhat2Find) Then
    If $1stFound Then
    $arFound[0] = $i
    Return $arFound
    Else
    ReDim $arFound[UBound($arFound)+1]
    $arFound[UBound($arFound)-1] = $i
    $arFound[0] += 1
    EndIf
    EndIf
    Case $iCaseSense = 1 And $fPartialSearch
    If StringInStr($avArray[$i], $vWhat2Find, 1) Then
    If $1stFound Then
    $arFound[0] = $i
    Return $arFound
    Else
    ReDim $arFound[UBound($arFound)+1]
    $arFound[UBound($arFound)-1] = $i
    $arFound[0] += 1
    EndIf
    EndIf
    EndSelect
    Next
    Else
    For $i = $iStart To $iEnd
    If $iDim = -1 Then
    Select
    Case $iCaseSense = 0 And (Not $fPartialSearch)
    For $k = 0 To $UBound2nd-1
    If $avArray[$i][$k] = $vWhat2Find Then
    If $1stFound Then
    $arFound[0] = $i & '|' & $k
    Return $arFound
    Else
    ReDim $arFound[UBound($arFound)+1]
    $arFound[UBound($arFound)-1] = $i & '|' & $k
    $arFound[0] += 1
    EndIf
    EndIf
    Next
    Case $iCaseSense = 1 And (Not $fPartialSearch)
    For $k = 0 To $UBound2nd-1
    If $avArray[$i][$k] == $vWhat2Find Then
    If $1stFound Then
    $arFound[0] = $i & '|' & $k
    Return $arFound
    Else
    ReDim $arFound[UBound($arFound)+1]
    $arFound[UBound($arFound)-1] = $i & '|' & $k
    $arFound[0] += 1
    EndIf
    EndIf
    Next
    Case $iCaseSense = 0 And $fPartialSearch
    For $k = 0 To $UBound2nd-1
    If StringInStr($avArray[$i][$k], $vWhat2Find) Then
    If $1stFound Then
    $arFound[0] = $i & '|' & $k
    Return $arFound
    Else
    ReDim $arFound[UBound($arFound)+1]
    $arFound[UBound($arFound)-1] = $i & '|' & $k
    $arFound[0] += 1
    EndIf
    EndIf
    Next
    Case $iCaseSense = 1 And $fPartialSearch
    For $k = 0 To $UBound2nd-1
    If StringInStr($avArray[$i][$k], $vWhat2Find, 1) Then
    If $1stFound Then
    $arFound[0] = $i & '|' & $k
    Return $arFound
    Else
    ReDim $arFound[UBound($arFound)+1]
    $arFound[UBound($arFound)-1] = $i & '|' & $k
    $arFound[0] += 1
    EndIf
    EndIf
    Next
    EndSelect
    Else
    Select
    Case $iCaseSense = 0 And (Not $fPartialSearch)
    If $avArray[$i][$iDim] = $vWhat2Find Then
    If $1stFound Then
    $arFound[0] = $i & '|' & $iDim
    Return $arFound
    Else
    ReDim $arFound[UBound($arFound)+1]
    $arFound[UBound($arFound)-1] = $i & '|' & $iDim
    $arFound[0] += 1
    EndIf
    EndIf
    Case $iCaseSense = 1 And (Not $fPartialSearch)
    If $avArray[$i][$iDim] == $vWhat2Find Then
    If $1stFound Then
    $arFound[0] = $i & '|' & $iDim
    Return $arFound
    Else
    ReDim $arFound[UBound($arFound)+1]
    $arFound[UBound($arFound)-1] = $i & '|' & $iDim
    $arFound[0] += 1
    EndIf
    EndIf
    Case $iCaseSense = 0 And $fPartialSearch
    If StringInStr($avArray[$i][$iDim], $vWhat2Find) Then
    If $1stFound Then
    $arFound[0] = $i & '|' & $iDim
    Return $arFound
    Else
    ReDim $arFound[UBound($arFound)+1]
    $arFound[UBound($arFound)-1] = $i & '|' & $iDim
    $arFound[0] += 1
    EndIf
    EndIf
    Case $iCaseSense = 1 And $fPartialSearch
    If StringInStr($avArray[$i][$iDim], $vWhat2Find, 1) Then
    If $1stFound Then
    $arFound[0] = $i & '|' & $iDim
    Return $arFound
    Else
    ReDim $arFound[UBound($arFound)+1]
    $arFound[UBound($arFound)-1] = $i & '|' & $iDim
    $arFound[0] += 1
    EndIf
    EndIf
    EndSelect
    EndIf
    Next
    EndIf
    Return $arFound
    EndFunc ;==>_Array2DSearch

    [/autoit]
  • Hallo TheLuBu,

    hier dein abgeänertes Skript, jetzt wird bei einem Klick auf eine der beiden ListView's automatisch im anderen LV das selektierte Item auch selektiert und in den sichtbaren Bereich gescrollt:

    Spoiler anzeigen
    [autoit]

    #include <ButtonConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <TabConstants.au3>
    #include <WindowsConstants.au3>
    #include <ListviewConstants.au3>
    #include <GuiListView.au3>
    #include <Date.au3>

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

    Global $Kampcode[15][3], $newarray[15][15], $AgentKamp[15], $iActiveAgent, $iActiveTab

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

    $Datumsplitnow = StringSplit(_NowCalcDate(), "/")
    $iDay = $Datumsplitnow[3]
    $iMonth = $Datumsplitnow[2]
    $iYear = $Datumsplitnow[1]
    $Yearsplit = StringSplit($iYear, "")
    $DatumJJ = $Yearsplit[3] & $Yearsplit[4]

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

    For $i = 1 To 14
    For $k = 1 To 14
    $newarray[$i][$k] = Random(0, 1000)
    Next
    Next
    $newarray[8][13] = "alle abschließend bearbeiteten Agenten-Kontakte ohne falsche Nummer, Fax und Anrufbeantworter"
    $newarray[12][12] = "Zeitdauer, die der Agent im Client angemeldet war (Differenz zwischen Client-Logout und Client-Login)"
    $newarray[14][11] = "Abschluss mit Ergebnis ABL: Ablehnung"
    $newarray[11][9] = "Abschluss mit Ergebnis OK"
    $newarray[1][1] = "A"
    $newarray[2][1] = "B"
    $newarray[3][1] = "C"
    $newarray[4][1] = "D"
    $newarray[5][1] = "E"
    $newarray[6][1] = "F"
    $newarray[7][1] = "G"
    $newarray[8][1] = "H"
    $newarray[9][1] = "I"
    $newarray[10][1] = "J"
    $newarray[11][1] = "K"
    $newarray[12][1] = "L"
    $newarray[13][1] = "M"
    $newarray[14][1] = "N"
    $AgentKamp[1] = "|A|B|C|D|E|F|G|"
    $AgentKamp[2] = "|A|B|C|D|E|F|G|H|I|J|K|L|M"
    $AgentKamp[3] = "|A|B|C|D|E|F|G|"
    $AgentKamp[4] = "|A|B|C|D|E|F|G|"
    $AgentKamp[5] = "|A|B|C|D|E|F|G|"
    $AgentKamp[6] = "|A|B|C|D|E|F|G|H|I|J|K|L|M|N|"
    $AgentKamp[7] = "|A|B|C|D|E|F|G|"
    $AgentKamp[8] = "|A|B|C|D|E|F|G|"
    $AgentKamp[9] = "|A|B|C|D|E|F|G|"
    $AgentKamp[10] = "|A|B|C|D|E|F|G|H|I|J|K|L|M|N|"
    $AgentKamp[11] = "|A|B|C|D|E|F|G|"
    $AgentKamp[12] = "|A|B|C|D|E|F|G|H|I|J|K|L|M|N|"
    $AgentKamp[13] = "|A|B|C|D|E|F|G|"
    $AgentKamp[14] = "|A|B|C|D|E|F|G|"

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

    $Kampcode[1][2] = 'DE_TL_HSP_' & $iMonth & '_' & $DatumJJ
    $Kampcode[2][2] = 'DE_TL_SPP_' & $iMonth & '_' & $DatumJJ
    $Kampcode[3][2] = 'DE_TL_TAF_' & $iMonth & '_' & $DatumJJ
    $Kampcode[4][2] = 'DE_TL_TMD_' & $iMonth & '_' & $DatumJJ
    $Kampcode[5][2] = 'DE_TL_VF_' & $iMonth & '_' & $DatumJJ
    $Kampcode[6][2] = 'DE_ZK_Haupt_' & $iMonth & '_' & $DatumJJ
    $Kampcode[7][2] = 'DE_ZK_CC_' & $iMonth & '_' & $DatumJJ
    $Kampcode[8][2] = 'DE_ZK_O2_' & $iMonth & '_' & $DatumJJ
    $Kampcode[9][2] = 'DE_ZK_O2_CC_' & $iMonth & '_' & $DatumJJ
    $Kampcode[10][2] = 'MC_HSP_' & $iMonth & '_' & $DatumJJ
    $Kampcode[11][2] = 'MC_SPO_' & $iMonth & '_' & $DatumJJ
    $Kampcode[12][2] = 'MC_TAF_' & $iMonth & '_' & $DatumJJ
    $Kampcode[13][2] = 'MC_TMD_WOP_NOP_' & $iMonth & '_' & $DatumJJ
    $Kampcode[14][2] = 'MC_VF_WOP_NOP_' & $iMonth & '_' & $DatumJJ

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

    Dim $Tabs[UBound($Kampcode)]
    Dim $LV_Kontakt[UBound($Kampcode)]
    Dim $LV_Agent[UBound($Kampcode)]
    Dim $hLV_Kontakt[UBound($Kampcode)]
    Dim $hLV_Agent[UBound($Kampcode)]
    Dim $Kampkennzahl[UBound($Kampcode)]

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

    For $i = 0 To UBound($LV_Agent) - 1
    $LV_Agent[$i] = -9999
    $LV_Kontakt[$i] = -9999
    Next

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

    $Agentview = GUICreate("Tabbed Monitoring Dialog", 407, 438, 193, 85)
    $PageControl1 = GUICtrlCreateTab(8, 8, 396, 384, $WS_VSCROLL)
    GUICtrlSetResizing(-1, $GUI_DOCKWIDTH + $GUI_DOCKHEIGHT)
    $Zeile = UBound($newarray) - 1
    #region Suche
    $KontaktGesamt = _Array2DSearch($newarray, "alle abschließend bearbeiteten Agenten-Kontakte ohne falsche Nummer, Fax und Anrufbeantworter", -1, UBound($newarray) - 2, 0, 0, False, True)
    $s1 = StringSplit($KontaktGesamt[0], "|")

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

    $Kontaktzeit = _Array2DSearch($newarray, "Zeitdauer, die der Agent im Client angemeldet war (Differenz zwischen Client-Logout und Client-Login)", -1, UBound($newarray) - 2, 0, 0, False, True)
    $s2 = StringSplit($Kontaktzeit[0], "|")

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

    $Kontaktdurchschnitt = _Array2DSearch($newarray, "Abschluss mit Ergebnis ABL: Ablehnung", -1, UBound($newarray) - 2, 0, 0, False, True)
    $s3 = StringSplit($Kontaktdurchschnitt[0], "|")

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

    $Pausenzeit = _Array2DSearch($newarray, "Abschluss mit Ergebnis OK", -1, UBound($newarray) - 2, 0, 0, True, False)
    #endregion Suche
    For $i = 1 To UBound($Kampcode) - 1
    $Tabs[$i] = GUICtrlCreateTabItem($Kampcode[$i][2])
    $data = StringSplit($AgentKamp[$i], "|")
    $LV_Agent[$i] = GUICtrlCreateListView("Agent ", 16, 160, 128, 224, -1, BitOR($LVS_EX_FULLROWSELECT, $LVS_EX_TRACKSELECT))
    $hLV_Agent[$i] = GUICtrlGetHandle($LV_Agent[$i])
    GUICtrlSetBkColor($LV_Agent[$i], 0xFFFFFF)
    GUICtrlSetBkColor($LV_Agent[$i], $GUI_BKCOLOR_LV_ALTERNATE)
    For $k = 2 To $data[0]
    GUICtrlCreateListViewItem($data[$k], $LV_Agent[$i])
    GUICtrlSetBkColor(-1, 0xFFDEAD)
    Next
    $LV_Kontakt[$i] = GUICtrlCreateListView("Nettokontakt|Netto pro h|Annahmen|Ablehnung|Quote", 145, 160, 238, 224, -1, BitOR($LVS_EX_FULLROWSELECT, $LVS_EX_TRACKSELECT))
    $hLV_Kontakt[$i] = GUICtrlGetHandle($LV_Kontakt[$i])

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

    GUICtrlSetBkColor($LV_Kontakt[$i], 0xFFFFFF)
    GUICtrlSetBkColor($LV_Kontakt[$i], $GUI_BKCOLOR_LV_ALTERNATE)
    For $k = 2 To $data[0]
    $Agent = _Array2DSearch($newarray, " " & $data[$k], -1, 0, 0, 0, False, True)
    $a = StringSplit($Agent[0], "|")
    If $a[1] <> -1 Then

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

    $Annahme = "0"
    For $e = 1 To UBound($Pausenzeit) - 1
    $s4 = StringSplit($Pausenzeit[$e], "|")
    $Annahme += $newarray[$a[1]][$s4[2]]
    Next
    $Quote = $Annahme / $newarray[$a[1]][$s1[2]] * 100
    $Quote = Round($Quote, 2)
    $Kontaktproh = $newarray[$a[1]][$s1[2]] / $newarray[$a[1]][$s2[2]] * 60
    $Kontaktproh = Round($Kontaktproh, 2)

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

    GUICtrlCreateListViewItem($newarray[$a[1]][$s1[2]] & "|" & $Kontaktproh & "|" & $Annahme & "|" & $newarray[$a[1]][$s3[2]] & "|" & $Quote, $LV_Kontakt[$i])
    GUICtrlSetBkColor(-1, 0xFFDEAD)
    Else
    GUICtrlCreateListViewItem("0|0|0|0|0", $LV_Kontakt[$i])
    GUICtrlSetBkColor(-1, 0xFFDEAD)
    EndIf
    Next
    Next
    GUICtrlCreateTabItem("")

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

    $Button1 = GUICtrlCreateButton("&OK", 94, 408, 75, 25, $WS_GROUP)
    $Button2 = GUICtrlCreateButton("&Cancel", 174, 408, 75, 25, $WS_GROUP)
    $Button3 = GUICtrlCreateButton("&Help", 256, 408, 75, 25, $WS_GROUP)
    GUISetState(@SW_SHOW)
    $iActiveTab = GUICtrlRead($PageControl1)
    GUIRegisterMsg($WM_NOTIFY, "WM_NOTIFY")

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    GUISetState(@SW_HIDE)
    GUIDelete($Agentview)
    ExitLoop
    Case $PageControl1
    $iActiveTab = GUICtrlRead($PageControl1) + 1
    ConsoleWrite("Aktiver Tab " & $iActiveTab & @CRLF)
    Case $Button1
    GUISetState(@SW_HIDE)
    GUIDelete($Agentview)
    ExitLoop
    Case $Button2
    GUISetState(@SW_HIDE)
    GUIDelete($Agentview)
    ExitLoop
    Case $Button3
    GUISetState(@SW_HIDE)
    GUIDelete($Agentview)
    ExitLoop

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

    EndSwitch
    ;~ For $i = 1 To UBound($LV_Agent)
    ;~ if _GUICtrlListView_GetTopIndex($hLV_Kontakt[$i])<_GUICtrlListView_GetTopIndex($hLV_Agent[$i]) then
    ;~ _GUICtrlListView_Scroll($hLV_Agent[$i], 0, -12)
    ;~ elseif _GUICtrlListView_GetTopIndex($hLV_Kontakt[$i])>_GUICtrlListView_GetTopIndex($hLV_Agent[$i]) then
    ;~ _GUICtrlListView_Scroll($hLV_Agent[$i], 0, +12)
    ;~ EndIf
    ;~ Next
    WEnd

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

    Func _Array2DSearch($avArray, $vWhat2Find, $iDim = -1, $iStart = 0, $iEnd = 0, $iCaseSense = 0, $fPartialSearch = False, $1stFound = False)
    Local $error = 0, $1D, $arFound[1] = [0]
    If $1stFound Then $arFound[0] = -1
    If (Not IsArray($avArray)) Then
    SetError(1)
    Return 0
    EndIf
    Local $UBound2nd = UBound($avArray, 2)
    If @error = 2 Then $1D = True
    If ($iEnd = 0) Or ($iEnd = -1) Then $iEnd = UBound($avArray) - 1
    If $iStart = -1 Then $iStart = 0
    If $iCaseSense = -1 Then $iCaseSense = 0
    If $iCaseSense <> 0 Then $iCaseSense = 1
    Select
    Case ($iDim > $UBound2nd) Or ($iDim < -1)
    $error += 2
    Case ($iStart < 0) Or ($iStart > UBound($avArray) - 1)
    $error += 4
    Case ($iEnd < $iStart) Or ($iEnd > UBound($avArray) - 1)
    $error += 8
    EndSelect
    If $error <> 0 Then
    SetError($error)
    Return 0
    EndIf
    If $fPartialSearch <> True Then $fPartialSearch = False
    If $1D Then
    For $i = $iStart To $iEnd
    Select
    Case $iCaseSense = 0 And (Not $fPartialSearch)
    If $avArray[$i] = $vWhat2Find Then
    If $1stFound Then
    $arFound[0] = $i
    Return $arFound
    Else
    ReDim $arFound[UBound($arFound) + 1]
    $arFound[UBound($arFound) - 1] = $i
    $arFound[0] += 1
    EndIf
    EndIf
    Case $iCaseSense = 1 And (Not $fPartialSearch)
    If $avArray[$i] == $vWhat2Find Then
    If $1stFound Then
    $arFound[0] = $i
    Return $arFound
    Else
    ReDim $arFound[UBound($arFound) + 1]
    $arFound[UBound($arFound) - 1] = $i
    $arFound[0] += 1
    EndIf
    EndIf
    Case $iCaseSense = 0 And $fPartialSearch
    If StringInStr($avArray[$i], $vWhat2Find) Then
    If $1stFound Then
    $arFound[0] = $i
    Return $arFound
    Else
    ReDim $arFound[UBound($arFound) + 1]
    $arFound[UBound($arFound) - 1] = $i
    $arFound[0] += 1
    EndIf
    EndIf
    Case $iCaseSense = 1 And $fPartialSearch
    If StringInStr($avArray[$i], $vWhat2Find, 1) Then
    If $1stFound Then
    $arFound[0] = $i
    Return $arFound
    Else
    ReDim $arFound[UBound($arFound) + 1]
    $arFound[UBound($arFound) - 1] = $i
    $arFound[0] += 1
    EndIf
    EndIf
    EndSelect
    Next
    Else
    For $i = $iStart To $iEnd
    If $iDim = -1 Then
    Select
    Case $iCaseSense = 0 And (Not $fPartialSearch)
    For $k = 0 To $UBound2nd - 1
    If $avArray[$i][$k] = $vWhat2Find Then
    If $1stFound Then
    $arFound[0] = $i & '|' & $k
    Return $arFound
    Else
    ReDim $arFound[UBound($arFound) + 1]
    $arFound[UBound($arFound) - 1] = $i & '|' & $k
    $arFound[0] += 1
    EndIf
    EndIf
    Next
    Case $iCaseSense = 1 And (Not $fPartialSearch)
    For $k = 0 To $UBound2nd - 1
    If $avArray[$i][$k] == $vWhat2Find Then
    If $1stFound Then
    $arFound[0] = $i & '|' & $k
    Return $arFound
    Else
    ReDim $arFound[UBound($arFound) + 1]
    $arFound[UBound($arFound) - 1] = $i & '|' & $k
    $arFound[0] += 1
    EndIf
    EndIf
    Next
    Case $iCaseSense = 0 And $fPartialSearch
    For $k = 0 To $UBound2nd - 1
    If StringInStr($avArray[$i][$k], $vWhat2Find) Then
    If $1stFound Then
    $arFound[0] = $i & '|' & $k
    Return $arFound
    Else
    ReDim $arFound[UBound($arFound) + 1]
    $arFound[UBound($arFound) - 1] = $i & '|' & $k
    $arFound[0] += 1
    EndIf
    EndIf
    Next
    Case $iCaseSense = 1 And $fPartialSearch
    For $k = 0 To $UBound2nd - 1
    If StringInStr($avArray[$i][$k], $vWhat2Find, 1) Then
    If $1stFound Then
    $arFound[0] = $i & '|' & $k
    Return $arFound
    Else
    ReDim $arFound[UBound($arFound) + 1]
    $arFound[UBound($arFound) - 1] = $i & '|' & $k
    $arFound[0] += 1
    EndIf
    EndIf
    Next
    EndSelect
    Else
    Select
    Case $iCaseSense = 0 And (Not $fPartialSearch)
    If $avArray[$i][$iDim] = $vWhat2Find Then
    If $1stFound Then
    $arFound[0] = $i & '|' & $iDim
    Return $arFound
    Else
    ReDim $arFound[UBound($arFound) + 1]
    $arFound[UBound($arFound) - 1] = $i & '|' & $iDim
    $arFound[0] += 1
    EndIf
    EndIf
    Case $iCaseSense = 1 And (Not $fPartialSearch)
    If $avArray[$i][$iDim] == $vWhat2Find Then
    If $1stFound Then
    $arFound[0] = $i & '|' & $iDim
    Return $arFound
    Else
    ReDim $arFound[UBound($arFound) + 1]
    $arFound[UBound($arFound) - 1] = $i & '|' & $iDim
    $arFound[0] += 1
    EndIf
    EndIf
    Case $iCaseSense = 0 And $fPartialSearch
    If StringInStr($avArray[$i][$iDim], $vWhat2Find) Then
    If $1stFound Then
    $arFound[0] = $i & '|' & $iDim
    Return $arFound
    Else
    ReDim $arFound[UBound($arFound) + 1]
    $arFound[UBound($arFound) - 1] = $i & '|' & $iDim
    $arFound[0] += 1
    EndIf
    EndIf
    Case $iCaseSense = 1 And $fPartialSearch
    If StringInStr($avArray[$i][$iDim], $vWhat2Find, 1) Then
    If $1stFound Then
    $arFound[0] = $i & '|' & $iDim
    Return $arFound
    Else
    ReDim $arFound[UBound($arFound) + 1]
    $arFound[UBound($arFound) - 1] = $i & '|' & $iDim
    $arFound[0] += 1
    EndIf
    EndIf
    EndSelect
    EndIf
    Next
    EndIf
    Return $arFound
    EndFunc ;==>_Array2DSearch

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

    Func WM_NOTIFY($hWnd, $msgID, $wParam, $lParam)
    Local $tagNMHDR, $event, $hwndFrom, $code, $aItems
    $tagNMHDR = DllStructCreate("int;int;int", $lParam)
    $code = DllStructGetData($tagNMHDR, 3)
    If @error Then Return 0
    ;ConsoleWrite($wParam & " " & $LV_Agent[$iActiveTab] & @CRLF)
    Switch $wParam
    Case $LV_Agent[$iActiveTab]
    Switch $code
    Case $NM_CLICK
    $iActiveAgent = GUICtrlRead($LV_Agent[$iActiveTab])
    $aItems = _GUICtrlListView_GetSelectedIndices($LV_Agent[$iActiveTab],True)
    If IsArray($aItems) Then
    $iActiveAgent = $aItems[1]
    ;ConsoleWrite($iActiveAgent & " Name " & GUICtrlRead($iActiveAgent) & @CRLF)
    _GUICtrlListView_EnsureVisible($LV_Kontakt[$iActiveTab], $iActiveAgent)
    _GUICtrlListView_SetItemSelected($LV_Kontakt[$iActiveTab], $iActiveAgent)
    EndIf
    EndSwitch
    Case $LV_Kontakt[$iActiveTab]
    Switch $code
    Case $NM_CLICK
    $iActiveAgent = GUICtrlRead($LV_Kontakt[$iActiveTab])
    $aItems = _GUICtrlListView_GetSelectedIndices($LV_Kontakt[$iActiveTab],True)
    If IsArray($aItems) Then
    $iActiveAgent = $aItems[1]
    ;ConsoleWrite($iActiveAgent & " Name " & GUICtrlRead($iActiveAgent) & @CRLF)
    _GUICtrlListView_EnsureVisible($LV_Agent[$iActiveTab], $iActiveAgent)
    _GUICtrlListView_SetItemSelected($LV_Agent[$iActiveTab], $iActiveAgent)
    EndIf
    EndSwitch
    EndSwitch
    Return $GUI_RUNDEFMSG
    EndFunc ;==>WM_NOTIFY

    [/autoit]

    mfg autoBert

  • Guten Morgen,

    ich habe da ein grundsätzliches Verständnisproblem. Abgesehen davon, dass Dein Beispiel nicht tut, was es soll, kommt es mir so vor, als ob jede Zeile im zweiten ListView der entsprechenden Zeile im ersten zugeordnet ist. Warum packst Du das dann nicht in ein gemeinsames ListView?

    [OT]Und wenn sich hinter den Agenten und Kampagnen das verbirgt, was ich vermute, achte bitte darauf, dass meine Nummer nicht in Euren Listen auftaucht!!![/OT]

  • Guten Morgen,

    ich habe da ein grundsätzliches Verständnisproblem. Abgesehen davon, dass Dein Beispiel nicht tut, was es soll, kommt es mir so vor, als ob jede Zeile im zweiten ListView der entsprechenden Zeile im ersten zugeordnet ist. Warum packst Du das dann nicht in ein gemeinsames ListView?

    [OT]Und wenn sich hinter den Agenten und Kampagnen das verbirgt, was ich vermute, achte bitte darauf, dass meine Nummer nicht in Euren Listen auftaucht!!![/OT]


    Da es sich um Dummydaten handelt, kann es sein das es dir nicht so vorkommt, aber es ist so (alles schon nachgeprüft ;)).

    An AutoBert:
    Vielen Dank für die Hilfe, soweit klappt es, mir ist nur aufgefallen, das wenn man sich mal verklickt (durch zufall rausgefunden), und zwar hinter den letzten Eintrag (Bei deinem Script z.B. im Zweiten Tab hinter M (wo N kommen sollte)), kriege ich einen Error:

    [autoit]

    test2.au3 (378) : ==> Array variable has incorrect number of subscripts or subscript dimension range exceeded.:
    $iActiveAgent = $aItems[1]
    $iActiveAgent = ^ ERROR

    [/autoit]

    und das Script stürzt ab. Kann man das irgendwie abfangen?

    --EDIT--
    Habe es gefunden, laut Beschreibung liefert

    [autoit]

    _GuiCtrlListView_GetSelectedIndices

    [/autoit]

    bei einem Fehler ein Array mit $array[0] = 0 zurück. Habe dann bei den Cases von $WM_Notify folgendes geändert:

    [autoit]

    If IsArray($aItems) And $aItems[0] <> 0 Then

    [/autoit]
  • Hallo TheLuBu,

    ich hätte dies so behandelt:

    Spoiler anzeigen
    [autoit]

    Func WM_NOTIFY($hWnd, $msgID, $wParam, $lParam)
    Local $tagNMHDR, $event, $hwndFrom, $code, $aItems
    $tagNMHDR = DllStructCreate("int;int;int", $lParam)
    $code = DllStructGetData($tagNMHDR, 3)
    If @error Then Return 0
    ;ConsoleWrite($wParam & " " & $LV_Agent[$iActiveTab] & @CRLF)
    Switch $wParam
    Case $LV_Agent[$iActiveTab]
    Switch $code
    Case $NM_CLICK
    $iActiveAgent = GUICtrlRead($LV_Agent[$iActiveTab])
    $aItems = _GUICtrlListView_GetSelectedIndices($LV_Agent[$iActiveTab],True)
    If IsArray($aItems) Then
    if $aItems[0] > 0 Then $iActiveAgent = $aItems[1]
    ;ConsoleWrite($iActiveAgent & " Name " & GUICtrlRead($iActiveAgent) & @CRLF)
    _GUICtrlListView_EnsureVisible($LV_Kontakt[$iActiveTab], $iActiveAgent)
    _GUICtrlListView_SetItemSelected($LV_Kontakt[$iActiveTab], $iActiveAgent)
    EndIf
    EndSwitch
    Case $LV_Kontakt[$iActiveTab]
    Switch $code
    Case $NM_CLICK
    $iActiveAgent = GUICtrlRead($LV_Kontakt[$iActiveTab])
    $aItems = _GUICtrlListView_GetSelectedIndices($LV_Kontakt[$iActiveTab],True)
    If IsArray($aItems) Then
    if $aItems[0] > 0 Then $iActiveAgent = $aItems[1]
    ;ConsoleWrite($iActiveAgent & " Name " & GUICtrlRead($iActiveAgent) & @CRLF)
    _GUICtrlListView_EnsureVisible($LV_Agent[$iActiveTab], $iActiveAgent)
    _GUICtrlListView_SetItemSelected($LV_Agent[$iActiveTab], $iActiveAgent)
    EndIf
    EndSwitch
    EndSwitch
    Return $GUI_RUNDEFMSG
    EndFunc ;==>WM_NOTIFY

    [/autoit]

    obwohl mir kein Fall aufgefallen ist in dem $aItems kein Array ist, erscheint mir diese Methode sicherer,

    mfg autoBert

  • Also bei

    [autoit]

    _GUICtrlListView_GetSelectedIndices($LV_Agent[$iActiveTab],True)

    [/autoit]


    gibt das True am Ende ja an, das ein Array zurück geliefert wird, und eben bei einem Fehler ein Array mit [0] = 0, also denke ich das es ja immer ein Array ist.

    Ein kleiner Fehler war noch drin, bei Zeile 144

    [autoit]

    $iActiveTab = GUICtrlRead($PageControl1)

    [/autoit]

    wird als $ActiveTab 0 zurückgeliefert, die Listviews auf der ersten Seite wurden dann nicht verbunden, erst bei erneutem anwählen des 1 Tabs.

    habe es dann mit

    [autoit]

    $iActiveTab = GUICtrlRead($PageControl1) + 1

    [/autoit]


    ersetzt, da standartmäßig ja der erste Tab ausgewählt ist, damit klappt es dann auch von anfang an auf der ersten Seite.

    Aber vielen Dank für deine Hilfe autoBert

  • Hallo TheLuBu,

    Ursprünglich hatte ich auch bei Tabwechsel die "fehlerhafte" Zeile, bis ich endlich dahintergekommen bin dass in deinen Arrays die LV's nicht bei 0 sondern bei 1 beginnen.
    Beim anschliessenden Test ist es mir dann nicht aufgefallen, da in deinem Beispiel auf dem 1. Tab nur 1 LV war.

    Mittlerweile verstehe ich auch was @Großvater meinte: es gibt Konstellationen in denen die LV's nicht syncron erscheinen, aber die Selektion ist bei beiden die gleiche ID und diese ist auch sichtbar. Vielleicht hat @Großvater ja eine Lösung bei dem der TopIndex bei beiden immer gleich ist,

    mfg autoBert

  • Spoiler anzeigen
    [autoit]

    #include <ButtonConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <TabConstants.au3>
    #include <WindowsConstants.au3>
    #include <ListviewConstants.au3>
    #include <GuiListView.au3>
    #include <Date.au3>

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

    Global $Kampcode[15][3], $newarray[15][15], $AgentKamp[15], $iActiveAgent, $iActiveTab

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

    $Datumsplitnow = StringSplit(_NowCalcDate(), "/")
    $iDay = $Datumsplitnow[3]
    $iMonth = $Datumsplitnow[2]
    $iYear = $Datumsplitnow[1]
    $Yearsplit = StringSplit($iYear, "")
    $DatumJJ = $Yearsplit[3] & $Yearsplit[4]

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

    For $i = 1 To 14
    For $k = 1 To 14
    $newarray[$i][$k] = Random(0, 1000)
    Next
    Next
    $newarray[8][13] = "alle abschließend bearbeiteten Agenten-Kontakte ohne falsche Nummer, Fax und Anrufbeantworter"
    $newarray[12][12] = "Zeitdauer, die der Agent im Client angemeldet war (Differenz zwischen Client-Logout und Client-Login)"
    $newarray[14][11] = "Abschluss mit Ergebnis ABL: Ablehnung"
    $newarray[11][9] = "Abschluss mit Ergebnis OK"
    $newarray[1][1] = "A"
    $newarray[2][1] = "B"
    $newarray[3][1] = "C"
    $newarray[4][1] = "D"
    $newarray[5][1] = "E"
    $newarray[6][1] = "F"
    $newarray[7][1] = "G"
    $newarray[8][1] = "H"
    $newarray[9][1] = "I"
    $newarray[10][1] = "J"
    $newarray[11][1] = "K"
    $newarray[12][1] = "L"
    $newarray[13][1] = "M"
    $newarray[14][1] = "N"
    $AgentKamp[1] = "|A|B|C|D|E|F|G|"
    $AgentKamp[2] = "|A|B|C|D|E|F|G|H|I|J|K|L|M"
    $AgentKamp[3] = "|A|B|C|D|E|F|G|"
    $AgentKamp[4] = "|A|B|C|D|E|F|G|"
    $AgentKamp[5] = "|A|B|C|D|E|F|G|"
    $AgentKamp[6] = "|A|B|C|D|E|F|G|H|I|J|K|L|M|N|"
    $AgentKamp[7] = "|A|B|C|D|E|F|G|"
    $AgentKamp[8] = "|A|B|C|D|E|F|G|"
    $AgentKamp[9] = "|A|B|C|D|E|F|G|"
    $AgentKamp[10] = "|A|B|C|D|E|F|G|H|I|J|K|L|M|N|"
    $AgentKamp[11] = "|A|B|C|D|E|F|G|"
    $AgentKamp[12] = "|A|B|C|D|E|F|G|H|I|J|K|L|M|N|"
    $AgentKamp[13] = "|A|B|C|D|E|F|G|"
    $AgentKamp[14] = "|A|B|C|D|E|F|G|"

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

    $Kampcode[1][2] = 'DE_TL_HSP_' & $iMonth & '_' & $DatumJJ
    $Kampcode[2][2] = 'DE_TL_SPP_' & $iMonth & '_' & $DatumJJ
    $Kampcode[3][2] = 'DE_TL_TAF_' & $iMonth & '_' & $DatumJJ
    $Kampcode[4][2] = 'DE_TL_TMD_' & $iMonth & '_' & $DatumJJ
    $Kampcode[5][2] = 'DE_TL_VF_' & $iMonth & '_' & $DatumJJ
    $Kampcode[6][2] = 'DE_ZK_Haupt_' & $iMonth & '_' & $DatumJJ
    $Kampcode[7][2] = 'DE_ZK_CC_' & $iMonth & '_' & $DatumJJ
    $Kampcode[8][2] = 'DE_ZK_O2_' & $iMonth & '_' & $DatumJJ
    $Kampcode[9][2] = 'DE_ZK_O2_CC_' & $iMonth & '_' & $DatumJJ
    $Kampcode[10][2] = 'MC_HSP_' & $iMonth & '_' & $DatumJJ
    $Kampcode[11][2] = 'MC_SPO_' & $iMonth & '_' & $DatumJJ
    $Kampcode[12][2] = 'MC_TAF_' & $iMonth & '_' & $DatumJJ
    $Kampcode[13][2] = 'MC_TMD_WOP_NOP_' & $iMonth & '_' & $DatumJJ
    $Kampcode[14][2] = 'MC_VF_WOP_NOP_' & $iMonth & '_' & $DatumJJ

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

    Dim $Tabs[UBound($Kampcode)]
    Dim $LV_Kontakt[UBound($Kampcode)]
    Dim $LV_Agent[UBound($Kampcode)]
    Dim $hLV_Kontakt[UBound($Kampcode)]
    Dim $hLV_Agent[UBound($Kampcode)]
    Dim $Kampkennzahl[UBound($Kampcode)]

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

    For $i = 0 To UBound($LV_Agent) - 1
    $LV_Agent[$i] = -9999
    $LV_Kontakt[$i] = -9999
    Next

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

    $Agentview = GUICreate("Tabbed Monitoring Dialog", 407, 438, 193, 85)
    $PageControl1 = GUICtrlCreateTab(8, 8, 396, 384, $WS_VSCROLL)
    GUICtrlSetResizing(-1, $GUI_DOCKWIDTH + $GUI_DOCKHEIGHT)
    $Zeile = UBound($newarray) - 1
    #region Suche
    $KontaktGesamt = _Array2DSearch($newarray, "alle abschließend bearbeiteten Agenten-Kontakte ohne falsche Nummer, Fax und Anrufbeantworter", -1, UBound($newarray) - 2, 0, 0, False, True)
    $s1 = StringSplit($KontaktGesamt[0], "|")

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

    $Kontaktzeit = _Array2DSearch($newarray, "Zeitdauer, die der Agent im Client angemeldet war (Differenz zwischen Client-Logout und Client-Login)", -1, UBound($newarray) - 2, 0, 0, False, True)
    $s2 = StringSplit($Kontaktzeit[0], "|")

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

    $Kontaktdurchschnitt = _Array2DSearch($newarray, "Abschluss mit Ergebnis ABL: Ablehnung", -1, UBound($newarray) - 2, 0, 0, False, True)
    $s3 = StringSplit($Kontaktdurchschnitt[0], "|")

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

    $Pausenzeit = _Array2DSearch($newarray, "Abschluss mit Ergebnis OK", -1, UBound($newarray) - 2, 0, 0, True, False)
    #endregion Suche
    For $i = 1 To UBound($Kampcode) - 1
    $Tabs[$i] = GUICtrlCreateTabItem($Kampcode[$i][2])
    $data = StringSplit($AgentKamp[$i], "|")
    $LV_Agent[$i] = GUICtrlCreateListView("Agent ", 16, 160, 128, 224, -1, BitOR($LVS_EX_FULLROWSELECT, $LVS_EX_TRACKSELECT))
    $hLV_Agent[$i] = GUICtrlGetHandle($LV_Agent[$i])
    GUICtrlSetBkColor($LV_Agent[$i], 0xFFFFFF)
    GUICtrlSetBkColor($LV_Agent[$i], $GUI_BKCOLOR_LV_ALTERNATE)
    For $k = 2 To $data[0]
    GUICtrlCreateListViewItem($data[$k], $LV_Agent[$i])
    GUICtrlSetBkColor(-1, 0xFFDEAD)
    Next
    $LV_Kontakt[$i] = GUICtrlCreateListView("Nettokontakt|Netto pro h|Annahmen|Ablehnung|Quote", 145, 160, 238, 224, -1, BitOR($LVS_EX_FULLROWSELECT, $LVS_EX_TRACKSELECT))
    $hLV_Kontakt[$i] = GUICtrlGetHandle($LV_Kontakt[$i])

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

    GUICtrlSetBkColor($LV_Kontakt[$i], 0xFFFFFF)
    GUICtrlSetBkColor($LV_Kontakt[$i], $GUI_BKCOLOR_LV_ALTERNATE)
    For $k = 2 To $data[0]
    $Agent = _Array2DSearch($newarray, " " & $data[$k], -1, 0, 0, 0, False, True)
    $a = StringSplit($Agent[0], "|")
    If $a[1] <> -1 Then

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

    $Annahme = "0"
    For $e = 1 To UBound($Pausenzeit) - 1
    $s4 = StringSplit($Pausenzeit[$e], "|")
    $Annahme += $newarray[$a[1]][$s4[2]]
    Next
    $Quote = $Annahme / $newarray[$a[1]][$s1[2]] * 100
    $Quote = Round($Quote, 2)
    $Kontaktproh = $newarray[$a[1]][$s1[2]] / $newarray[$a[1]][$s2[2]] * 60
    $Kontaktproh = Round($Kontaktproh, 2)

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

    GUICtrlCreateListViewItem($newarray[$a[1]][$s1[2]] & "|" & $Kontaktproh & "|" & $Annahme & "|" & $newarray[$a[1]][$s3[2]] & "|" & $Quote, $LV_Kontakt[$i])
    GUICtrlSetBkColor(-1, 0xFFDEAD)
    Else
    GUICtrlCreateListViewItem("0|0|0|0|0", $LV_Kontakt[$i])
    GUICtrlSetBkColor(-1, 0xFFDEAD)
    EndIf
    Next
    Next
    GUICtrlCreateTabItem("")

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

    $Button1 = GUICtrlCreateButton("&OK", 94, 408, 75, 25, $WS_GROUP)
    $Button2 = GUICtrlCreateButton("&Cancel", 174, 408, 75, 25, $WS_GROUP)
    $Button3 = GUICtrlCreateButton("&Help", 256, 408, 75, 25, $WS_GROUP)
    GUISetState(@SW_SHOW)
    $iActiveTab = GUICtrlRead($PageControl1) + 1
    ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $iActiveTab = GUICtrlRead($PageControl1) = ' & $iActiveTab & @crlf & '>Error code: ' & @error & @crlf) ;### Debug Console
    GUIRegisterMsg($WM_NOTIFY, "WM_NOTIFY")

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    GUISetState(@SW_HIDE)
    GUIDelete($Agentview)
    ExitLoop
    Case $PageControl1
    $iActiveTab = GUICtrlRead($PageControl1) + 1
    ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : GUICtrlRead($PageControl1) = ' & GUICtrlRead($PageControl1) & @crlf & '>Error code: ' & @error & @crlf) ;### Debug Console
    ConsoleWrite("Aktiver Tab " & $iActiveTab & @CRLF)
    Case $Button1
    GUISetState(@SW_HIDE)
    GUIDelete($Agentview)
    ExitLoop
    Case $Button2
    GUISetState(@SW_HIDE)
    GUIDelete($Agentview)
    ExitLoop
    Case $Button3
    GUISetState(@SW_HIDE)
    GUIDelete($Agentview)
    ExitLoop

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

    EndSwitch
    ;~ For $i = 1 To UBound($LV_Agent)
    ;~ if _GUICtrlListView_GetTopIndex($hLV_Kontakt[$i])<_GUICtrlListView_GetTopIndex($hLV_Agent[$i]) then
    ;~ _GUICtrlListView_Scroll($hLV_Agent[$i], 0, -12)
    ;~ elseif _GUICtrlListView_GetTopIndex($hLV_Kontakt[$i])>_GUICtrlListView_GetTopIndex($hLV_Agent[$i]) then
    ;~ _GUICtrlListView_Scroll($hLV_Agent[$i], 0, +12)
    ;~ EndIf
    ;~ Next
    WEnd

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

    Func _Array2DSearch($avArray, $vWhat2Find, $iDim = -1, $iStart = 0, $iEnd = 0, $iCaseSense = 0, $fPartialSearch = False, $1stFound = False)
    Local $error = 0, $1D, $arFound[1] = [0]
    If $1stFound Then $arFound[0] = -1
    If (Not IsArray($avArray)) Then
    SetError(1)
    Return 0
    EndIf
    Local $UBound2nd = UBound($avArray, 2)
    If @error = 2 Then $1D = True
    If ($iEnd = 0) Or ($iEnd = -1) Then $iEnd = UBound($avArray) - 1
    If $iStart = -1 Then $iStart = 0
    If $iCaseSense = -1 Then $iCaseSense = 0
    If $iCaseSense <> 0 Then $iCaseSense = 1
    Select
    Case ($iDim > $UBound2nd) Or ($iDim < -1)
    $error += 2
    Case ($iStart < 0) Or ($iStart > UBound($avArray) - 1)
    $error += 4
    Case ($iEnd < $iStart) Or ($iEnd > UBound($avArray) - 1)
    $error += 8
    EndSelect
    If $error <> 0 Then
    SetError($error)
    Return 0
    EndIf
    If $fPartialSearch <> True Then $fPartialSearch = False
    If $1D Then
    For $i = $iStart To $iEnd
    Select
    Case $iCaseSense = 0 And (Not $fPartialSearch)
    If $avArray[$i] = $vWhat2Find Then
    If $1stFound Then
    $arFound[0] = $i
    Return $arFound
    Else
    ReDim $arFound[UBound($arFound) + 1]
    $arFound[UBound($arFound) - 1] = $i
    $arFound[0] += 1
    EndIf
    EndIf
    Case $iCaseSense = 1 And (Not $fPartialSearch)
    If $avArray[$i] == $vWhat2Find Then
    If $1stFound Then
    $arFound[0] = $i
    Return $arFound
    Else
    ReDim $arFound[UBound($arFound) + 1]
    $arFound[UBound($arFound) - 1] = $i
    $arFound[0] += 1
    EndIf
    EndIf
    Case $iCaseSense = 0 And $fPartialSearch
    If StringInStr($avArray[$i], $vWhat2Find) Then
    If $1stFound Then
    $arFound[0] = $i
    Return $arFound
    Else
    ReDim $arFound[UBound($arFound) + 1]
    $arFound[UBound($arFound) - 1] = $i
    $arFound[0] += 1
    EndIf
    EndIf
    Case $iCaseSense = 1 And $fPartialSearch
    If StringInStr($avArray[$i], $vWhat2Find, 1) Then
    If $1stFound Then
    $arFound[0] = $i
    Return $arFound
    Else
    ReDim $arFound[UBound($arFound) + 1]
    $arFound[UBound($arFound) - 1] = $i
    $arFound[0] += 1
    EndIf
    EndIf
    EndSelect
    Next
    Else
    For $i = $iStart To $iEnd
    If $iDim = -1 Then
    Select
    Case $iCaseSense = 0 And (Not $fPartialSearch)
    For $k = 0 To $UBound2nd - 1
    If $avArray[$i][$k] = $vWhat2Find Then
    If $1stFound Then
    $arFound[0] = $i & '|' & $k
    Return $arFound
    Else
    ReDim $arFound[UBound($arFound) + 1]
    $arFound[UBound($arFound) - 1] = $i & '|' & $k
    $arFound[0] += 1
    EndIf
    EndIf
    Next
    Case $iCaseSense = 1 And (Not $fPartialSearch)
    For $k = 0 To $UBound2nd - 1
    If $avArray[$i][$k] == $vWhat2Find Then
    If $1stFound Then
    $arFound[0] = $i & '|' & $k
    Return $arFound
    Else
    ReDim $arFound[UBound($arFound) + 1]
    $arFound[UBound($arFound) - 1] = $i & '|' & $k
    $arFound[0] += 1
    EndIf
    EndIf
    Next
    Case $iCaseSense = 0 And $fPartialSearch
    For $k = 0 To $UBound2nd - 1
    If StringInStr($avArray[$i][$k], $vWhat2Find) Then
    If $1stFound Then
    $arFound[0] = $i & '|' & $k
    Return $arFound
    Else
    ReDim $arFound[UBound($arFound) + 1]
    $arFound[UBound($arFound) - 1] = $i & '|' & $k
    $arFound[0] += 1
    EndIf
    EndIf
    Next
    Case $iCaseSense = 1 And $fPartialSearch
    For $k = 0 To $UBound2nd - 1
    If StringInStr($avArray[$i][$k], $vWhat2Find, 1) Then
    If $1stFound Then
    $arFound[0] = $i & '|' & $k
    Return $arFound
    Else
    ReDim $arFound[UBound($arFound) + 1]
    $arFound[UBound($arFound) - 1] = $i & '|' & $k
    $arFound[0] += 1
    EndIf
    EndIf
    Next
    EndSelect
    Else
    Select
    Case $iCaseSense = 0 And (Not $fPartialSearch)
    If $avArray[$i][$iDim] = $vWhat2Find Then
    If $1stFound Then
    $arFound[0] = $i & '|' & $iDim
    Return $arFound
    Else
    ReDim $arFound[UBound($arFound) + 1]
    $arFound[UBound($arFound) - 1] = $i & '|' & $iDim
    $arFound[0] += 1
    EndIf
    EndIf
    Case $iCaseSense = 1 And (Not $fPartialSearch)
    If $avArray[$i][$iDim] == $vWhat2Find Then
    If $1stFound Then
    $arFound[0] = $i & '|' & $iDim
    Return $arFound
    Else
    ReDim $arFound[UBound($arFound) + 1]
    $arFound[UBound($arFound) - 1] = $i & '|' & $iDim
    $arFound[0] += 1
    EndIf
    EndIf
    Case $iCaseSense = 0 And $fPartialSearch
    If StringInStr($avArray[$i][$iDim], $vWhat2Find) Then
    If $1stFound Then
    $arFound[0] = $i & '|' & $iDim
    Return $arFound
    Else
    ReDim $arFound[UBound($arFound) + 1]
    $arFound[UBound($arFound) - 1] = $i & '|' & $iDim
    $arFound[0] += 1
    EndIf
    EndIf
    Case $iCaseSense = 1 And $fPartialSearch
    If StringInStr($avArray[$i][$iDim], $vWhat2Find, 1) Then
    If $1stFound Then
    $arFound[0] = $i & '|' & $iDim
    Return $arFound
    Else
    ReDim $arFound[UBound($arFound) + 1]
    $arFound[UBound($arFound) - 1] = $i & '|' & $iDim
    $arFound[0] += 1
    EndIf
    EndIf
    EndSelect
    EndIf
    Next
    EndIf
    Return $arFound
    EndFunc ;==>_Array2DSearch

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

    Func WM_NOTIFY($hWnd, $msgID, $wParam, $lParam)
    Local $tagNMHDR, $event, $hwndFrom, $code, $aItems
    $tagNMHDR = DllStructCreate("int;int;int", $lParam)
    $code = DllStructGetData($tagNMHDR, 3)
    If @error Then Return 0
    ;ConsoleWrite($wParam & " " & $LV_Agent[$iActiveTab] & @CRLF)
    Switch $wParam
    Case $LV_Agent[$iActiveTab]
    Switch $code
    Case $NM_CLICK
    $iActiveAgent = GUICtrlRead($LV_Agent[$iActiveTab])
    $aItems = _GUICtrlListView_GetSelectedIndices($LV_Agent[$iActiveTab],True)
    If IsArray($aItems) ANd $aItems[0] <> 0 Then
    $iActiveAgent = $aItems[1]
    ;ConsoleWrite($iActiveAgent & " Name " & GUICtrlRead($iActiveAgent) & @CRLF)
    _GUICtrlListView_EnsureVisible($LV_Kontakt[$iActiveTab], $iActiveAgent)
    _GUICtrlListView_SetItemSelected($LV_Kontakt[$iActiveTab], $iActiveAgent)
    If _GUICtrlListView_GetTopIndex($LV_Agent[$iActiveTab]) > _GUICtrlListView_GetTopIndex($LV_Kontakt[$iActiveTab]) Then
    _GUICtrlListView_Scroll($LV_Kontakt[$iActiveTab], 0, +12)
    EndIf
    EndIf
    Case $LVN_HOTTRACK
    $iActiveAgent = GUICtrlRead($LV_Agent[$iActiveTab])
    $aItems = _GUICtrlListView_GetSelectedIndices($LV_Agent[$iActiveTab],True)
    If IsArray($aItems) ANd $aItems[0] <> 0 Then
    $iActiveAgent = $aItems[1]
    ;ConsoleWrite($iActiveAgent & " Name " & GUICtrlRead($iActiveAgent) & @CRLF)
    _GUICtrlListView_EnsureVisible($LV_Kontakt[$iActiveTab], $iActiveAgent)
    _GUICtrlListView_SetItemSelected($LV_Kontakt[$iActiveTab], $iActiveAgent)
    If _GUICtrlListView_GetTopIndex($LV_Agent[$iActiveTab]) > _GUICtrlListView_GetTopIndex($LV_Kontakt[$iActiveTab]) Then
    _GUICtrlListView_Scroll($LV_Kontakt[$iActiveTab], 0, +12)
    EndIf
    EndIf
    EndSwitch
    Case $LV_Kontakt[$iActiveTab]
    Switch $code
    Case $NM_CLICK
    $iActiveAgent = GUICtrlRead($LV_Kontakt[$iActiveTab])
    $aItems = _GUICtrlListView_GetSelectedIndices($LV_Kontakt[$iActiveTab],True)
    If IsArray($aItems) ANd $aItems[0] <> 0 Then
    $iActiveAgent = $aItems[1]
    ;ConsoleWrite($iActiveAgent & " Name " & GUICtrlRead($iActiveAgent) & @CRLF)
    _GUICtrlListView_EnsureVisible($LV_Agent[$iActiveTab], $iActiveAgent)
    _GUICtrlListView_SetItemSelected($LV_Agent[$iActiveTab], $iActiveAgent)
    if _GUICtrlListView_GetTopIndex($LV_Kontakt[$iActiveTab])<_GUICtrlListView_GetTopIndex($LV_Agent[$iActiveTab]) then
    _GUICtrlListView_Scroll($LV_Agent[$iActiveTab], 0, -12)
    EndIf
    EndIf
    Case $LVN_HOTTRACK
    $iActiveAgent = GUICtrlRead($LV_Kontakt[$iActiveTab])
    $aItems = _GUICtrlListView_GetSelectedIndices($LV_Kontakt[$iActiveTab],True)
    If IsArray($aItems) ANd $aItems[0] <> 0 Then
    $iActiveAgent = $aItems[1]
    ;ConsoleWrite($iActiveAgent & " Name " & GUICtrlRead($iActiveAgent) & @CRLF)
    _GUICtrlListView_EnsureVisible($LV_Agent[$iActiveTab], $iActiveAgent)
    _GUICtrlListView_SetItemSelected($LV_Agent[$iActiveTab], $iActiveAgent)
    if _GUICtrlListView_GetTopIndex($LV_Kontakt[$iActiveTab])<_GUICtrlListView_GetTopIndex($LV_Agent[$iActiveTab]) then
    _GUICtrlListView_Scroll($LV_Agent[$iActiveTab], 0, -12)
    EndIf
    EndIf
    EndSwitch
    EndSwitch
    Return $GUI_RUNDEFMSG
    EndFunc ;==>WM_NOTIFY

    [/autoit]

    Habe mal ein bisschen mit _GUICtrlListView_GetTopIndex und _GUICtrlListView_Scroll getestet, und auch den $LVN_HOTTRACK eingefügt, da ich den ja auch benutze. (Hottrack wählt automatisch das Feld an, wo die Maus drüber ist)

  • Salut,

    es gibt auch eine Lösung für das "gemeinsame" scrollen von zwei Listviews. Einst gefunden im englischen Forum:
    Zwei Lösungen , die besser funktionierende sieht so aus:

    Spoiler anzeigen
    [autoit]

    #include <GuiConstantsEx.au3>
    #include <WindowsConstants.au3>
    #include <GuiListView.au3>

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

    $GUI = GUICreate("Test Script", 600, 200)

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

    $ListView = GUICtrlCreateListView("Col ", 20, 20, 260, 160)
    $hListView = GUICtrlGetHandle($ListView)

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

    $ListView2 = GUICtrlCreateListView("Col ", 280, 20, 260, 160)
    $hListView2 = GUICtrlGetHandle($ListView2)

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

    For $i = 1 To 1000
    GUICtrlCreateListViewItem("Item " & $i, $ListView)
    GUICtrlCreateListViewItem("Next " & $i, $ListView2)
    Next

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

    GUISetState(@SW_SHOW, $GUI)

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

    While 1
    Switch GUIGetMsg()
    Case $GUI_EVENT_CLOSE
    Exit
    EndSwitch

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

    $iLvTopItem = _GUICtrlListView_GetTopIndex($hListView)
    $iLv2TopItem = _GUICtrlListView_GetTopIndex($hListView2)
    $iLvVertSpacing = _GUICtrlListView_GetItemSpacingY($hListView2)

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

    _GUICtrlListView_EnsureVisible($hListView2, $iLvTopItem)

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

    If $iLvTopItem < $iLv2TopItem Then
    ;ConsoleWrite("Less Than:" & @TAB & $iLv2TopItem - $iLvTopItem & @CRLF)
    _GUICtrlListView_EnsureVisible($hListView2, $iLvTopItem - $iLv2TopItem)
    ElseIf $iLvTopItem > $iLv2TopItem Then
    ;ConsoleWrite("Greater Than:" & @TAB & $iLvTopItem - $iLv2TopItem & @CRLF)
    _GUICtrlListView_Scroll($hListView2, 0, $iLvVertSpacing)
    EndIf
    WEnd

    [/autoit]


    Grüße
    t002

    PS. @ Großvater
    Ich hatte auch mal das Problem mit so vielen Spalten, dass horizontales scrollen notwendig war. Trotzdem sollten die Einträge in den Spalten 2 - n jeweils dem Eintrag in Spalte 1 zugeordnet werden können. Da kann sowas schon sinvoll sein.

    Einmal editiert, zuletzt von t002 (21. Januar 2011 um 22:12)