Kennt jemand ne Möglichkeit die Abfrage von 3 Combos intelligenter zu machen als mit Case-Abfragen? Also:Wenn zum Bsp. In der Ersten Combo "Test5" steht, in der zweiten "Tetro4" und in der 3. "Was7"
Dann soll ne Msg Box kommen(zu Testzwecken) mit "Sie haben ausgewählt: Test5, Tetro4, Was7"
Eine Übernahme in Variablen ist leider nicht möglich, da ich je nach Namen koordinaten setzen muss.
Schon wieder Problem mit Trainer
-
- [ offen ]
-
Fast2 -
17. November 2007 um 08:22 -
Geschlossen -
Erledigt
-
-
ich bin mir nicht sicher ob ich dich richtig verstanden habe, aba versuch mal das:
[autoit]while 1
[/autoit]
if guictrlread($Combo1) = "Test5" and guictrlread($combo2) = "Tetro4" and Guictrlread($combo3) = "Was7" then msgbox(0,"","")
sleep(100)
wendhoffe mal das du das gemeint hast
-
Ne ich hab gemeint:
Spoiler anzeigen
[autoit]
[/autoit]
Select
Case $Combo1 = 3 And $Combo2 = 2 And Combo3 = 8
$Klick_für_Combo1 = MouseClick("left", $X_Koordinate1, $Y_Koordinate1, 2, 7)
$Klick_für_Combo2 = MouseClick("left", $X_Koordinate2, $Y_Koordinate2, 2, 7)
$Klick_für_Combo3 = MouseClick("left", $X_Koordinate3, $Y_Koordinate3, 2, 7)
Case $Combo1 = 4 And $Combo2 = 2 And $Combo3 = 8
$Klick_für_Combo1 = MouseClick("left", $Andere_X_Koordinate1, $Andere_Y_Koordinate1, 2, 7)
$Klick_für_Combo2 = MouseClick("left", $Andere_X_Koordinate2, $Andere_Y_Koordinate2, 2, 7)
$Klick_für_Combo3 = MouseClick("left", $Andere_X_Koordinate3, $Andere_Y_Koordinate3, 2, 7)
;Und so weiter und so fort... -
geht das script denn bisher oda nich? weil $Klick_für_Combo1...kann man nicht schreiben. äöü draf man nich in eine variable schreiben.
-
Ja. Das war ja nur aus Kopf getippt Des restliche Script is ja noch nicht fertig. Und würde eh nicht laufen.
-
Mein Orginalscript hat erst eine fertige Combo und die andere is noch nicht fertig da. Aber hier is es:
Spoiler anzeigen
[autoit]#cs -----------------------------------------------------
[/autoit] [autoit][/autoit] [autoit]
AutoIt Version: 3.2.8.1
Von: Fast2Funktion:DragRacer3 Automatisierung
[/autoit]
#ce -----------------------------------------------------
;Anfang
#include <GUIConstants.au3>
$G1 = GUICreate("Drag Racer Trainer", 600, 450)
GUISetFont(14)
GUICtrlCreateLabel("Dieser Trainer Automatisiert den Show Off Modus von Drag Racer v3", 20, 20)
GUICtrlCreateLabel("Achtung! Dieser Trainer wurde nur für Firefox v1.5 getestet", 60, 60)
GUICtrlCreateLabel("Bitte wählen sie aus den Einstellungen", 120, 100)
$R1 = GUICtrlCreateRadio("Das Spiel ist in einem Fenster ", 30, 140)
$R2 = GUICtrlCreateRadio("Das Spiel ist in einem Task ", 300, 140)
$W1 = GUICtrlCreateButton("Weiter", 380, 400, 80)
$F1 = GUICtrlCreateButton(" Fertig", 500, 400, 75)
$Fa1 = GUISetBkColor(0x0000CD)
GUISetState(@SW_Show, $G1)
$G2 = GUICreate("Drag Racer Trainer Auswahl", 500, 200)
GUISetBkColor(0x0000CD)
$CBM = GUICtrlCreateCombo("Bitte wählen sie die Musik", 25, 25)
GUICtrlSetData($CBM, "Rock|Classic Rock|Hard Rock|Pop|HipHop|Rap")
$CBH = GUICtrlCreateCombo("Bitte wählen sie die Musik", 25, 25)
GUICtrlSetData($CBH, "Rock|Classic Rock|Hard Rock|Pop|HipHop|Rap")
$B2 = GUICtrlCreateButton("Bestätigen", 435, 170)
$B3 = GUICtrlCreateButton("Abbrechen", 375, 170)
While 1
$msg = GUIGetMsg()
If $msg = $W1 Then
GUISetState(@SW_Show, $G2)
GUISetState(@SW_Hide, $G1)
EndIf
Select
Case $msg = $B3 Or $msg = $GUI_Event_Close
Exit
Case $msg = $B2
$CB = GUICtrlRead($CBM)
$CBN = $CB&" wurde ausgewählt"
If $CB = "Rock"Or "Classic Rock"Or "Hard Rock"Or "Pop"Or "HipHop"Or "Rap" Then;Ab hier Prüfung
$P = 1
Else
$P = 0
$NR = "Eine Ungültige Eingabe wurde gemacht"
EndIf;Ende der Prüfung
Select;Überprüft was jeweils bei den Combo Boxen gewählt wurde(wird später natürlich erweitert)
Case $P = 1
S
Case Else
MsgBox(0, $NR, "Bitte OK klicken")
EndSelect
EndSelect
WEnd -
- Offizieller Beitrag
Ich hab hier mal ein Beispiel, wie du Comboboxen noch auswerten kannst.
Dazu wird jedem Eintrag eine Dualzahl zugewiesen. Somit läßt sich durch eine BitAND-Abfrage eindeutig ermitteln, welche Einträge markiert sind.
Das ist ganz komfortabel, wenn du eine Vielzahl von Einträgen hast. Außerdem kannst du durch die Indexauswertung besser operieren, als wenn du Inhalte abfragst.
Auch die Führung der Einträge in einem Array vereinfacht viele Operationen.
Du kannst zu jedem Eintrag dort z.B. Koordinaten hinterlegen und statt der hier erfolgten Labelbeschriftung die Koordinaten der ausgewählten Einträge weiterverarbeiten.Spoiler anzeigen
[autoit]#include <GUIConstants.au3>
[/autoit] [autoit][/autoit] [autoit]
#include <GuiCombo.au3>Opt("GUIOnEventMode", 1)
[/autoit] [autoit][/autoit] [autoit]
Dim $arComboData[8][3] = [ _
['c1-1','c2-1','c3-1'], _
['c1-2','c2-2','c3-2'], _
['c1-3','c2-3','c3-3'], _
['c1-4','c2-4','c3-4'], _
['c1-5','c2-5','c3-5'], _
['c1-6','c2-6','c3-6'], _
['c1-7','c2-7','c3-7'], _
['c1-8','c2-8','c3-8']]
Dim $Selection = BitOR(2^0, 2^8, 2^16) ; Index 0 aus jeder Box$Form1 = GUICreate("Form1", 633, 254, 193, 115)
[/autoit] [autoit][/autoit] [autoit]
GUISetOnEvent($GUI_EVENT_CLOSE, "Form1Close")
$Combo1 = GUICtrlCreateCombo("", 56, 56, 145, 25)
GUICtrlSetOnEvent(-1, "Combo1Change")
$Combo2 = GUICtrlCreateCombo("", 232, 56, 145, 25)
GUICtrlSetOnEvent(-1, "Combo1Change")
$Combo3 = GUICtrlCreateCombo("", 408, 55, 145, 25)
GUICtrlSetOnEvent(-1, "Combo1Change")
$Button1 = GUICtrlCreateButton("Combos auswerten", 245, 133, 125, 25, 0)
GUICtrlSetOnEvent(-1, "Button1Click")
$Label1 = GUICtrlCreateLabel("", 55, 184, 500, 17, $SS_CENTER)
GUISetState(@SW_SHOW)For $i = 0 To UBound($arComboData)-1
[/autoit] [autoit][/autoit] [autoit]
_GUICtrlComboAddString($Combo1, $arComboData[$i][0])
_GUICtrlComboSetCurSel($Combo1, 0)
_GUICtrlComboAddString($Combo2, $arComboData[$i][1])
_GUICtrlComboSetCurSel($Combo2, 0)
_GUICtrlComboAddString($Combo3, $arComboData[$i][2])
_GUICtrlComboSetCurSel($Combo3, 0)
NextWhile 1
[/autoit] [autoit][/autoit] [autoit]
Sleep(100)
WEndFunc Button1Click()
[/autoit]
GUICtrlSetData($Label1, _GetSelValue())
EndFunc
Func Combo1Change()
$indx1 = _GUICtrlComboGetCurSel($Combo1)
$indx2 = _GUICtrlComboGetCurSel($Combo2)+8
$indx3 = _GUICtrlComboGetCurSel($Combo3)+16
$Selection = BitOR(2^$indx1, 2^$indx2, 2^$indx3)
EndFunc
Func _GetSelValue()
Local $a, $b, $c, $n = 8
For $i = 0 To UBound($arComboData) -1
If BitAND($Selection, 2^$i) Then
$a = $arComboData[$i][0]
ExitLoop
EndIf
Next
For $i = 0 To UBound($arComboData) -1
If BitAND($Selection, 2^($i+$n)) Then
$b = $arComboData[$i][1]
ExitLoop
EndIf
Next
$n = 16
For $i = 0 To UBound($arComboData) -1
If BitAND($Selection, 2^($i+$n)) Then
$c = $arComboData[$i][2]
ExitLoop
EndIf
Next
Return $a & '; ' & $b & '; ' & $c
EndFunc
Func Form1Close()
Exit
EndFunc -
BugFix : Danke für den Lösungsvorschlag, aber:
1.Kenn ich mich mit Arrays nicht so aus und Blick bei dem Sript nicht so durch.
2.Hab ich mich noch nicht mit dem OnEvent Modus beschäftigt.
Trotzdem Danke für die Anregung.
Aber mein Hauptproblem war ja eher die Ewig lange Case Abfrage. Na ja ich machs dann doch auf "normale" Art. -
Ich hab 336 Case-Anfragen errechnet. Ich glaub ich mach mit es einer ini für die Koordinaten *gleich mal die Ini Hilfe Anschau*.
-
@ Bugfix: Wie war das noch mal mit dem Koordinatenzuweisen? Kannst du mir das bitte noch mal erklären? Weil da sollen schon die Namen da sein aber nach das mit dem Zuweisen von Zahlen ist eigentlich ganz gut.
Ach ne, ich machs doch anders