Bin neue und brauche Hilfe

  • Hallo zusammen,

    ich erst vor kurzem mit AutoIt-Programmierung angefangen und stehe momentan vor einem Problem:
    Ich möchte eine Tabelle aufbauen in der die ersten zwei Spalte für die Darstellung der Icons verwendet werden.
    Ein Icon in der ersten Spalte habe ich hinbekommen (aus einem der Beispiele übernommen) aber die zweite Spalte bekomme ich nicht hin.

    Spoiler anzeigen
    [autoit]

    #include <GuiConstants.au3>
    #include <GuiListView.au3>

    Local $array[256]
    Local $index = 0

    $gui = GUICreate("Icons in ListViews", 320, 240, -1, -1, $WS_CAPTION + $WS_VISIBLE + $WS_MINIMIZEBOX + $WS_SYSMENU)

    $listview = GUICtrlCreateListView("Icon1|Icon2|Beschreibung", 10, 10, 300, 220, $WS_BORDER + $LVS_NOSORTHEADER + $LVS_SHOWSELALWAYS + $LVS_NOLABELWRAP, $LVS_EX_FULLROWSELECT + $LVS_EX_SUBITEMIMAGES)
    $array[$index] = GUICtrlCreateListViewItem("||Testtext", $listview)
    GUICtrlSetImage($array[$index], "action_stop.ico", 0, 0)
    GUICtrlSetImage($array[$index], "action_stop.ico", 0, 0)
    _GUICtrlListViewJustifyColumn($listview, 0, 2)
    $index += 1

    While 1
    $msg = GUIGetMsg()
    If $msg == $GUI_EVENT_CLOSE Then
    ExitLoop
    EndIf
    WEnd

    [/autoit]

    Was mache ich falsch?
    Kann mir jemand weiter helfen?

    gruß xoma

  • Wenn Du in der Hilfe nachschlägst, sieht es wohl so aus, als ginge das erst einmal nicht, was Du da vorhast. Jedes Item in der Listview kann ein Icon haben, dass jedoch erstens immer das selbe ist und zweitens nur für die gesamte Zeile zugeordnet werden kann. Also sind verschiedene Icons in unterschiedlichen Spalten eines Items (also die Zeile) , so wie ich die Hilfe lese, nicht möglich.

    Gruß

    Chris

    P.S. Etwas komplizierter, aber wohl deutlicher ausgedrückt, jede Spalte und jede Zeile bräuchten eine spezifische controlID. So dass deren Verbindung, nennen wir das mal Zeilenspalte, eine eigene controlID-Kombination hätte, die man mit GUICtrlSetImage ansprechen müsste. Dies ist aber nicht vorhanden und/oder machbar.

    Einmal editiert, zuletzt von unearth (25. April 2007 um 13:46)

  • Zudem lässt sich soweit ich es sehen kann nur Text in die spalten eintragen sonst gkönne man mit GUIctrlSetData das Icon einfügen was aber leider nicht geht

  • Hallo zusammen,

    schade das es nicht geht aber trotzdem DANKE für eure Antworten.

    gruß xoma

  • Hallo zusammen,

    jetzt habe ich noch eine Frage:
    Wie kann ich die Breite einer Spalte in der Tabelle festlegen? Geht es überhaupt?

    gruß xoma

  • Hallo zusammen,

    @BugFix:DANKE für die schnelle Antwort.
    Funktioniert super aber eine weitere Frage habe ich trotzdem:
    Kann man die Breite der Spalte relativ zu der Breite der Tabelle (variabel) gestalten.

    Hier der Code mit dem ich das ausprobiere:

    Spoiler anzeigen
    [autoit]

    #include <GuiConstants.au3>
    #include <GuiListView.au3>

    Local $array[256]
    Local $index = 0

    $gui = GUICreate("Icons in ListViews", 320, 240, -1, -1, $WS_CAPTION + $WS_VISIBLE + $WS_MAXIMIZEBOX + $WS_MINIMIZEBOX + $WS_SYSMENU)

    $listview = GUICtrlCreateListView("Icon1", 10, 10, 300, 220, $LVS_NOCOLUMNHEADER, BitOR($WS_EX_CLIENTEDGE, $LVS_EX_GRIDLINES, $LVS_EX_CHECKBOXES))
    $array[$index] = GUICtrlCreateListViewItem("Test", $listview)
    _GUICtrlListViewSetColumnWidth($listview, 0, 295)
    $index += 1

    While 1
    $msg = GUIGetMsg()
    If $msg == $GUI_EVENT_CLOSE Then
    ExitLoop
    EndIf
    WEnd

    [/autoit]


    Mein Wunsch ist, dass wenn man das Fenster vergrößert auch die Breite der Spalte sich anpasst.
    Ich es möglich? Und wenn ja wie???
    Danke im Voraus !!!

    gruß xoma

    Einmal editiert, zuletzt von xoma (26. April 2007 um 13:56)

  • Versuch´s doch mal mit WinGetClientSize auf dein Script. Dann noch eine Width- und Height-Variable in Relation zu den Arrays von WinGetClientSize setzen und diese in der Schleife bei Änderungen über _GUICtrlListViewSetColumnWidth aktualisieren lassen.

    So, oder so ähnlich würde ich da rangehen. Probier´s mal aus.

    Gruß

    Chris

    P.S. Vielleicht gibt´s auch ein Makro oder eine UDF dafür, hab nicht detailliert nachgeschaut.

  • ich habe jetzt mit ControlGetPos gemacht und es funktioniert soweit.
    Wenn ich das Fenster mit dem "Maximieren"-Button oben rechts maximiere, dann funktioniert es.
    Wenn ich mit dem selben Button das Fenster verkleinere funktioniert es nicht.

    Hier mein Code:

    [autoit]

    #include <GuiConstants.au3>
    #include <GuiListView.au3>

    $gui = GUICreate("Mein Test", 320, 240, -1, -1, $WS_CAPTION + $WS_VISIBLE + $WS_MAXIMIZEBOX + $WS_MINIMIZEBOX + $WS_SYSMENU + $WS_SIZEBOX)
    $listview = GUICtrlCreateListView("Test", 10, 10, 300, 220, $LVS_NOCOLUMNHEADER, BitOR($WS_EX_CLIENTEDGE, $LVS_EX_GRIDLINES, $LVS_EX_CHECKBOXES))
    Local $listview1 = GUICtrlCreateListViewItem("Test", $listview)
    $pos = ControlGetPos("", "", $listview)
    _GUICtrlListViewSetColumnWidth($listview, 0, $pos[2]-5)

    While 1
    $msg = GUIGetMsg()
    If $msg == $GUI_EVENT_CLOSE Then
    ExitLoop
    ElseIf $msg == $GUI_EVENT_MAXIMIZE Then
    $pos = ControlGetPos("", "", $listview)
    _GUICtrlListViewSetColumnWidth($listview, 0, $pos[2]-5)
    ElseIf $msg == $GUI_EVENT_RESIZED Then
    $pos = ControlGetPos("", "", $listview)
    _GUICtrlListViewSetColumnWidth($listview, 0, $pos[2]-5)
    EndIf
    WEnd

    [/autoit]


    Was mache ich falsch?

    gruß xoma