GUICtrlCreateListViewItem macht aus mehreren zeilen eine Zeile

  • Anbei ein Screentshot von meinem Problem.

    Das Problem lässt sich ziemlich einfach erklären:

    Mit StdOutRead lese ich die Ausgabe eines Dos Befehls aus. Diese Ausgabe soll nach einer grafischen Aufbereitung dann in einer GUICtrlCreateListView angzeigt werden.

    Lasse ich mir die Ausgabe in einer MessageBox angzeigen, dann sieht noch alles super aus. Schmeisse ich es allerdings mit UICtrlCreateListViewItemind die Liste dann macht er mir aus dem ganzen Kram nur noch eine Zeile.

    Ich hatte mir das ganze ungefähr so vorgestellt:

    Spoiler anzeigen

    Verstehe nicht so ganz warum er das nicht sauber macht. Das einzigste was ich dazu gefunden habe ist : GUIDataSeparatorChar
    Da verstehe ich aber nicht wirklich was ich dort eintragen muss.

  • Auf besonderen Wunsch noch einmal das ganze Script:

    Spoiler anzeigen

    Einmal editiert, zuletzt von localhost (2. September 2006 um 22:27)

  • GUICtrlListviewItem erzeugt lediglich eine Zeile.
    Du musst also die Ausgabe zeilenweise splitten und dann für jede Zeile ein eigenes GUICtrlListviewItem erzeugen.

    Also z.B. ganz simpel so:

    Code
    $Zeilen =StringSplit($h, @CR)
    
    
    For $v = 1 to $Zeilen[0] Step 1
        GUICtrlCreateListViewItem($Zeilen[$v], $out)
    Next

    Damit würde jede Zeile in eine eigene Zeile eingetragen.

  • Ja super, das ist genau das was ich gesucht habe.

    Ein kleines Problem habe ich aber noch. Er macht mir jetzt vor jeder Zeile noch so ein häßliches Quadrat.
    Außerdem lässt er zusätzlich immer noch ein Zeile frei. Das liegt aber vermutlich am einlesen.
    Hier noch mal der Code wie er jetzt aussieht:

    Spoiler anzeigen

    [CODE] $i=Run(@ComSpec &" /c ping localhost", @SystemDir, @SW_HIDE, $STDOUT_CHILD+$STDERR_CHILD)
    ProcessWaitClose($i)
    $h=StdOutRead($i)
    If @Error=0 Then $Prt=$h
    $h=StdErrRead($i)
    If @Error=0 Then $Prt = $h
    $Prt=StringReplace($Prt, Chr(154), "Ü")
    $Prt=StringReplace($Prt, Chr(129), "ü")
    $Prt=StringReplace($Prt, Chr(142), "Ä")
    $Prt=StringReplace($Prt, Chr(132), "ä")
    $Prt=StringReplace($Prt, Chr(153), "Ö")
    $Prt=StringReplace($Prt, Chr(148), "ö")
    MsgBox (0,"",$Prt)
    $Zeilen =StringSplit($Prt, @CR)
    For $v = 1 to $Zeilen[0] Step 1
    GUICtrlCreateListViewItem($Zeilen[$v], $out)
    Next
    GUICtrlCreateListViewItem("--------------------------------------------------------------------------------------",$out)[/CODE

    Einmal editiert, zuletzt von localhost (3. September 2006 um 12:01)

  • Die @CRs sind doch durch das Stringsplit schon sowieso rausgefallen.
    Muss also an nem anderen Zeichen liegen.
    Außerdem wäre es da sowieso noch einfacher die StringStripCR-Funktion zu nehmen.

    Das mit den Leerzeilen hängt damit zusammen das wir gesagt haben das er jede Zeile eintragen soll.
    In deinem String hast du aber auch leere Zeilen die auch übertragen werden.

    Du musst also noch eine Abfrage einbauen ob in der Zeile überhaupt was steht.

    Also z.B. dann so:

    Code
    For $v = 1 To $Zeilen[0] Step 1
    	If StringLen(StringStripWS($Zeilen[$v], 8)) > 0 Then
    		GUICtrlCreateListViewItem($Zeilen[$v]), $out)
    	EndIf
    Next

    Einmal editiert, zuletzt von AspirinJunkie (3. September 2006 um 13:09)

  • Ja, so sollte es sein. Wobei ich nach wie vor nicht verstehe, woher das Zeichen am Zeilenanfang kommt.
    Und noch merkwürdiger finde ich, das es in der MessageBox nicht angezeigt wird.
    Die Hilfe lässt sich dazu leider auch nicht genauer aus, worin der Unterschied in der Darstellung von Text besteht.

    Kann man sich solche vermutlich Steuerzeichen auch irgendwie gescheit anziegen lassen?
    Irgendwie muss ich ja herausbekommen, was das für ein Zeichen ist.
    Oder gibt es eine Möglichkeit, das erste Zeichen einer Zeile weg zu schneiden?

    • Offizieller Beitrag
    Zitat

    144 (Dec) 90 (Hex) Hinweis: Wird in dieser kompilierten HTML-Datei nicht angezeigt.

    Das sagt die Hilfe zu deinem Quadrat (darum siehst du es jetzt hier auch nicht :) ).
    Wenn du also deinen String nach diesem Zeichen abfragst und es abschneidest sollte alles in Butter sein.

  • Das scheint es nicht gewesen zu sein. Wo hast du das denn gefunden? Nicht in der Autoit Hilfe oder?

    • Offizieller Beitrag

    Doch, da steht es in der ASCII-Tabelle. Wobei es keinen wirklichen Zusammenhang gibt zwischen dem, was HTML nicht darstellen kann und den nichtdruckbaren Zeichen, die eben per Definition und name nicht druck- und darstellbar sind.

    peethebee

  • Habe zuerst versucht alle Zeichen ein die Liste rein zu schreiben. Also einfachen Zähler der hochzählt und alles anzeigt.
    Dan ach war ich dann sehr enttäuscht. :(
    Da gab es zig Quadrate.
    Also das ganze andersrum. Alles ausgeschlossen.
    Dann endlich erfolg gehabt. War zum Glück keine sehr hohe Zahl.

    Code
    $Prt=StringReplace($Prt, Chr(10), "")

    :hammer:

    Ein Fehler behoben, taucht der nächste auf:

    Code
    case $chk7 <> 0

    Wird ausgeführt , wenn eine Zahl in dem Feld steht. Wird nicht ausgeführt, wenn z.B. ein Name in dem Feld steht.

    Ach ja, es geht um ein GUICtrlCreateInput Feld.

    Einmal editiert, zuletzt von localhost (3. September 2006 um 22:35)

  • Boah, wird Zeit, das ich ins Bett komme. Das war wieder zu einfach. Danke, das hier auch so idiotische Fragen beantwortet werden :klatschen::klatschen::klatschen::klatschen::klatschen: