Fragen zu GUICtrlListView

  • Hallo Zusammen,

    ich und GUIs :( Ich würde gerne eine GUICtrlCreateGroup scrollbar machen, sodaß in meinem Beispiel der "Radio 3" erst erscheint, wenn ich die Gruppe nach unten scrolle und nicht irgendwo in der MainGUI auftaucht. Ich hab mir einige Beispiele angeschaut, aber irgendwie sehr ich den Wald vor lauter Bäumen nicht.

    Spoiler anzeigen
    [autoit]


    #include <GUIConstantsEx.au3>
    #include <EditConstants.au3>
    #include <WindowsConstants.au3>
    #include <ScrollBarConstants.au3>

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

    Opt('MustDeclareVars', 1)

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

    Example()

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

    Func Example()
    Local $radio_1, $radio_2, $radio_3, $msg

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

    GUICreate("My GUI group") ; will create a dialog box that when displayed is centered

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

    GUICtrlCreateGroup("Group 1", 190, 60, 120, 140, BitOR($WS_VSCROLL, $ES_AUTOVSCROLL))
    $radio_1 = GUICtrlCreateRadio("Radio 1", 210, 90, 50, 20)
    $radio_2 = GUICtrlCreateRadio("Radio 2", 210, 110, 60, 50)
    $radio_3 = GUICtrlCreateRadio("Radio 3", 210, 300, 60, 50) ; Sollte eigentlich in die Group
    GUICtrlCreateGroup("", -99, -99, 1, 1) ;close group

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

    GUISetState() ; will display an empty dialog box

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

    ; Run the GUI until the dialog is closed
    While 1
    $msg = GUIGetMsg()
    If $msg = $GUI_EVENT_CLOSE Then ExitLoop
    WEnd
    EndFunc ;==>Example

    [/autoit]


    Was muß ich wo ändern?

    Besten Dank im voraus!
    R@iner

    Einmal editiert, zuletzt von skyteddy (27. Mai 2009 um 18:19)

  • Oscar :
    An die UDFs denke ich immer nicht :(

    @oliverh:
    Ja, das ist auch ein Ansatz, das ganze Tab zu scrollen.

    Ich schau mir mal beides an, bin aber mittlerweile auf die Idee gekommen, eine Liste daraus zu machen. Fragt sich nur, ob das leichter zu realisieren ist und ob die dann scrollbar ist?!

    Meine Vorstellung wäre ne Liste mit folgendem Aufbau:
    Gerätetyp, Beschreibung (mit Typ: Final or Beta), Knopf oder ähnliches (wo dann meine Download-Funktion startet und die betreffende Firmware runterlädt und an die richtige Stelle hinsortiert)

    Beispiel:
    Speedport W920V | Firmware 65.01.71, Final | [Download]
    Speedport W701V | Firmware xx.xx.xx, Beta | [Download]
    ...

    Ist sowas leichter machbar? Oder ich mach es so wie in dem GUICtrlCreateList-Beispiel und nur eine einspaltige Liste und einen "Download-Knopf" dazu. Dann müßte ich Gerätetyp und Beschreibung in eine Spalte machen, oder ist das Beispiel leicht erweiterbar auf 2 Spalten? autoIt und ich sind Freunde geworden, aber mit der GUI stehe ich irgendwie immer noch auf Kriegsfuß ;)

    Happy computing!
    R@iner

  • Hallo skyteddy,

    in einer Listview, kannst du es sicher schöner lösen als mit einer ewig langen Auswahl in der GroupBox. Schau dir dazu

    Zitat

    GUICtrlCreateListView
    --------------------------------------------------------------------------------

    Erstellt eine Liste (mit ein oder mehreren Spalten) für die GUI (ListView Steuerelement)


    GUICtrlCreateListView ( "text", left, top [, width [, height [, style [, exStyle]]]] )

    in der Hilfe an, es ist auch ein gutes Beispiel dabei, dass du umsetzen kannst. Anstelle der MsgBox musst du halt deine Download-Routine starten,

    Edit kleines Beispiel mit Checkbox in Listview:

    Spoiler anzeigen
    [autoit]

    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    #include <GuiListView.au3>
    #include <Array.au3>

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

    Opt("MustDeclareVars", 1) ;Variablen müssen deklariert werden
    Opt("GUiOnEventMode", 1) ;schaltet in den ONeVENTmODE

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

    GUICreate("ListView mit Checkboxen", 500, 200, 220, 200) ;GuiFenster erstellen
    GUISetOnEvent($GUI_EVENT_CLOSE, "Terminate") ;Funktion Terminate dem Event $Gui_Event_Close zuordnen

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

    Global $listview = GUICtrlCreateListView("DownLoad?|Name|Firmware Revision", 10, 10, 480, 145, _
    BitOR($LVS_SHOWSELALWAYS, $LVS_REPORT), BitOR($LVS_EX_FULLROWSELECT, $LVS_EX_CHECKBOXES))
    ;wichtig ist der Stil $LVS_Report und der eweiterte Stil $LVS_EX_Checkboxes
    ;erzeugt eine Listview mit den Spaltenüberschriften die zurückgegebene ID wird in der Variablen $ListView gespeichert

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

    _GUICtrlListView_SetColumnWidth($listview, 0, 80) ;Breite für Spalte mit Index 0 auf 80 setzen
    _GUICtrlListView_SetColumnWidth($listview, 1, 160) ;Breite für Spalte mit Index 1 auf 160 setzen
    _GUICtrlListView_SetColumnWidth($listview, 2, 160) ;Breite für Spalte mit Index 2 auf 160 setzen

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

    ;ab hier werden die ListViewItems erzeugt mit das "|" ist das Trennzeichen zwischen den Spalten
    GUICtrlCreateListViewItem(" |Speedport W920V | Firmware 65.01.71, Final", $listview)
    GUICtrlCreateListViewItem(" |Speedport W701V | Firmware xx.xx.xx, Final", $listview)
    GUICtrlCreateListViewItem(" |Speedport W701V | Firmware xy.xx.zz, Beta", $listview)
    GUICtrlCreateListViewItem(" |Speedport W920V | Firmware 65.01.71, Final ", $listview)
    GUICtrlCreateListViewItem(" |Speedport W701V | Firmware xx.xx.xx, Final", $listview)
    GUICtrlCreateListViewItem(" |Speedport W701V | Firmware xy.xx.zz, Beta", $listview)
    GUICtrlCreateListViewItem(" |Speedport W920V | Firmware 65.01.71, Final ", $listview)
    GUICtrlCreateListViewItem(" |Speedport W701V | Firmware xx.xx.xx, Final", $listview)
    GUICtrlCreateListViewItem(" |Speedport W701V | Firmware xy.xx.zz, Beta", $listview)
    GUICtrlCreateListViewItem(" |Speedport W920V | Firmware 65.01.71, Final ", $listview)
    GUICtrlCreateListViewItem(" |Speedport W701V | Firmware xx.xx.xx, Final", $listview)
    GUICtrlCreateListViewItem(" |Speedport W701V | Firmware xy.xx.zz, Beta", $listview)
    GUICtrlCreateListViewItem(" |Speedport W920V | Firmware 65.01.71, Final ", $listview)
    GUICtrlCreateListViewItem(" |Speedport W701V | Firmware xx.xx.xx, Final", $listview)
    GUICtrlCreateListViewItem(" |Speedport W701V | Firmware xy.xx.zz, Beta", $listview)
    GUICtrlCreateListViewItem(" |Speedport W920V | Firmware 65.01.71, Final ", $listview)
    GUICtrlCreateListViewItem(" |Speedport W701V | Firmware xx.xx.xx, Final", $listview)
    GUICtrlCreateListViewItem(" |Speedport W701V | Firmware xy.xx.zz, Beta", $listview)
    GUICtrlCreateListViewItem(" |Speedport W920V | Firmware 65.01.71, Final ", $listview)
    GUICtrlCreateListViewItem(" |Speedport W701V | Firmware xx.xx.xx, Final", $listview)
    GUICtrlCreateListViewItem(" |Speedport W701V | Firmware xy.xx.zz, Beta", $listview)
    GUICtrlCreateListViewItem(" |Speedport W920V | Firmware 65.01.71, Final ", $listview)
    GUICtrlCreateListViewItem(" |Speedport W701V | Firmware xx.xx.xx, Final", $listview)
    GUICtrlCreateListViewItem(" |Speedport W701V | Firmware xy.xx.zz, Beta", $listview)
    GUICtrlCreateListViewItem(" |Speedport W920V | Firmware 65.01.71, Final ", $listview)
    GUICtrlCreateListViewItem(" |Speedport W701V | Firmware xx.xx.xx, Final", $listview)
    GUICtrlCreateListViewItem(" |Speedport W701V | Firmware xy.xx.zz, Beta", $listview)
    GUICtrlCreateListViewItem(" |Speedport W920V | Firmware 65.01.71, Final ", $listview)
    GUICtrlCreateListViewItem(" |Speedport W701V | Firmware xx.xx.xx, Final", $listview)
    GUICtrlCreateListViewItem(" |Speedport W701V | Firmware xy.xx.zz, Beta", $listview)
    GUICtrlCreateButton("Download", 200, 165, 80, 30) ;Download-Button erzeugen
    GUICtrlSetOnEvent(-1, "_Downloads") ;die Funktion _Downloads dem Event des Buttons zuordnen
    GUISetState() ;wichtig! setzt den Status der Gui mit Standard-Parameter also @SW_Show

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

    While 1 ;Schleife sehr wichtig!!!!! da sonst die Gui sofort wieder geschlossen wird
    Sleep(100)
    WEnd

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

    Func _Downloads()
    Local $i, $aItemText ;lokale Variablen definieren
    ConsoleWrite("bin downloaden" & @CRLF) ;evtl. eigene Ausgabe bzw. Vorbereitung des Downloads oder einfach löschen
    For $i = 0 To _GUICtrlListView_GetItemCount($listview) - 1
    ;Schleifenbeginn da das erste Item den Index 0 hat von 0 bis Anzahl -1

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

    If _GUICtrlListView_GetItemChecked($listview, $i) Then ;wenn geChecked (angehakt) dann
    $aItemText = _GUICtrlListView_GetItemTextArray($listview, $i)
    ;Inhalt aller Spalten dieser Zeile dem Array $aItemText zuweisen
    ;$aItemText[0] enthält die Anzahl der Spalten
    ;$aItemText[1] Checked oder Unchecked (wir haben aber nur geChecked also keine Auswertung erforderlich)
    ;$aItemText[2] Name
    ;$aItemText[3] Firmware

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

    _FileDown($aItemText) ;Aufruf von _FileDown mit dem Wert(en) on $aItemText
    EndIf
    Next ;= > weiter mit For
    EndFunc ;==>_Downloads

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

    Func _FileDown($aItemText)
    ;gegen eigenen Algorythmus tauschen
    ConsoleWrite("Item: " & $aItemText[2] & $aItemText[3] & " ist markiert für download: " & " " & @CRLF)
    EndFunc ;==>_FileDown

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

    Func Terminate()
    Exit
    EndFunc ;==>Terminate

    [/autoit]

    Edit2: auf Grund deiner PN Beispiel abgeändert, damit Checkbox in eigener Spalte und damit du siehst es ist scrollbar

    Edit3: setze das Thema bitte auf gelöst (evtl. Überschrift ergänzen), notfalls kannst du ja einen neues Thema aufmachen

    Edit4: Beispiel auskommentiert

    mfg (Auto)Bert

    4 Mal editiert, zuletzt von AutoBert (20. Mai 2009 um 23:33)

  • Hallo Bert,

    vielen herzlichen Dank für Deine Hilfe. Habe mich heute mal mit dem Beispiel näher beschäftigt und dank Deiner Kommentare und der AutoIt-Hilfe das ein oder andere auch selber erweitern können. Mein Code sieht jetzt so aus:

    Spoiler anzeigen
    [autoit]

    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    #include <GuiListView.au3>
    #include <Array.au3>

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

    Opt("MustDeclareVars", 1) ; Variablen müssen deklariert werden
    Opt("GUiOnEventMode", 1) ; schaltet in den ONeVENTmODE

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

    Global $Klicks = 0 ; Zählt die Anzahl der Klicks auf Knopf Download

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

    #Region Gui-Erzeugung
    Global $MeinGui = GUICreate("ListView mit Checkboxen", 500, 300, 220, 200) ; GuiFenster erstellen
    GUISetOnEvent($GUI_EVENT_CLOSE, "Terminate") ; Funktion Terminate dem Event $Gui_Event_Close zuordnen

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

    Global $listview = GUICtrlCreateListView("DownLoad?|Name|Firmware Revision", 10, 10, 480, 230, _
    BitOR($LVS_SHOWSELALWAYS, $LVS_REPORT), BitOR($LVS_EX_FULLROWSELECT, $LVS_EX_CHECKBOXES)) ;$LVS_SHOWSELALWAYS
    ; wichtig ist der Stil $LVS_Report und der eweiterte Stil $LVS_EX_Checkboxes
    ; erzeugt eine Listview mit den Spaltenüberschriften die zurückgegebene ID wird in der Variablen $ListView gespeichert

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

    _GUICtrlListView_SetColumnWidth($listview, 0, 80) ; Breite für Spalte mit Index 0 auf 80 setzen
    _GUICtrlListView_SetColumnWidth($listview, 1, 160) ; Breite für Spalte mit Index 1 auf 160 setzen
    _GUICtrlListView_SetColumnWidth($listview, 2, 160) ; Breite für Spalte mit Index 2 auf 160 setzen

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

    ;ab hier werden die ListViewItems erzeugt mit das "|" ist das Trennzeichen zwischen den Spalten
    For $i = 0 To 70 Step 3
    GUICtrlCreateListViewItem(" |" & $i & " - Speedport W920V | Firmware 65.01.71, Final", $listview)
    GUICtrlCreateListViewItem(" |" & $i + 1 & " - Speedport W701V | Firmware xx.xx.xx, Final", $listview)
    GUICtrlCreateListViewItem(" |" & $i + 2 & " - Speedport W701V | Firmware xy.xx.zz, Beta", $listview)
    Next
    ; Button(s)
    GUICtrlCreateButton("Download", 200, 250, 80, 30) ; Download-Button erzeugen
    GUICtrlSetOnEvent(-1, "_Downloads") ; die Funktion _Downloads dem Event des Buttons zuordnen
    GUISetState(@SW_SHOW) ; wichtig! setzt den Status der Gui mit Standard-Parameter also @SW_Show
    #EndRegion Gui-Erzeugung

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

    #Region Main
    While 1 ;Schleife sehr wichtig!!!!! da sonst die Gui sofort wieder geschlossen wird
    Sleep(100)
    WEnd
    #EndRegion Main

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

    #Region Funktions-Definitionen
    ; Funktion, die beim Drücken des "Donwload"-knopfes aufgerufen wird
    Func _Downloads()
    Local $i, $aItemText ;lokale Variablen definieren

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

    $Klicks += 1 ; Klick-Counter erhöhen
    ConsoleWrite("Download-Klick Nr: " & $Klicks & " - Beginn" & @CRLF) ;evtl. eigene Ausgabe bzw. Vorbereitung des Downloads oder einfach löschen

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

    For $i = 0 To _GUICtrlListView_GetItemCount($listview) - 1
    ;Schleifenbeginn da das erste Item den Index 0 hat von 0 bis Anzahl -1

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

    If _GUICtrlListView_GetItemChecked($listview, $i) Then ; wenn geChecked (angehakt) dann
    $aItemText = _GUICtrlListView_GetItemTextArray($listview, $i)
    ;Inhalt aller Spalten dieser Zeile dem Array $aItemText zuweisen
    ;$aItemText[0] enthält die Anzahl der Spalten
    ;$aItemText[1] Checked oder Unchecked (wir haben aber nur geChecked also keine Auswertung erforderlich)
    ;$aItemText[2] Name
    ;$aItemText[3] Firmware

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

    ; Zeile markieren, die bearbeitet wird
    ; _GUICtrlListView_SetSelectionMark($listview, $i) ; Selectieren geht so nicht
    ; _GUICtrlListView_SetItemFocused($listview, $i, True) ; geht auch nicht
    _GUICtrlListView_SetItemSelected($listview, -1, False, False) ; Alle entfernen
    _GUICtrlListView_SetItemSelected($listview, $i, True, True) ; Nur den einen setzen

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

    ; Automatisch an die Stelle hinscrollen
    _GUICtrlListView_EnsureVisible($listview, $i)

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

    If _FileDown($aItemText) Then ;Aufruf von _FileDown mit dem Wert(en) on $aItemText
    ; - erfolgreicher Download -
    ; In Spalte 0 das Kästchen zum Anhaken entfernen, aber wie? Oder Zeile irgendwie anders kennzeichnen, daß der Download bereits erledigt ist <======================
    ; Oder ganze Zeile "deaktivieren", aber nicht löschen?
    Else
    ; - nicht erfolgreicher Download -> Error-Meldung -
    EndIf

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

    ; Haken rausnehmen
    _GUICtrlListView_SetItemChecked($listview, $i, False)
    EndIf
    Next ;= > weiter mit For

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

    ; Alle Items deselektieren
    _GUICtrlListView_SetItemSelected($listview, -1, False, False) ; Alle entfernen

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

    ; Klicks ausgeben
    ConsoleWrite("Download-Klick Nr: " & $Klicks & " - Ende" & @CRLF)
    EndFunc ;==>_Downloads

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

    ; Dummy-Datei-Download-Funktion
    Func _FileDown($aItemText)
    Local $text = " Download für Item: " & $aItemText[2] & $aItemText[3] & " läuft..."

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

    ConsoleWrite($text)
    ToolTip($text, 1, 1, "Download:")

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

    Sleep(3000) ; simuliert Download

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

    ConsoleWrite(" fertig" & @CRLF)
    ToolTip("")

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

    Return 1
    EndFunc ;==>_FileDown

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

    ; Exit-Funktion
    Func Terminate()
    GUIDelete($MeinGui)
    Exit
    EndFunc ;==>Terminate

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

    #EndRegion Funktions-Definitionen

    [/autoit]

    Jetzt habe ich aber noch folgende Fragen bzw. ungelöste Probleme:

    - Wie kann ich das realisieren, daß bei einem Doppelklick auf eine Zeile die Zeile an- bzw. abgehakt wird? Ich hatte von Bernd mal vor Jahren ein Beispiel für einen Event-Handler, aber der paßt heute hinten und vorne mit der AutoIt-Version nicht mehr zusammen. Hab da jetzt 2 Stunden rumprobiert, finde aber nicht die entsprechenden Funktionen.

    - Wie schaffe ich das, daß der Download-Knopf (oder auch weitere Knöpfe) in der Gui inaktiv sind, solange der Download läuft? Ich will sie nicht ausblenden, aber ein Klicken auf nen Knopf soll quasi ins Leere laufen.
    Ich hab mal testweise GUiOnEventMode abgeschalten und das mit ner While-Schleife und $msg=GUIGetMsg() probiert, aber auch da habe ich das gleiche Problem. Die Events werden irgendwie aufgehoben und nacheinander abgearbeitet :(

    - Nach erfolgreichem Download würde ich gerne die Zeile irgendwie "deaktivieren". Am liebsten wäre es mir, ich könnte den Kasten vorne zum Anhaken entfernen, aber ich schaff das nicht. Oder vielleicht gibt es eine andere Möglichkeit die Zeile zu "deaktivieren" oder farblich zu kennzeichnen, jedenfalls so, daß die Zeile nicht verschwindet.

    Besten Dank und viele Grüße!
    R@iner

  • Hallo Zusammen,

    zwei nFrage hab ich noch ergänzend zu meinen anderen. Gibt es eine Aufruf, der mir alle Spalten in einem Rutsch auf die optimale Breite zieht, sodaß der Text voll angezeigt wird? Und wie kann ich ein Zeile farbig machen?

    Besten Dank und viele Grüße!
    R@iner

  • Hallo skyteddy,

    Zitat

    - Wie schaffe ich das, daß der Download-Knopf (oder auch weitere Knöpfe) in der Gui inaktiv sind, solange der Download läuft? Ich will sie nicht ausblenden, aber ein Klicken auf nen Knopf soll quasi ins Leere laufen.
    Ich hab mal testweise GUiOnEventMode abgeschalten und das mit ner While-Schleife und $msg=GUIGetMsg() probiert, aber auch da habe ich das gleiche Problem. Die Events werden irgendwie aufgehoben und nacheinander abgearbeitet :(

    diese Problem hab ich gelöst in dem ich die Botschaften vor dem Download einfach aus und danach wieder einschalte:

    Spoiler anzeigen
    [autoit]

    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    #include <GuiListView.au3>
    #include <Array.au3>

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

    Opt("MustDeclareVars", 1) ; Variablen müssen deklariert werden
    Opt("GUiOnEventMode", 1) ; schaltet in den ONeVENTmODE

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

    Global $Klicks = 0 ; Zählt die Anzahl der Klicks auf Knopf Download
    Global $iTotal = 0

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

    #Region Gui-Erzeugung
    Global $MeinGui = GUICreate("ListView mit Checkboxen", 500, 300, 220, 200) ; GuiFenster erstellen
    GUISetOnEvent($GUI_EVENT_CLOSE, "Terminate") ; Funktion Terminate dem Event $Gui_Event_Close zuordnen
    GUISetOnEvent($GUI_EVENT_SECONDARYDOWN, '_ToggleLVItem')

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

    Global $listview = GUICtrlCreateListView("DownLoad?|Name|Firmware Revision| | ", 10, 10, 480, 224, _
    BitOR($LVS_SHOWSELALWAYS, $LVS_REPORT), BitOR($LVS_EX_FULLROWSELECT, $LVS_EX_CHECKBOXES)) ;$LVS_SHOWSELALWAYS
    ; wichtig ist der Stil $LVS_Report und der eweiterte Stil $LVS_EX_Checkboxes
    ; erzeugt eine Listview mit den Spaltenüberschriften die zurückgegebene ID wird in der Variablen $ListView gespeichert

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

    _GUICtrlListView_SetColumnWidth($listview, 0, 80) ; Breite für Spalte mit Index 0 auf 80 setzen
    _GUICtrlListView_SetColumnWidth($listview, 1, 160) ; Breite für Spalte mit Index 1 auf 160 setzen
    _GUICtrlListView_SetColumnWidth($listview, 2, $LVSCW_AUTOSIZE_USEHEADER) ; Breite für letzte Spalte den Rest nehmen
    _GUICtrlListView_SetColumnWidth($listview, 2,_GUICtrlListView_GetColumnWidth($listview, 2)-18) ;Ausgleich damit letzte Spalte nicht zu groß
    _GUICtrlListView_SetColumnWidth($listview, 3, 0) ; Breite für Spalte mit Index 3 auf 0 setzen (nimmt die Zeit / Größe auf)
    _GUICtrlListView_SetColumnWidth($listview, 4, 0) ; Breite für Spalte mit Index 4 auf 0 setzen (nimmt die Download-URL auf)

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

    ;ab hier werden die ListViewItems erzeugt mit das "|" ist das Trennzeichen zwischen den Spalten
    For $i = 0 To 70 Step 3
    GUICtrlCreateListViewItem(" |" & $i & " - Speedport W920V | Firmware 65.01.71, Final", $listview)
    GUICtrlCreateListViewItem(" |" & $i + 1 & " - Speedport W701V | Firmware xx.xx.xx, Final", $listview)
    GUICtrlCreateListViewItem(" |" & $i + 2 & " - Speedport W701V | Firmware xy.xx.zz, Beta", $listview)
    Next

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

    ;statt statischem Text aus einer CSV-Datei einlesen
    ; Button(s)
    Global $btnDownLoad = GUICtrlCreateButton("Download", 200, 250, 80, 30) ; Download-Button erzeugen
    GUICtrlSetOnEvent(-1, "_Downloads") ; die Funktion _Downloads dem Event des Buttons zuordnen
    Global $lblDownLoaded = GUICtrlCreateLabel("Download läuft noch ca. ", 10, 250, 480, 30) ; Download-Button erzeugen
    GUICtrlSetState(-1,$Gui_Hide)
    GUISetState(@SW_SHOW) ; wichtig! setzt den Status der Gui mit Standard-Parameter also @SW_Show
    #EndRegion Gui-Erzeugung

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

    #Region Main
    While 1 ;Schleife sehr wichtig!!!!! da sonst die Gui sofort wieder geschlossen wird
    Sleep(100)
    WEnd
    #EndRegion Main

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

    #Region Funktions-Definitionen
    ; Funktion, die beim Drücken des "Donwload"-knopfes aufgerufen wird
    Func _Downloads()
    Local $i, $aItemText,$iPos ;lokale Variablen definieren
    $iTotal = 0
    GUICtrlSetState($btnDownLoad,$Gui_Hide)
    GUICtrlSetState($lblDownLoaded,$GUI_Show)

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

    GUISetOnEvent($GUI_EVENT_CLOSE, '') ; ignorieren
    GUISetOnEvent($GUI_EVENT_SECONDARYDOWN, '')
    GUICtrlSetOnEvent($btnDownLoad, '')
    $Klicks += 1 ; Klick-Counter erhöhen
    ;ConsoleWrite("Download-Klick Nr: " & $Klicks & " - Beginn" & @CRLF) ;evtl. eigene Ausgabe bzw. Vorbereitung des Downloads oder einfach löschen
    For $i = 0 To _GUICtrlListView_GetItemCount($listview) - 1
    If _GUICtrlListView_GetItemChecked($listview, $i) Then ; wenn geChecked (angehakt) dann
    ;hier Code einfügen um Größe zu erhalten: InetGetSize
    $iPos = Random(3000,6000,1)
    _GUICtrlListView_SetItemText($listview,$i,$iPos,3) ;jetzt Zufallszeit später Filegröße in KB
    $iTotal = $iTotal + $iPos
    EndIf
    Next ;= > weiter mit For
    For $i = 0 To _GUICtrlListView_GetItemCount($listview) - 1
    ;Schleifenbeginn da das erste Item den Index 0 hat von 0 bis Anzahl -1

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

    If _GUICtrlListView_GetItemChecked($listview, $i) Then ; wenn geChecked (angehakt) dann
    $aItemText = _GUICtrlListView_GetItemTextArray($listview, $i)
    ;Inhalt aller Spalten dieser Zeile dem Array $aItemText zuweisen
    ;$aItemText[0] enthält die Anzahl der Spalten
    ;$aItemText[1] Checked oder Unchecked (wir haben aber nur geChecked also keine Auswertung erforderlich)
    ;$aItemText[2] Name
    ;$aItemText[3] Firmware
    ;$aItemText{4]Zeit / Größe
    ;$aItemText{5]Download-Url

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

    ; Zeile markieren, die gerade bearbeitet wird
    _GUICtrlListView_SetItemSelected($listview, -1, False, False) ; Alle entfernen (lt. Hilfe, scheint aber zu togglen)
    _GUICtrlListView_SetItemSelected($listview, $i, True, True) ; Nur den einen setzen (lt. Hilfe, scheint aber zu togglen)

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

    ; Automatisch an die Stelle hinscrollen
    _GUICtrlListView_EnsureVisible($listview, $i)

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

    If _FileDown($aItemText) Then ;Aufruf von _FileDown mit dem Wert(en) on $aItemText
    ; - erfolgreicher Download -
    ; In Spalte 0 das Kästchen zum Anhaken entfernen! Oder Zeile irgendwie anders kennzeichnen, daß der Download bereits erledigt ist <======================
    _GUICtrlListView_SetItemChecked($listview, $i, False)
    ; Oder ganze Zeile "deaktivieren", aber nicht löschen?
    Else
    ; - nicht erfolgreicher Download -> Error-Meldung -
    EndIf
    EndIf
    Next ;= > weiter mit For

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

    ; Alle Items deselektieren
    _GUICtrlListView_SetItemSelected($listview, -1, False, False) ; Alle Haken entfernen

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

    ; Klicks ausgeben
    ;ConsoleWrite("Download-Klick Nr: " & $Klicks & " - Ende" & @CRLF)
    ;alle EventBehandlungen wieder aktivieren
    GUISetOnEvent($GUI_EVENT_CLOSE, "Terminate") ; Funktion Terminate dem Event $Gui_Event_Close zuordnen
    GUISetOnEvent($GUI_EVENT_SECONDARYDOWN, '_ToggleLVItem')
    GUICtrlSetOnEvent($btnDownLoad, "_Downloads") ; die Funktion _Downloads dem Event des Buttons zuordnen
    GUICtrlSetState($lblDownLoaded,$Gui_Hide)
    GUICtrlSetState($btnDownLoad,$GUI_Show)
    EndFunc ;==>_Downloads

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

    ; Dummy-Datei-Download-Funktion
    Func _FileDown($aItemText)
    Local $iTime, $i
    Local $text = " Download für Item: " & $aItemText[2] & $aItemText[3] & " läuft..."
    ;ConsoleWrite($text)
    ToolTip($text, 1, 1, "Download:")
    $iTime = Round($aItemText[4]/5)
    For $i = 1 to 5
    GUICtrlSetData($lblDownLoaded,"Download läuft noch ca. " & Round(($iTotal-$i*$iTime)/1000,0) & " Sekunden")
    Sleep($iTime)
    Next
    $iTotal = $iTotal - $aItemText[4]
    ;ConsoleWrite(" fertig" & @CRLF)
    ToolTip("")

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

    Return 1
    EndFunc ;==>_FileDown

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

    ; Exit-Funktion
    Func Terminate()
    GUIDelete($MeinGui)
    Exit
    EndFunc ;==>Terminate

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

    Func _ToggleLVItem()
    ConsoleWrite("SecDown" & @GUI_CtrlId & ", " & @GUI_CtrlHandle & ", " & $listview & @CRLF)
    if @Gui_CtrlID <> $ListView Then Return
    EndFunc

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

    #EndRegion Funktions-Definitionen

    [/autoit]

    wenn es anstelle des Doppelklicks auch ein Rechtsklick werden darf hätte ich auch da schon einen Ansatz, das deaktvieren könnte ich auch noch probieren aber

    Zitat

    zwei nFrage hab ich noch ergänzend zu meinen anderen. Gibt es eine Aufruf, der mir alle Spalten in einem Rutsch auf die optimale Breite zieht, sodaß der Text voll angezeigt wird?

    Hierzu fällt mir leider kein Lösungsansatz ein.Edit: Beispiel von Oscar eingearbeitet


    mfg (Auto)Bert

    Einmal editiert, zuletzt von AutoBert (13. Dezember 2009 um 14:50)

    • Offizieller Beitrag

    Gibt es eine Aufruf, der mir alle Spalten in einem Rutsch auf die optimale Breite zieht, sodaß der Text voll angezeigt wird?

    Lösung:

    Spoiler anzeigen
    [autoit]


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

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

    GUICreate("ListView Set Column Width", 640, 300)
    $hListView = GUICtrlCreateListView("Column 1|Column 2|Column 3|Column 4", 2, 2, 636, 268)
    For $i = 0 To 9
    GUICtrlCreateListViewItem('qwertzuiopasdfghjklyxcvbnm|qwertzuiopasdfghjklyxcvbnm|qwertzuiopasdfghjklyxcvbnm|qwertzuiopasdfghjklyxcvbnm', $hListView)
    Next
    GUISetState()
    For $i = 0 To 3
    _GUICtrlListView_SetColumnWidth($hListView, $i, $LVSCW_AUTOSIZE)
    Next
    Do
    Until GUIGetMsg() = $GUI_EVENT_CLOSE

    [/autoit]