Ja ist es. Denn das Script sucht nun nach Zahlen von 1-12, und wenn diese Vorhanden sind, gibt es die Fehlermeldung. Der RegEx muss umgedreht werden. Aber ich weiß grad nich wirklich wie (So viel ahnung von Regex hab ich dann doch nicht.) Warte einfach mal bis Bugfix den Thread findet. Der weiß bescheid
Beiträge von SEuBo
-
-
Das liegt einfach daran, dass ein IP-Adressenfeld kein "gewöhnliches Control" ist, sondern ein, per DLL in 4 Felder aufgeteiltes Input Feld. Diese "Teilfelder" müssen erstmal wieder zusammengesetzt werden. Deswegen kannst du die entsprechenden DLL funktionen selber aufrufen, oder du lässt die UDF das machen, und benutzt einfach den von Schnitzel genannten Befehl.
-
Ganz einfach: Mit einem Array und dem Befehl Execute() (der führt einen AutoIt Befehl aus)
Hier ein Beispiel, das musst du dann entsprechend in deine GUI einbauenSpoiler anzeigen
[autoit]#include <Array.au3>
[/autoit] [autoit][/autoit] [autoit]
#include <GUIConstantsEx.au3>
Global $Checkbox[21];Wir schreiben alle Befehle in einen Array!
[/autoit] [autoit][/autoit] [autoit]
;So die lange Form (Nur zum Verständniss);~ Global $Befehle[21]
[/autoit] [autoit][/autoit] [autoit]
;~ $Befehle[0] = 'MouseMove(200,300)'
;~ $Befehle[1] = 'MsgBox(0,"","Hallo!")'
;~ $Befehle[2] = 'ConsoleWrite("Ich bins, nummer 2!"@CRLF)'
;~ $Befehle[3] = 'WinMinimizeAll()'
;~ $Befehle[4] = 'ShellExecute("calc.exe")'
;~ $Befehle[5] = '_ArrayDisplay($Befehle)'
;~ $Befehle[6] = 'ConsoleWrite("Ich bins, nummer 6!"@CRLF)'
;~ $Befehle[7] = 'MouseMove(500,600)'
;~ $Befehle[8] = 'MsgBox(0,"","Miau!")'
;~ $Befehle[9] = 'ShellExecute("notepad.exe")'
;~ $Befehle[10] = 'MouseMove(900,250)'
;~ $Befehle[11] = 'MsgBox(0,"","Hallööchen!")'
;~ $Befehle[12] = 'ConsoleWrite("Ich bins, nummer 12!"@CRLF)'
;~ $Befehle[13] = 'WinMinimizeAllUndo()'
;~ $Befehle[14] = 'ShellExecute("paint.exe")'
;~ $Befehle[15] = '_ArrayDisplay($Checkbox)'
;~ $Befehle[16] = 'ConsoleWrite("Ich bins, nummer 16!"@CRLF)'
;~ $Befehle[17] = 'MouseMove(500,600)'
;~ $Befehle[18] = 'MsgBox(0,"","Wuff!")'
;~ $Befehle[19] = 'ShellExecute("www.autoit.de")'
;~ $Befehle[20] = 'MsgBox(0,"","Das war die letzte")';Die Kurzform wäre:
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
Global $Befehle[21] = ['MouseMove(200,300)','MsgBox(0,"","Hallo!")','ConsoleWrite("Ich bins, nummer 2!"@CRLF)','WinMinimizeAll()','ShellExecute("calc.exe")','_ArrayDisplay($Befehle)','ConsoleWrite("Ich bins, nummer 6!"@CRLF)','MouseMove(500,600)','MsgBox(0,"","Miau!")','ShellExecute("notepad.exe")','MouseMove(900,250)','MsgBox(0,"","Hallööchen!")','ConsoleWrite("Ich bins, nummer 12!"@CRLF)','WinMinimizeAllUndo()','ShellExecute("paint.exe")','_ArrayDisplay($Checkbox)','ConsoleWrite("Ich bins, nummer 16!"@CRLF)','MouseMove(500,600)','MsgBox(0,"","Wuff!")','ShellExecute("www.autoit.de")','MsgBox(0,"","Das war die letzte")']Global $y = 24
[/autoit] [autoit][/autoit] [autoit]$GUI = GUICreate("GUI",200,700)
[/autoit] [autoit][/autoit] [autoit]
For $i = 1 To 20
$Checkbox[$i] = GUICtrlCreateCheckbox("Checkbox"&$i,20,$y)
$y += 24
Next
$Run = GUICtrlCreateButton("Ausführen",20,670)
GUISetState(@SW_SHOW)_ArrayDisplay($Befehle)
[/autoit]
While 1
$msg = GUIGetMsg()
Switch $msg
Case -3
Exit
Case $Run
For $i = 1 to 20
If GUICtrlRead($Checkbox[$i]) = $GUI_CHECKED Then Execute($Befehle[$i])
Next
EndSwitch
WEnd -
So vielleicht?
Spoiler anzeigen
[autoit];*******************************************************************
[/autoit] [autoit][/autoit] [autoit]
;** Programm: schiessen **
;*******************************************************************
;** Autor: **
;** Datum: 2.12.09 **
;** Version 1.0 **
;*******************************************************************
;** Beschreibung **
;** kleines soiel bei dem man immer auf den scheiben klicken tut **
;** scheibe spawt rnd **
;*******************************************************************
#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>Fileinstall("star.bmp", @TempDir & "\" & "star.bmp", 1)
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]$GUI = GuiCreate("Title",400,420) ;Breite,Höhe, Position X auf Bildschirm, position Y auf Bildschirm
[/autoit] [autoit][/autoit] [autoit]
$start = GUICtrlCreateButton("Start",0,0,400,20)
;erstellt den Ziel Button außerhalb der GUI.
$Ziel = GUICtrlCreateButton("Ziel", -200, -200, 40, 40, BitOR($BS_BITMAP,$WS_GROUP))
;~ GUICtrlSetImage(-1, "star.bmp", -1)
$Punkte = 0GuiSetState()
[/autoit] [autoit][/autoit] [autoit]
While 1
$msg = GuiGetMsg()
Switch $msg
Case -3
Exit
Case $start
_MoveZiel();Verschiebt den BUtton in den sichtbaren bereich
Case $Ziel
$Punkte += 1 ; Gibt einen Punkt mehr
_MoveZiel() ; Verschiebt den Button in den sichtbaren Bereich
ConsoleWrite("Punkte: "&$Punkte&@CRLF)
EndSwitch
WendFunc _MoveZiel()
[/autoit]
;Verschiebe den Button an eine zufällige Position innerhalb der GUI
ControlMove($GUI,"",$Ziel,Random(0,360), Random(20,360))
EndFunc -
Schau mal hier:
Die übergeordneten "Kategorien" also Germane, Römer, Gallier lassen sich nicht auswählen - mal abgesehen davon, dass sie viel cooler formatiert sind.
-
<- Vista x86. Klappt.
-
http://hilfe.travian.de/research/times.php
Habe da grade so "entlanggesurft" und mich gefragt ob sowas auch in AutoIt möglich ist.Das würde einem ja helfen eine Combobox übersichtlicher zu gesalten.
-
is aber nur ein wurst brot käse käufer
Du meinst wohl Wurst, Käse, Brot, Drogen und Schl***en... Du Pimp, du
-
Dann machs doch auf die "Langweilige Art"
Spoiler anzeigen
[autoit]#AutoIt3Wrapper_au3check_parameters=-d -w 1 -w 2 -w 3 -w 4 -w 5 -w 6
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
#include <GuiConstantsEx.au3>
#include <GuiListView.au3>$Debug_LV = False ; Check ClassName being passed to ListView functions, set to True and use a handle to another control to see it work
[/autoit] [autoit][/autoit] [autoit]
Global $Selected = -1
_Main()Func _Main()
[/autoit] [autoit][/autoit] [autoit]
Local $hListViewGUICreate("ListView Get Selection Mark", 400, 300)
[/autoit] [autoit][/autoit] [autoit]
$hListView = GUICtrlCreateListView("", 2, 2, 394, 268, BitOR($LVS_SHOWSELALWAYS, $LVS_REPORT))
GUISetState(); Add columns
[/autoit] [autoit][/autoit] [autoit]
_GUICtrlListView_AddColumn($hListView, "Column 1", 100); Add items
[/autoit] [autoit][/autoit] [autoit]
_GUICtrlListView_AddItem($hListView, "Item 1")
_GUICtrlListView_AddItem($hListView, "Item 2")
_GUICtrlListView_AddItem($hListView, "Item 3"); Select multiple items
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
;~ _GUICtrlListView_SetSelectionMark($hListView, 2); Loop until user exits
[/autoit]
Do
IF $Selected <> _GUICtrlListView_GetSelectionMark($hListView) Then
$Selected = _GUICtrlListView_GetSelectionMark($hListView)
MsgBox(0,"","die Listview wurde angeklickt ("&$Selected&")")
EndIf
Until GUIGetMsg() = $GUI_EVENT_CLOSE
GUIDelete()
EndFunc ;==>_Main -
Warum bin ich eigentlich so nett? x)
Warum du so "nett" bist, ihm auch noch die falschen Antworten zu sagen, kann ich dir beim besten Willen leider auch nicht verraten.
-
Wie kann ich dem Progress mit ProgressSet, Prozente zuweisen abhängig vom laden einer Internetseite?Garnicht. Die einzigen Werte die du "abrufen" kannst ist 1. wenn navigation beginnt, 2. Wenn Navigation fertig.
Hab grade das halbe MSDN durchsucht, aber da ist nichts beschriebem. Höchstens den aktuellen Status eines Download kann man abfragen, nicht aber den der Navigation -
Hier ein Regex der (hoffentlich) alle kombinationen von Zahlen bis 12 und Buchstaben zulässt:
[autoit]
zb: Test12Test, 1Test2Test3, Test, 1, 12, 12Test aber nicht 25, 25Test, Test2Test54R usw.StringRegExp($String,"\b([a-zA-Z]+(1[0-2]|[0-9]|\b))+[a-zA-Z]*|\b(1[0-2]|[0-9])((([a-zA-Z]+)+((1[0-2]|[0-9])|\b))+\b|\b)")
[/autoit]
[autoit]
Und hier nur für zahlen von 1-12
[/autoit]
StringRegExp($String,"\b(1[0-2]|\d)\b")Bugfix kann den ersten RegEx wahrscheinlich kürzer schreiben.
Hier meine Testliste:Spoiler anzeigen
Zitattest2 <- Ja
Test1 <- Ja
24test <- Nein
12tes <- Ja
Test12Test <- Ja
12Test2122323 <- Nein
12Test122 <- Nein
12Test12Test12Ttest12 <- Ja
Test12Test2Test3sX2 <- Ja
1 <- Ja
12 <- Ja
Test <- Ja -
Spoiler anzeigen
[autoit]
[/autoit] [autoit][/autoit] [autoit]
;~ Hallo Sp3333dy,
;~ Ich habe mir wirklich viel Mühe gegeben, um das hier so ausgiebig zu kommentieren. (ca 2 stunden)
;~ Wenn du allerdings noch Fragen hast, dann stell sie. Aber bitte krame nicht wieder eine ganz neue
;~ Version aus, in der du wieder absolut undynamisch (ohne Schleifen) arbeitest. Das wäre
;~ eine Vergewaltigung von AutoIt :P. Ich habe versucht den Code so einfach wie Möglich zu halten,
;~ wenn du aber etwas nicht verstehst, dann ist das nicht schlimm - wir waren alle mal anfänger.
;~
;~ Ich hoffe das funktioniert jetzt so, wie du es dir vorgestellt hast, und noch viel mehr hoffe ich,
;~ dass ich dir damit ein wenig helfen konnte das Thema Arrays bzw. Schleifen zu verdeutlichen.
;~ Ich habe versucht, auf so viele deiner Fragen aus der Shoutbox wie möglich einzugehen, zB: Wie man einer,
;~ in einer Schleife erstellten, einzelner Checkbox eine funktion zuweisen kann. Ich habe dafür 2 Beispiele
;~ geschrieben. (eins ist noch auskommentiert - siehe Zeile 69 ff.). Speichert und laden funktionert jetzt
;~ Hoffentlich so wie du es wolltest. Wenn sich mir trotzdem ein Fehler eingeschlichen hat, verzeih mir das
;~ bitte.
;~
;~ Die ganzen Sleeps. MsgBoxen und Kommentare kannst du selbstverständlich löschen, wenn du sie nicht mehr
;~ brauchst. Lieben Gruß
;~
;~ SEuBo
;~ Und nochmal : Wenn du immernoch was nicht verstehst: Einfach fragen, aber versuch bitte dich ein bisschen
;~ Mit den Themen auseinander zu setzen. Es gibt sehr gute Tutorials die mir selbst unglaublich geholfen haben
;~ Bugfix zb hat sehr gute Tutorials in seiner Signatur, oder du gehst auf
;~
;~
;~ http://wiki.autoit.de/wiki/index.php/Tutorial
;~
;~
;~ Ich glaube dieses Tutorial hat mir Anfangs alles wichtige beigrebacht - Zusätzlich habe ich natürlich fleißig
;~ Die AUtoIt Hilfe studiert#include <WindowsConstants.au3>
[/autoit] [autoit][/autoit] [autoit]
#include <StructureConstants.au3>
#include <GUIConstantsEx.au3>
#include <Array.au3>
#region - GUI Create
$Form1 = GUICreate("Form1", 293, 380, 244, 280)
MsgBox(0,"","Wir erstellen jetzt die Checkboxen in einer Schleife. Diese werden in einen Array geschrieben. Wir machen das jetzt mal extra langsam, damit du zugucken kannst. normalerweise geht das viel schneller ;)")
Global $Checkbox[121],$x = 8, $y = 64
$Checkbox[0] = "In dieser Spalte stehen die ID's"
GUISetState()
FOr $i = 1 to 120
$Checkbox[$i] = GUICtrlCreateCheckbox("",$x,$y,17,17)
$x += 24 ; Eine Spalte nach rechts.
Switch $i
Case 12,24,36,48,60,72,84,96,108 ; Du hattest immer 12 Checkboxen in einer Zeile. Also wird nach Checkbox12, 24, 36 usw. die nächste Zeile begonnen
ToolTip("Eine Reihe ist fertig"&@CRLF&"Jetzt kommt die nächste Zeile"&@CRLF&"Wir sind grade bei Checkbox"&$i)
$x = 8 ; Wir fangen wieder (fast) ganz links an ( X Koordinate 8 )
$y += 24 ; Und wir gehen eine Zeile tiefer
Sleep(1500)
ToolTip("")
EndSwitch
Sleep(150)
NextMsgBox(0,"","Die Checkboxen sind fertig. Wir haben jetzt alle IDs in einem Array. Also in einer übersichtlichen Liste. "&@CRLF&"Die ID ist das, was beim erstellen einer Control (also einem Lable, einer Checkbox, einem Button usw.) zurückgegeben wird. "&@CRLF&@CRLF&"Wenn du z.B: schreibst"&@CRLF&"$Button = GUICtrlCreateButton()"&@CRLF&"dann enthält $Button die Control ID (z.B.: 12). Probier es aus: Erstelle einmal einen Button, und schreibe darunter"&@CRLF&"MsgBox(0,"",$Button)."&@CRLF&@CRLF&"Ich zeige dir nun wie der Array aussieht ;)")
[/autoit] [autoit][/autoit] [autoit]
_ArrayDisplay($Checkbox)
MsgBox(0,"","Es ist also quasi eine Liste nach folgendem Schema (nur hast du sie mit seeeehr viel weniger Arbeit erstellt):"&@CRLF&"$Checkbox1"&@CRLF&"$Checkbox2"&@CRLF&"$Checkbox3"&@CRLF&"$Checkbox4"&@CRLF&"$Checkbox5"&@CRLF&"$Checkbox6"&@CRLF&"$Checkbox7"&@CRLF&"$Checkbox8"&@CRLF&"$Checkbox9"&@CRLF&"$Checkbox10")$Laden = GUICtrlCreateButton("Laden", 8, 312, 75, 25, $WS_GROUP)
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
$Speichern = GUICtrlCreateButton("Speichern", 88, 312, 75, 25, $WS_GROUP)
$Ausfuehren = GUICtrlCreateButton("Ausführen", 8, 344, 155, 25, $WS_GROUP)#endregion
[/autoit] [autoit][/autoit] [autoit]#region - GUI SelectLoop
[/autoit] [autoit][/autoit] [autoit]
While 1
$msg = GUIGetMsg()
Switch $msg
Case $GUI_EVENT_CLOSE
Exit
Case $Speichern
_Speichern()
Case $Laden
_Laden()
Case $Checkbox[99] ; Die musst du schon selber suchen
MsgBox(0,"","WOW! DU hast die geheime Checkbox Nr 99 gefunden! Wie du siehst kann man auch einzelnen Checkboxen noch Funktionen zuweisen!")
MsgBox(0,"","Das geht übrigens AUCH in schleifen. Ich habe im Quelltext mal ein Beispiel gemacht, bei dem ein klick auf jede 7te Checkbox eine Aktion auslöst.")
EndSwitch
;---> Hier ist dieses Beispiel (Es ist ganz wichtig, dass es außerhalb des Select-Endselect / Switch-Endswitch-Bereiches steht.
;---> Bei dieser Schleife müssen wir mit 7 starten. Damit es 7-14-21-28-35 usw. geht. Sonst wäre es eine 1-8-15-22-29 usw Schleife.
;~ For $i = 7 to 120 Step 7 ;--> Hier wird die komplette Schleife in 7er Schritten abgearbeitet. Also jede 7te Checkbox wird überprüft.
;~ If $msg = $Checkbox[$i] Then MsgBox(0,"","Die Checkbox Nr."&$i&" ist angeklickt. Diese Checkbox hat die ID: "&$Checkbox[$i]&@CRLF&@CRLF&"Das war übrigens eine Checkbox in der For-Next-Step 7 - Schleife.",10)
;~ Next
WEnd
#endregionFunc _Speichern()
[/autoit] [autoit][/autoit] [autoit]
$Ini = FileSaveDialog("Speichern...",@ScriptDir,"Ini-Dateien (*.ini)")
If not @error Then ; falls kein Fehler (zb schließen des Speichern-Fensters) aufgetreten ist, führe die Aktionen zum Speichern aus
MsgBox(0,"","Okey, wir gehen jetzt jede Checkbox, die im Array ist durch. Das ist das gleiche wie wenn du schreibst"&@CR&"If GUICtrlRead($Checkbox1) = $GUI_CHECKED Then ..."&@CR&"If GUICtrlRead($Checkbox2) = $GUI_CHECKED Then...,"&@CR&"Mit der Ausnahme, dass es kürzer und SCHNELLER ist! (und weeeeeeniger Tipparbeit!)")
For $i = 1 to 120 ; Hier sollte man besser Ubound($Checkbox)-1 benutzen. Sonst müsstest du, wenn du statt 120 vielleicht mal 140 Checkboxen einbauen willst,
; diesen Wert für jede Schleife Von Hand ändern.
If GUICtrlRead($Checkbox[$i]) = $GUI_CHECKED Then
MsgBox(0,"","Die Checkbox Nr."&$i&" ist angeklickt. Diese Checkbox hat die ID: "&$Checkbox[$i],3)
IniWrite($Ini,"Checkboxen","Checkbox"&$i,1) ; Wenn die Checkbox angehakt war, dann schreibe das in die Ini
Else
IniWrite($Ini,"Checkboxen","Checkbox"&$i,0) ; Wenn nicht, schreibe es auch in die Ini! (also dass sie nicht angehackt war)
EndIf
Next
If MsgBox(4,"","Mit dem schreiben der .ini sind wir jetzt fertig. Willst du Sie dir mal ansehen?") = 6 Then ShellExecute($Ini)
EndIf
EndFuncFunc _Laden()
[/autoit]
$Ini = FileOpenDialog("Laden...",@ScriptDir,"Ini-Dateien (*.ini)") ;Wählt die Datei aus
If Not @error Then ; falls die Datei erfolgreich ausgewählt wurde (Dialog nicht geschlossen usw),
MsgBox(0,"","Jetzt lesen wir die .ini Datei ein. Und versuchen die Werte für 'Checkbox1'-'Checkbox120' einzulesen. Wenn der Wert nicht gefunden werden konnte, gilt das automatisch als 'nicht angehakt', wegen dem letzen parameter von IniRead(): Dem Default wert. Dieser Gibt an, welcher wert benutzt werden soll, wenn der 'Schlüssel' in der Ini nicht gefunden wird. Wenn er also versucht den Wert von Checkbox 20 aus der Ini zu lesen, aber das wort 'Checkbox20' nicht findet, dann gibt der Default Parameter an, welcher Wert stattdessen benutzt werden soll.")
For $i = 1 to 120 ;hier wieder die altbekannt Schleife mit 120 Durchläufen.
If IniRead($Ini,"Checkboxen","Checkbox"&$i,0) = 1 Then
MsgBox(0,"","Laut .ini Datei war Checkbox"&$i&" angeklickt. Das Skript stellt diesen zustand also wieder her ( GUICtrlSetState($Checkbox["&$i&"],$GUI_CHECKED) )")
GUICtrlSetState($Checkbox[$i],$GUI_CHECKED)
Else
GUICtrlSetState($Checkbox[$i],$GUI_UNCHECKED)
EndIf
Next
EndIf
EndFunc -
War aber nur für "Numbers-Only"
Habs mal schnell umgebastelt. -
Ich hatte da mal was im englischen Forum gesehen. Ich such mal schnell danach
-
Poste doch bitte nochmal deinen aktuellen code & Link zu der seite. Vielleicht find ich ja ne Lösung
-
Schau dir mal den DeskLock von Sen an.
Da wird der Taskmanager auf jeden Fall so deaktiviert, dass er auch nach einem "unsauberen" schließen des Skriptes wieder aktiviert wird. Weiß aber gerade nicht mehr genau wie es da gemacht wurde, aber ich glaube per DLL. Schau's dir halt mal an. -
Ich habe das auch mal eingebunden und bei der Gelegenheit einen Fehler aus _ArrayDisplay() gleich noch gefixt:
Wäre das nicht ein Kandidat für deine ArrayMore.au3? Ich pack mir die Funktion auf jeden fall da rein.
-
WIE BAUE ICH EINEN BOT UND VERRATE ES NICHT
-
Hoffe ich habe ausreichend kommentiert.
[autoit]
Die ursprüngliche Schleife fügt ja der $x Koordinate ( welche eigentlich $y heißen müsste - $x = horizontal, $y = vertikal ) immer 24 pixel hinzu. Das Sorgt dafür dass die Checkboxen untereinander erstellt werden.
Würde man die Schleife ausschreiben sähe das so aus:GUICtrlCreateCheckbox($acheckBox[0][0], 352, 48, 97, 17)
[/autoit]
GUICtrlCreateCheckbox($acheckBox[1][0], 352, 72, 97, 17)
GUICtrlCreateCheckbox($acheckBox[2][0], 352, 96, 97, 17)
GUICtrlCreateCheckbox($acheckBox[3][0], 352, 120, 97, 17)usw...
[autoit]
Nun sagen wir aber der schleife, dass sie nach dem 2ten Durchlauf ( also nach GUICtrlCreateCheckbox(aCheckbox[2][0] ...))
Die X-Koordinate vergrößern soll (zb um 100 pixel), und Y wieder auf den Ursprungswert zurücksetzen soll Das sieht dann so aus:GUICtrlCreateCheckbox($acheckBox[0][0], 352, 48, 97, 17)
[/autoit]
GUICtrlCreateCheckbox($acheckBox[1][0], 352, 72, 97, 17)
GUICtrlCreateCheckbox($acheckBox[2][0], 352, 96, 97, 17)
GUICtrlCreateCheckbox($acheckBox[3][0], 452, 48, 97, 17)
GUICtrlCreateCheckbox($acheckBox[4][0], 452, 72, 97, 17)Hier die schleife wie sie sein sollte :
Spoiler anzeigen
[autoit]Local $acheckBox[6][2] = [["Checkbox", 1],["Checkbox1", 1],["Checkbox2", 1],["Checkbox3", 1],["Checkbox4", 1],["Checkbox5", 1]]
[/autoit]
Local $checkErstellen[6], $x = 352, $y = 48
For $i = 0 To 5
$checkErstellen[$i] = GUICtrlCreateCheckbox($acheckBox[$i][0], $x, $y, 97, 17)
$y += 24
Switch $i ; Fragt den aktuellen Durchlauf bzw. Index ab
Case 2 ; Bei Durchlauf nummer 2... (für eine dritte spalte machst du einfach "Case 2,5")
$x += 100 ; Füge der $x position 100 pixel hinzu, (ändere diesen wert mal um zu sehen, was passiert)
$y = 48 ; und $y wird wieder auf den ursprünglichen Wert gesetzt, also hat jetzt wieder die gleiche höhe wie "Checkbox"
; Schreibe mal zum Testen $x += 50 und $y = 30. Dann siehst du sehr gut wie das ganze funktioniert.
EndSwitch
NextEDIT : ausführlich beschrieben