_GUICtrlListView_Create() supported nur 16 Child Guis

  • Neu!
    Gibt eine andere Möglichkeit dynamisch viele ListViews in jeweils einen Container zusammen mit anderen Controls in ein Main-GUI zu füllen?


    Hallo ! Ich brauche Hilfe bzw. Info.

    Ich möchte unter einer Main GUI 20 oder mehr Childs mit jeweils einer ListView erzeugen.

    Das Problem ist, dass nach zahlreichen Tests folgendes herausstellt:

    • Es können beliebig viele Childs erstellt werden.
    • Die HWNDs der Childs können z.B. über ControlMove angesprochen werden.
    • Damit glaube ich dass die HWNDs funktionieren
    • Jedoch können nur 16 Childs mit der ListView _GUICtrlListView_Create() bestückt werden.


    Hat jemand eine Idee, woran das liegen kann?


    Danke für jeden Hinweis.


    Grüsse


    Elephant

    _____code snippets below:

    Creating Child=====================================
    Local $modElem_window

    Local $left_Next = 0
    Local $title

    For $i = 1 To 20

    $modElem_window = 0

    $title = String($i)

    ;~ If $i = 17 Then $title = -1
    ;~ If $i = 18 Then $title = -2


    $modElem_window = GUICreate($title, 50, 300, $left_Next, 10, BitOr($WS_POPUP, $WS_BORDER))
    GUICtrlSetResizing(-1, $GUI_DOCKALL)
    GUISetBkColor(0x9900D1)

    Creating List=====================================
    Local $sHeaderText = "Done|CMD|RUN-Mode|ACK 2|ACK 1"

    $List_CMDs_Modul_1 = _GUICtrlListView_Create($modElem_window, $sHeaderText, -1, -1, -1, -1)
    _GUICtrlListView_SetExtendedListViewStyle($List_CMDs_Modul_1, BitOR($LVS_EX_GRIDLINES, $LVS_EX_FULLROWSELECT, $LVS_EX_INFOTIP, $LVS_EX_SUBITEMIMAGES, $LVS_EX_DOUBLEBUFFER)) ; $LVS_EX_SUBITEMIMAGES
    GUICtrlSetResizing(-1, $GUI_DOCKALL)

    _GUICtrlListView_SetColumnOrder($List_CMDs_Modul_1, "1|2|3|4|0")

    Einmal editiert, zuletzt von Elephant (20. Juni 2013 um 18:50) aus folgendem Grund: --> Die Limitation kommt aus einer internen Festlegung von Autoit.

    • Offizieller Beitrag

    Poste mal ein lauffähiges Beispiel und benutze Spoiler sowie AutoIt Tags.
    Btw. GUICtrlSetResizing auf eine GUI anzuwenden ist humbug, genau wie die Verwendung auf ein UDF ListView Control.
    GUICtrlSetResizing funktioniert nur bei Standard-Controls.

    Edit: Scheinbar soll ja der Codefetzen eine Schleife darstelle, somit ist es auch sinnfrei, dort immer wieder die selben Variablen zu nehmen.
    Bei jedem Schleifendurchlauf wird die Variable überschrieben und du kannst somit später nur auf die letzte GUI/ListView zugreifen.

  • Inzwischen ist entdeckt worden, dass die Func _GUICtrlListView_Create() nur 16 Childs verarbeiten kann. Das ist das Problem.


    Raupi: Danke für die Hinweise wegen Resizing. Das mit den Vars ist klar und auch im vollen Script behandelt.
    Was ist der Grundsätzliche Unterschied zwischen _GUICtrlListView_Create() und GUICtrlCreateListView ( "text", left, top [, width [, height [, style [,
    exStyle]]]] )?
    Einmal wird das HWND zB eines übergeordneten Childs als Parameter verwendet und einmal nicht.
    Was bewirkt das im Gesamtkonzept?


    Danke

    • Offizieller Beitrag

    Standard ListViews sind festes Bestandteil von AutoIt es wird die ControlID zurückgeliefert.
    Das ListView ist immer ein Child der GUI auf welcher es erstellt wird.
    Wenn du ein Standardlistview auf einer bestimmten GUI erstellen willst, kanns du vor dem erstellen mit GUISwitch auf die GUI schalten.
    Es können grundsätzlich allle UDF Funktionen auf das Standardlistview angewendet werden.
    Die UDF Funktionen kommen eigentlich auch mit dem ControlId anstatt dem Handle klar, wenn dies mal nicht funtioniert kannst du dir
    das Handle per GUICtrlGetHandle holen.

    Btw.

    [autoit]

    $modElem_window = GUICreate($title, 50, 300, $left_Next, 10, BitOr($WS_POPUP, $WS_BORDER))

    [/autoit]


    Erstellt keine ChilGUI, Dazu müßte als letzter Parameter das Handle der Parentgui übergeben werden.