GUI Labels als Array ansprechen

  • Hallo, ich habe schon fleißig gegoogelt aber für AutoIT leider keine Lösung gefunden, ich habe folgendes Problem:

    Ich habe 10 Labels die ich gerne als Array behandeln würde sodass ich deren Text je nach dem was die Funktion zurück gibt ändern kann.

    Beispiel:

    Ich habe eine Funktion die 10 Links einliest und diese auf ihre Verfügbarkeit überprüft, das ist alles als Array geschehen,

    nun sollen die Ergebnisse in der GUI angezeigt werden. Heißt das erste Ergebnis ist 1 -> Label1 = 1, das zweite Ergebnis ist 5, Label2 = 5.

    Im Endeffekt also label[$x] = ergebnis[$x]

    Vielen Dank für jegliche Hilfe.

    2 Mal editiert, zuletzt von BehindSouls (5. März 2018 um 15:40)

  • Wieso löst du das ganze denn nicht mit einer For-Schleife?

    Du kannst doch dann, wenn die die Labelcontrols in einem Array erstellst dann dein Ergebnisarray iterieren und GUICtrlSetData zum Setzen der Ergbenisse verwenden.

    AutoIt
    Local $aControls[2] = [$hLabel1, $hLabel2]
    
    For $i = 0 To UBound($aControls) - 1
        $iErgebnis = _DoSomething()
    
        GUICtrlSetData($aControls[$i], "Ergebnis: " & $iErgebnis)
    Next
  • Das erinnert mich an was. Hab genau sowas mal gebastelt, um ein paar (interne) Hosts per Ping auf Verfügbarkeit zu prüfen. Das war vor einiger Zeit das Haupt-Ferndiagnosewerkzeug bei uns in der Firma (Anruf bei mir -> "Starte mal das Programm und sag mir mal, ob was rot ist!" -> "Jaaa, die 192.168.123.100 ist rot!" -> "Geh mal in mein Büro und mach den Medion-Rechner wieder an!").

    In einer Datei namens hosts.txt im Arbeitsverzeichnis stehen die ganzen Hosts, einer pro Zeile.

  • chesstiger

    Habe den Code gerade mal ausgeführt - kann es sein dass da eine kleine "Ungereimtheit" darin steckt? Der ausführende Rechner steht bei mir in der Hosts.txt. Dadurch wird versucht den Rechner auf dem DEIN Programm ausgeführt wird anzupingen mit dem Ergebnis ROT. Was ja def. falsch ist.

    Natürlich könnte man den "Start" Rechner aus der Hosts.txt raus lassen - aber dann müßte man ja für jeden Rechner im Netz eine eigene Hosts.txt erstellen.

    Ev. Die IP des Start Rechners ermitteln und dann "zwangsweise" auf Grün setzen bzw. die "Start" Rechner IP erst gar nicht anpingen...

    Danke für den netten Code


    Gruß

    Peter

    PS.. ICh wollte nicht in Deinem Code rumfummeln :) . BS = XP SP3

    Hinweise auf Suchmaschinen finde ich überflüssig - wer fragt hat es nicht gefunden oder nicht verstanden. Die Antwort gibt sich oftmals schneller als der Hinweis auf Dr. Goggle & Co.

    Ab 19-10-22 ergänzt um:

    Die Welt wird nicht bedroht von den Menschen, die böse sind, sondern von denen, die das Böse zulassen. (Albert Einstein)

  • Hmmm,

    ich kann das tatsächlich nicht nachvollziehen. Da ich aber nicht farbenblind bin.... :

    Anyway der eigene Computer ist tatsächlich auch grün.

    Ziehe # 6 mit dem Ausdruck des Bedauerns zurück, Habe Code compiliert - kommt in den Wekzeugkasten - sollte das nochmal vorkommen (Grün /Rot eigene IP) versuche ich dem auf den Grund zu gehen.

    Gruß

    Peter

    Hinweise auf Suchmaschinen finde ich überflüssig - wer fragt hat es nicht gefunden oder nicht verstanden. Die Antwort gibt sich oftmals schneller als der Hinweis auf Dr. Goggle & Co.

    Ab 19-10-22 ergänzt um:

    Die Welt wird nicht bedroht von den Menschen, die böse sind, sondern von denen, die das Böse zulassen. (Albert Einstein)

  • Peter S. Taler

    Es könnte vllt. sein, dass mal ein Ping verloren geht. Zur Sicherheit könntest du den Ping in eine eigene For Schleife packen und max. dreimal ausführen, bis das Ergebnis kein Fehler ist oder die Durchläufe absolviert sind. Das würde das Skript auch nicht ewig langsamer machen.

    Grüße autoiter

  • Es könnte vllt. sein, dass mal ein Ping verloren geht. Zur Sicherheit könntest du den Ping in eine eigene For Schleife packen und max. dreimal ausführen,

    Mit anderen Worten... den Parameter $iTimeOut auf 3000 setzen. 8o

    Habe das Script bei mir getestet und es läuft einwandfrei und ohne Fehler.

    Die Funktion labelSetScheme habe ich allerdings etwas verkürzt...

    AutoIt
    Func labelSetScheme($cLabel, $iScheme)
        Local Static $aSchemes = [[0xCCFF33, 0x336600], [0xFF9933, 0x993300], [0xFFFF66, 0x996633], [0xFFFFFF, 0x000000]]
    ;~     If $iScheme < 0 Or $iScheme >= UBound($aSchemes) Then Return SetError(1, 0, False)
        GUICtrlSetBkColor($cLabel, $aSchemes[$iScheme][0])
        GUICtrlSetColor($cLabel, $aSchemes[$iScheme][1])
    EndFunc
  • Mit anderen Worten... den Parameter $iTimeOut auf 3000 setzen.

    Hehe, nein das meinte ich nicht Bitnugger

    Ich habe wirklich spekuliert, dass mal ein Ping verloren gehen kann. Daher würde ich eine Wiederholung vorziehen. Ist aber vllt. Quatsch und mein persönlicher Voodoo Zauber :D

    Grüße autoiter

  • Ich habe wirklich spekuliert, dass mal ein Ping verloren gehen kann.

    Nun, bis data ist mir noch nie ein Ping verloren gegangen... und wäre dem so, würde ich das Problem nicht einfach mit einer For-Schleife kaschieren, sondern die Ursache dafür finden wollen. ;)

  • Bitnugger

    Ja, so kann man es kürzen. Macht ab einer gewissen Komplexität auch Sinn. Ich hatte Langeweile und habe das ganze bspw. noch um ein paar Icons erweitert:

    Das Child Window pro Zeile ist notwendig, damit man den Hintergrund der Icons mitverändern kann. Woher diese seltsame Abstufung kommt, weiß ich aber leider auch nicht...