Zweite ListView in Funktion einbauen

  • Hallo zusammen,

    ich möchte gern das unter einer bestimmten Voraussetzung eine Zweite Listview bei Aufruf dieser Funktion erscheint und wenn diese eben nicht gegeben ist, nur die Standard Listview wie hier in der Funktion bereits vorhanden.

    Hier erstmal der Funktionscode:

    Spoiler anzeigen
    [autoit]

    Func INSTANZEN()
    $TEMP[15] = GUICtrlCreateLabel(TRANSLATION("Instanzen"), 10, 20, 385, 20, $SS_CENTER)
    GUICtrlSetFont($TEMP[15], 12, 800)
    GUICtrlSetColor($TEMP[15], 3300)
    $LISTVIEW = GUICtrlCreateListView(TRANSLATION("Name") & " |" & TRANSLATION("Typ") & " ", 10, 45, 385, 550, $LVS_REPORT)
    GUICtrlSendMsg($LISTVIEW, $LVM_SETEXTENDEDLISTVIEWSTYLE, $LVS_EX_GRIDLINES, $LVS_EX_GRIDLINES)
    GUICtrlSendMsg($LISTVIEW, $LVM_SETEXTENDEDLISTVIEWSTYLE, $LVS_EX_FULLROWSELECT, $LVS_EX_FULLROWSELECT)
    _GUICTRLLISTVIEW_SETCOLUMN($LISTVIEW, 0, TRANSLATION("Name"), -1, 2)
    _GUICTRLLISTVIEW_SETCOLUMN($LISTVIEW, 1, TRANSLATION("Typ"), -1, 2)
    For $I = 1 To $ANZINSTANZEN
    $CLICKINSTANZEN[$I] = GUICtrlCreateListViewItem($INSTANZEN[$I][0] & "|" & $INSTANZEN[$I][3], $LISTVIEW)
    If $JUMPAKTIV = 1 And $INSTANZEN[$I][0] = $SPRUNGOBJ Then $JUMPTEMP = $CLICKINSTANZEN[$I]
    Next
    Global $B_DESCENDING[_GUICTRLLISTVIEW_GETCOLUMNCOUNT($LISTVIEW)]
    $TEMP[0] = GUICtrlCreateLabel(" ", 10, 45, 385, 549)
    GUICtrlSetState(-1, $GUI_DISABLE)
    _GUICTRLLISTVIEW_SETCOLUMNWIDTH($LISTVIEW, 0, 250)
    _GUICTRLLISTVIEW_SETCOLUMNWIDTH($LISTVIEW, 1, 130)
    _GUICtrlListView_SimpleSort($LISTVIEW, $B_DESCENDING, 1)
    EndFunc

    [/autoit]

    Also, damit die zweite Listview erscheinen darf, muss eine Übereinstimmung mit dem Namen ( Zeile [0] der Data Datei ) mit der ( Zeile [7] der Data Datei ) vorhanden sein.
    Gibt es keine Übereinstimmung, so soll nur die eben in diesem Code schon vorhandene Listview erscheinen und ihre Aufgabe erfüllen.
    Die Zweite Listview soll lediglich zwei Zeilen aus der Data auslesen und darstellen nichts weiter. Also nicht wie die hier Aufgeführte noch zusätzliche Aufgaben übernehmen!
    Ausgelesen wird der Name hier in dieser Zeile

    [autoit]

    $CLICKINSTANZEN[$I] = GUICtrlCreateListViewItem($INSTANZEN[$I][0] & "|" & $INSTANZEN[$I][3], $LISTVIEW)

    [/autoit]

    Ich hoffe mir kann hierbei jemand helfen oder gar am besten ein Beispiel erstellen. Ich bedanke mich schon mal im Voraus.

    Mfg Ghostleader

  • [autoit]


    $check1 = _GUICtrlListView_GetItemTextArray($LISTVIEW, 0)
    $check2 = _GUICtrlListView_GetItemTextArray($LISTVIEW, 6)
    If $check1[1] = $check2[1] Then
    ; Hier dann deinen Code
    EndIf

    [/autoit]

    falls ich das richtig verstanden hab:D

  • Hallo Phil,

    wenn ich das jetzt richtig interpretiere, so machst du zwar gerade die Abfrage die ich brauche, aber diese entscheidet nur ob die bereits im Code vorhandene Listview erscheint oder nicht. Ich möchte ja aber diese hier schon vorhandene immer angezeigt haben, aber eine zweite öffnen lassen wenn die kriterien wie du es gerade gemacht hast erfüllt sind.
    Das heist es müsste eine Zweispaltige zweite Listview mit in diese Funktion, die aber eben dann nur bei Erfüllung der Kriterien auch angezeigt wird (Natürlich an anderer Position) neben der Standard Listview hier im Code.

    Mfg Ghostleader

  • jaja das ist sowieso klar.. ich würde die listview am anfang in deinem script schonmal erstellen aber hiden und wenn die kriterien erfüllt sind dann den schow flag setzten, also:

    [autoit]


    ...
    Guicreate(...)
    $listview1 = Guictrlcreatelistview(....)
    $listview2 = Guictrlcreatelistview(....)
    Guictrlsetstate(-1, $GUI_HIDE)
    Guisetstate()
    ...

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

    $check1 = _GUICtrlListView_GetItemTextArray($listview1, 0)
    $check2 = _GUICtrlListView_GetItemTextArray($listview1, 6)
    If $check1[1] = $check2[1] Then
    Guictrlsetstate($listview2, $GUI_SHOW)
    ; Hier dann deinen Code
    EndIf

    [/autoit]

    Sorry für die schlampige eingabe ich hab jetzt nicht so wirklich drauf geachtet.. :D:D

    2 Mal editiert, zuletzt von philipp (5. September 2014 um 11:31)

  • Also das was du gerade da aufgeführt hast, meinst du soll ich alles in die Funktion eingebaut werden verliere gerade etwas den Überblick glaube ich 8|

    Wenn ich jetzt aber beide Listview´s hide

    [autoit]

    $listview1 = Guictrlcreatelistview(....)
    $listview2 = Guictrlcreatelistview(....)
    Guictrlsetstate(-1, @SW_HIDE)

    [/autoit]


    Dann wird doch bei Menüauswahl die Standard Listview auch net angezeigt wenn ich mich net irre.
    Auch verstehe ich nicht ganz nach was du den vergleich machst nach:

    [autoit]

    $check1 = _GUICtrlListView_GetItemTextArray($LISTVIEW, 0)
    $check2 = _GUICtrlListView_GetItemTextArray($LISTVIEW, 6)

    [/autoit]

    ?

    Der gesammt code für alle Menüs besteht aus ca 75 solcher Funcs, aber das was ich möchte soll eben nur für die eine so geschehen!

    Bin gerade schwieriger Fall ich weiss sorry :wacko:

  • ups da hab ich natürlich vergessen was zu ändern sorry... warte ich bessere es aus!
    aber mit GUICtrlSetState(-1, $GUI_HIDE) mach ich doch nicht beide unsichtbar!! sondern nur die zweite! und falls dann die übereinstimmung da ist setzt er den show flag!

    am besten du stellst mal noch bisschen mehr code zur verfügung.. (wenns geht dann sogar alles..)

    Einmal editiert, zuletzt von philipp (5. September 2014 um 11:30)

  • ups da hab ich natürlich vergessen was zu ändern sorry... warte ich bessere es aus!


    Ich würde sogar behaupten du machst garkeine unsichtbar weil du @SW_HIDE verwendest :rofl:
    $GUI_HIDE wäre richtig

  • Mir ist da gerade aufgefallen, das das so wie ich das vor hatte anhand der Datas nicht machbar ist, aber ich habe ne andere Idee, sofern das möglich ist.
    Und zwar würde ich mir einfach ne zweite Funk bauen die dann die andere Data ausliehst (kein Problem) und lass diese dann eben wenn Zeile [0] mit Zeile [6] der vorhandenen Funk gleich sind.

    Dachte mir das ca so, was aber noch net geht:

    Spoiler anzeigen
    [autoit]

    Func INSTANZEN()
    $TEMP[15] = GUICtrlCreateLabel(TRANSLATION("Instanzen"), 10, 20, 325, 20, $SS_CENTER)
    GUICtrlSetFont($TEMP[15], 12, 800)
    GUICtrlSetColor($TEMP[15], 3300)
    $LISTVIEW = GUICtrlCreateListView(TRANSLATION("Name") & " |" & TRANSLATION("Typ") & " ", 10, 45, 325, 450, $LVS_REPORT)
    GUICtrlSendMsg($LISTVIEW, $LVM_SETEXTENDEDLISTVIEWSTYLE, $LVS_EX_GRIDLINES, $LVS_EX_GRIDLINES)
    GUICtrlSendMsg($LISTVIEW, $LVM_SETEXTENDEDLISTVIEWSTYLE, $LVS_EX_FULLROWSELECT, $LVS_EX_FULLROWSELECT)
    _GUICTRLLISTVIEW_SETCOLUMN($LISTVIEW, 0, TRANSLATION("Name"), -1, 2)
    _GUICTRLLISTVIEW_SETCOLUMN($LISTVIEW, 1, TRANSLATION("Typ"), -1, 2)
    For $I = 1 To $ANZINSTANZEN
    $CLICKINSTANZEN[$I] = GUICtrlCreateListViewItem($INSTANZEN[$I][0] & "|" & $INSTANZEN[$I][3], $LISTVIEW)
    If $JUMPAKTIV = 1 And $INSTANZEN[$I][0] = $SPRUNGOBJ Then $JUMPTEMP = $CLICKINSTANZEN[$I]
    Next
    Global $B_DESCENDING[_GUICTRLLISTVIEW_GETCOLUMNCOUNT($LISTVIEW)]
    $TEMP[0] = GUICtrlCreateLabel(" ", 10, 45, 325, 449)
    GUICtrlSetState(-1, $GUI_DISABLE)
    _GUICTRLLISTVIEW_SETCOLUMNWIDTH($LISTVIEW, 0, 210)
    _GUICTRLLISTVIEW_SETCOLUMNWIDTH($LISTVIEW, 1, 110)
    _GUICtrlListView_SimpleSort($LISTVIEW, $B_DESCENDING, 1)
    $check1 = $INSTANZEN[$I][0] ;Liest Zeile 0 aus der Data aus
    $check2 = $INSTANZEN[$I][6] ; Liest Zeile 6 aus der Data aus
    If $check1 = $check2 Then
    TESTERLI() ; ist die andere Funktion die aufgerufen werden soll wenn gleich
    EndIf
    EndFunc

    [/autoit]


    Leider funktioniert das nicht denn es kommt folgender Fehler:

    [autoit]

    (9644) : ==> Array variable has incorrect number of subscripts or subscript dimension range exceeded.:
    $check1 = $INSTANZEN[$I][0]
    $check1 = ^ ERROR
    ->12:58:13 AutoIt3.exe ended.rc:1
    >Exit code: 1 Time: 10.006

    [/autoit]

    Mfg Ghosty

  • Um zusätzlich den gesamten Platz auszunutzen würde ich es so machen (mit der bedingung von Phil-IT)

    [autoit]

    #include <GUIConstantsEx.au3>

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

    GUICreate("gui",600,400)
    $lw1=GUICtrlCreateListView("listview1",10,10,580,380)
    $lw2=GUICtrlCreateListView("listview2",400,10,180,380)
    GUICtrlSetState(-1,$GUI_HIDE )
    GUISetState(@SW_SHOW)

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

    sleep(5000)
    _changeLW2()
    sleep(5000)
    _changeLW2(false)
    sleep(5000)
    exit

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

    Func _changeLW2($show=true)
    if $show then
    GUICtrlSetPos($lw1,10,10,380,380)
    GUICtrlSetState($lw2,$GUI_SHOW)
    else
    GUICtrlSetPos($lw1,10,10,580,380)
    GUICtrlSetState($lw2,$GUI_HIDE)
    endif
    EndFunc

    [/autoit]