Tabellen formatieren in autoit

  • Hallo,
    bin absoluter Newbie was Autoit angeht... habe aber schon ein kleines Programm geschrieben was soweit auch funktioniert.
    Kann es sein das man aber beim erstellen von Tabellen an seine Grenzen stößt???
    Ich habe nichts anderes gefunden als GuiCtrlCreateListViewItem. Ich kann damit zwar Zeilen in einer Tabelle erstellen aber ich möchte auch innerhalb der Datenfelder Zeilenumbrüche einbauen und Links anklickbar machen usw..

    Geht es damit bzw gibt es evtl eine andere Lösung???

    Danke euch!

  • Hallo hamburgerjung,

    herzlich willkommen im Forum und viel Spass mit AutoIt.

    Hier kannst du dir die deutsche Hilfe herunterladen.
    Hier gibt es ein AutoIt-Tutorial: http://wiki.autoit.de/wiki/index.php/TutorialSehr hilfreich ist auch das Buch von peethebee

    und jetzt zu deiner Frage: Zeilenumbrüche in einer Listview-Zelle sind afaik nicht möglich. Links anklicken sollte sich realisieren lassen, da ja jede einzelne Zelle abfragbar ist

    mfg autoBert

  • Zellen anklicken geht z.B so:

    [autoit]

    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $listitem1
    MsgBox(0,"","Sie haben auf den ersten Eintrag geklickt")
    Case $listitem2
    MsgBox(0,"","Sie haben auf den zweiten Eintrag geklickt")
    Case $listitem3
    MsgBox(0,"","Sie haben auf den dritten Eintrag geklickt")
    EndSwitch

    [/autoit]
  • Hi,
    hm... irgendwie schade, am liebsten wäre mir eine Tabellen Funktion wie datatables.net ;)

    Ok, dann erstelle ich ein neues Fenster per Klick auf die Zeile und packe da den Inhalt rein...

  • Hi,
    ich hab dir mal ein kleines Beispiel gemacht. Im Moment lässt sich das Context Menü nur mit einem Rechtsklick öffnen. Linksklick wird dann schon etwas schwieriger ;)

    Spoiler anzeigen
    [autoit]

    #include <GUIConstantsEx.au3>
    #include <GUIListView.au3>

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

    $Form1 = GUICreate("", 633, 454)

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

    $ListView1 = GUICtrlCreateListView("", 24, 32, 561, 369)
    $hListView = GUICtrlGetHandle($ListView1)

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

    $cContextMenue = GUICtrlCreateContextMenu($ListView1)
    $cContextMenue_Item = GUICtrlCreateMenuItem("Test", $cContextMenue)

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

    For $x = 1 To 4
    _GUICtrlListView_AddColumn($hListView, "Spalte" & $x, 100)
    Next

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

    For $x = 0 To 50
    GUICtrlCreateListViewItem(Random() & "|" & Random() & "|" &Random() & "|" &Random() ,$ListView1)
    Next

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

    GUISetState(@SW_SHOW)

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $cContextMenue_Item
    MsgBox(0,"","Test")
    EndSwitch
    WEnd

    [/autoit]
  • Noch ne Frage... geht bestimmt irgendwie, finde dazu aber nichts...
    Kann ich auch per Doppelklick auf einen Eintrag eine neue Gui erstellen und dort dann Inhalt anzeigen lassen?

    Und kann ich dazu dann noch einzelne Spalten in der Tabelle ausblenden?
    Möchte es also so machen das ich per Doppelklick die "Details" zu einer Anzeigen lassen möchte...

  • Hallo HaburgerJung,

    eine 2. Gui kannst du selbstverständlich über Doppelklick realisieren, hier ein Beispiel:

    Spoiler anzeigen
    [autoit]

    #include <GUIConstantsEx.au3>
    #include <GUIConstants.au3>
    #include <WindowsConstants.au3>
    #include <GuiListView.au3>
    #include <ListViewConstants.au3>
    #include <File.au3>

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

    ;#include <array.au3>

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

    Local $tZeit, $s1, $s2

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

    $main = GUICreate("Test Drag & Drop from LV1 to LV2 RightClick in LV1 with ContextMenu in LV1 (copies to ClipBoard", 600, 400)
    $listview = GUICtrlCreateListView("Gruppe1| BlubText", 10, 10, 200, 100, BitOR($LVS_REPORT, $LVS_SHOWSELALWAYS), BitOR($LVS_EX_FULLROWSELECT, $WS_EX_CLIENTEDGE))
    GUICtrlSetBkColor(-1, $GUI_BKCOLOR_LV_ALTERNATE) ; legt fest, dass Hintergrundfarbe wechselt
    GUICtrlSetBkColor(-1, 0xE6E6FA) ; Hintergrundfarbe 1

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

    $listview2 = GUICtrlCreateListView("Gruppe2 | BlubText", 230, 10, 200, 100, BitOR($LVS_REPORT, $LVS_SHOWSELALWAYS), BitOR($LVS_EX_FULLROWSELECT, $WS_EX_CLIENTEDGE))
    GUICtrlSetState($listview2, $GUI_DROPACCEPTED)
    $hbtnInfo = GUICtrlCreateButton("Info (LV1)", 10, 120, 100, 20)
    $hbtnSave = GUICtrlCreateButton("&Speichern (LV2)", 230, 120, 100, 20)
    $hbtnLoad = GUICtrlCreateButton("&Laden (LV2)", 230, 150, 100, 20)

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

    For $i = 1 To 9
    $listitem = GUICtrlCreateListViewItem("test" & $i & " |Blub " & Random(1, 9), $listview)
    If $i = 5 Then GUICtrlSetFont($listitem, 14, 800)
    GUICtrlSetBkColor(-1, 0xcccccc) ; Hintergrundfarbe 2
    Next
    $hEdit = GUICtrlCreateEdit("", 5, 180, 390, 200)
    $idContextmenu = GUICtrlCreateContextMenu($listview)
    $idClipmenu = GUICtrlCreateMenuItem("Selektierte ins ClipBoard", $idContextmenu)
    $idAllClipmenu = GUICtrlCreateMenuItem("Alle aus Splate 2 ins ClipBoard", $idContextmenu)
    $idDragmenu = GUICtrlCreateMenuItem("In LV 2", $idContextmenu)

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

    GUISetState(@SW_SHOW, $main)

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

    $idGui2 = GUICreate('GUI 2', 500, 300, 200, 50, -1, -1, $main) ;wichtig ist der letzte Parameter falls beide gleichzeitig sichtbar sein sollen
    ;erzeugt eine GUI als Child von Gui1, die zurückgebebene ID wird in der Variablen $idGui2 gespeichert

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

    $idbtnMsgBox = GUICtrlCreateButton('&MsgBox', 20, 20, 100, 21)
    GUICtrlSetResizing(-1, $GUI_DOCKSIZE + $GUI_DOCKLEFT + $GUI_DOCKTOP)
    ;verankert den Button "MsgBox" links und oben und fixiert die Größe
    ;beim Resizen bleibt es dadurch auf seiner Position am rechten Rand

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

    $idbtnZurueck = GUICtrlCreateButton('&Zurück zu GUI 1', 20, 50, 100, 21)
    GUICtrlSetResizing(-1, $GUI_DOCKSIZE + $GUI_DOCKLEFT + $GUI_DOCKTOP)
    ;verankert den Button "zurück" links und oben und fixiert die Größe
    ;beim Resizen bleibt es dadurch auf seiner Position am rechten Rand

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

    $idbtnExit2 = GUICtrlCreateButton('be&enden', 20, 80, 100, 21)
    GUICtrlSetResizing(-1, $GUI_DOCKSIZE + $GUI_DOCKLEFT + $GUI_DOCKTOP)
    ;verankert den Button "beenden" links und oben und fixiert die Größe
    ;beim Resizen bleibt es dadurch auf seiner Position am rechten Rand
    GUISetState(@SW_HIDE, $idGui2)

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

    GUIRegisterMsg($WM_NOTIFY, "WM_NOTIFY") ;<=========================================== Bemachrichtigung Doppelklick

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

    ;$first = True
    While 1
    $msg = GUIGetMsg(1)
    Switch $msg[1] ;welches Fenster
    Case $main
    Switch $msg[0] ;hier werden die Nachrichten für die MAIN GUI ausgewertet
    Case $GUI_EVENT_DROPPED, $idDragmenu
    $aSelected = _GUICtrlListView_GetSelectedIndices($listview, True)
    ;_ArrayDisplay($aSelected)
    For $i = 1 To $aSelected[0]
    $sItem = _GUICtrlListView_GetItemTextString($listview, $aSelected[$i])
    GUICtrlCreateListViewItem($sItem, $listview2)
    Next
    Case $listview
    MsgBox(0, "Test LV", GUICtrlRead(GUICtrlRead($listview)))
    Case $hbtnInfo
    $aWert = _GUICtrlListView_GetItemTextArray($listview)
    If $aWert[2] <> "" Then
    MsgBox(0, "Eintrag für " & $aWert[1], "ist: " & $aWert[2])
    Else
    MsgBox(0, "", "Kein Eintrag ausgewählt")
    EndIf
    Case $hbtnSave
    SaveLV(@ScriptDir & "\LV2.DAT")
    Case $hbtnLoad
    LoadLV(@ScriptDir & "\LV2.DAT")
    Case $idClipmenu
    $aItems = _GUICtrlListView_GetSelectedIndices($listview, True)
    $sItemText = ""
    For $i = 1 To $aItems[0]
    ;Schleifenbeginn 1 da $aItem[0] die Anzahl enhält
    $sItemText &= _GUICtrlListView_GetItemTextString($listview, $aItems[$i]) & @CRLF
    ConsoleWrite($sItemText & @CRLF)
    Next ;= > weiter mit For
    ClipPut($sItemText & @CRLF)
    MsgBox(0, "", "Jetzt einfach einmal CRTL-V drücken")
    ControlFocus($main, "", $hEdit)
    Case $idAllClipmenu
    $sToClip = ""
    For $i = 0 To _GUICtrlListView_GetItemCount($listview)
    $aItem = _GUICtrlListView_GetItemTextArray($listview, $i)
    $sToClip &= $aItem[2] & @CRLF
    Next
    ClipPut($sToClip)
    MsgBox(0, "", "Jetzt einfach einmal CRTL-v drücken")
    ControlFocus($main, "", $hEdit)
    Case $GUI_EVENT_CLOSE
    Exit
    EndSwitch
    Case $idGui2 ;hier werden die Nachrichten für die 2. Gui auswerten
    Switch $msg[0]
    Case $idbtnExit2
    Exit
    Case $GUI_EVENT_CLOSE, $idbtnZurueck
    GUISetState(@SW_HIDE, $idGui2)
    GUISetState(@SW_ENABLE, $main)
    WinActivate($main)
    case $idbtnMsgBox
    MsgBox(0,"Test","test",5,$idGui2)
    EndSwitch
    EndSwitch
    WEnd

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

    Func SaveLV($sFile)
    Local $hFileOut, $aItem
    $hFileOut = FileOpen($sFile, 2)
    For $j = 0 To _GUICtrlListView_GetItemCount($listview2) - 1
    $aItem = _GUICtrlListView_GetItemTextString($listview2, $j)
    FileWriteLine($hFileOut, $aItem)
    Next
    FileClose($hFileOut)
    EndFunc ;==>SaveLV

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

    Func LoadLV($sFile)
    Local $aItems
    If FileExists($sFile) Then
    _FileReadToArray($sFile, $aItems)
    If IsArray($aItems) Then
    _GUICtrlListView_DeleteAllItems($listview2)
    ;_ArrayDisplay($aItems)
    For $j = 1 To $aItems[0]
    GUICtrlCreateListViewItem($aItems[$j], $listview2)
    Next
    EndIf
    EndIf
    EndFunc ;==>LoadLV

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

    Func WM_NOTIFY($hWnd, $MsgID, $wParam, $lParam)
    Local $tagNMHDR, $event, $hwndFrom, $code
    $tagNMHDR = DllStructCreate("int;int;int", $lParam)
    If @error Then Return 0
    $code = DllStructGetData($tagNMHDR, 3)
    If $wParam = $listview Then
    ;ConsoleWrite($code & @CRLF)
    Switch $code
    ;case $NM_CLICK ;Klick
    Case $NM_DBLCLK ;<================Doppelklick
    GUISetState(@SW_SHOW, $idGui2)
    GUISetState(@SW_DISABLE, $main)
    Case $NM_RCLICK ;Rechtsklick
    If _GUICtrlListView_GetSelectedCount($listview) > 0 Then
    For $i = 0 To _GUICtrlListView_GetItemCount($listview)
    If _GUICtrlListView_GetItemSelected($listview, $i) Then
    $aItem = _GUICtrlListView_GetItemTextArray($listview, $i)
    MsgBox(0, "Rechts-Klick auf ", $aItem[1] & @CRLF & @CRLF & $aItem[2])
    EndIf
    Next
    EndIf
    EndSwitch
    EndIf
    Return $GUI_RUNDEFMSG
    EndFunc ;==>WM_NOTIFY

    [/autoit]

    wichtige Zeilen, habe ich mit ;<======== gekennzeichnet
    einzelne Spalten ausblenden geht afair nicht, aber vielleicht belehrt uns ja Oscar eines besseren,

    mfg autoBert

  • Das ist total geil... vor allem auch mit dem Farbwechsel in den Zeilen!! Vielen Dank, ich komme meinem Ziel immer näher ;)

    Eine letzte Frage noch... kann man auch Bilder in den Zeilen einbinden? Und zwar soll es so sein das ich je nach Text in einer entsprechenden Zeile durch ein Icon "austauschen" möchte...