Was ist $nMsg ?

  • Hey, ihr habt mir vor ein paar Tagen ein script gebaut, der einwandfrei läuft. aber eine sache verstehe ich darin leider nicht. wie erkennt der script, was für ein array angeklickt wurde ?
    ich vermute mal, dass es in der 2. spalte passiert. könnt ihr mir bitte erklären, was autoit da genau macht ?

    danke

  • Ist aus Deinem Code schwer zu erkennen aber ich vermute, dass $nMsg die ControlID des ausgewählten Controls des GUI ist.

  • Zeile 2 ist schon richtig.
    Hier wird ausgenutzt, dass in AutoIt die ControlIDs einfach durchnummeriert werden. Deshalb, wenn eines der Controls angeklickt wird, einfach prüfen, ob es zwischen dem 1ten und letzen Control im Array liegt. Wenn ja, dann ausführen. Dadurch dass von der Message die ID des ersten Elementes abgezogen wird, erhält man dadurch den Index des Arrays.
    Das Funktioniert natürlich NUR, wenn die Controls auch alle Hintereinander erstellt werden und von vorne nach hinten in das Array geschrieben werden.

    Beispiel (muss nicht funktionieren, war ausm kopf und nur zur erklärung. Nummerierung fängt evtl. auch bei 0 an. Musst du ausprobieren :)):

    GuIGetMsg() gibt nämlich einfach die Nummer des Controls (Also die ID) aus, die geklickt wurde.

  • $nMsg ist eine Variable, welche du in deinem Urspungsskript selbst benzutzt hast:

    Code
    $nMsg = GUIGetMsg()


    Für die Lösung deines Problems habe ich die Controll-IDs der Radios in einem Array gespeichert. Da die ich die Radios in einer For...Next Schleife erzeuge sind sie fortlaufend.

    Code: ein Radio in der 1. Spalte wurde geklickt
    Case $idRadios[0][0] to $idRadios[6][0]

    Wenn man also von $nMsg (welche ja die durch GuiGetMsg ermitteltete ControlID des Controls repräsentiert welches geklickt wurde) die ControlID des ersten im Array gespeicherten Radios abzieht erhält man die Position im Array.

    Code
    $iRadioGrp0 = $nMsg - $idRadios[0][0]


    Das ganze kannst du ja in der Scitekonsole beobachten:

    Code
    ConsoleWrite($iRadioGrp0&' = ' &GUICtrlRead($idRadios[$iRadioGrp0][0],1)&@CRLF)

    hier wird immer der Text des geklickten Radios ausgegeben. Die 8. Zeile des Arrays (da 0 basiert $idRadios[7][x]) benutze ich zum zwischenspeichern bzw. anzeigen der zuletzt versteckten Radios:

    AutoIt: anzeigen
    GUICtrlSetState($idRadios[7][1],$GUI_SHOW)		;evtl. versteckes mittleres Radio zeigen
    GUICtrlSetState($idRadios[7][2],$GUI_SHOW)		;evtl. versteckes rechtes Radio zeigen
    AutoIt: zwischenspeichern, unCHECKen und verstecken
    If GUICtrlRead($idRadios[$iRadioGrp0][0]) Then
    	$idRadios[7][1] = $idRadios[$iRadioGrp0][1] ;mittleres Radio merken
    	$idRadios[7][2] = $idRadios[$iRadioGrp0][2] ;rechtes Radio merken
    	GUICtrlSetState($idRadios[$iRadioGrp0][1], $GUI_UNCHECKED) ;verhindern von unsichtbar gecheckten Radios
    	GUICtrlSetState($idRadios[$iRadioGrp0][2], $GUI_UNCHECKED) ;verhindern von unsichtbar gecheckten Radios
    	;besser als Hide und Show wäre Disable und Enable ohne ist manuelles unckecken nötig
    	GUICtrlSetState($idRadios[$iRadioGrp0][1], $GUI_HIDE)
    	GUICtrlSetState($idRadios[$iRadioGrp0][2], $GUI_HIDE)
    EndIf

    du siehst das ganze Konzept beruht auf den fortlaufenden ControlID's (durch erstellen in Schleife gewährleistet) und einer einfachen Rechenformel.

    Edit: Skript schreiben geht deutlich schneller als erlären, als ich angefangen habe hatte Water noch nicht geantwortet.

    Einmal editiert, zuletzt von autoBert (28. April 2016 um 23:16)