GUICTRLCreate in For Schleife... - Neues Problem

  • Also ich habe ein GUICtrlCreatePic in einer For-Schleife weil ich das 100x brauche... Jetzt weis ich aber nicht wie ich auf das Pic später zugreifen soll.
    Ich möchte jetzt GUICtrlSetState($feld, $GUI_HIDE) benutzen, aber da wird nur das letzte Bild verdeckt.

    [autoit]

    For $s = 0 To 9
    For $i = 0 To 9
    $feld = GUICtrlCreatePic("images\buttonchose.gif", 31+$i*20+$i, 146+$s*20+$s, 20, 20, 0)
    Next
    Next

    [/autoit]

    Hab schon einiges ausprobiert aber will nicht klappen :(

    Einmal editiert, zuletzt von Wambo (25. Juni 2008 um 14:49)

    • Offizieller Beitrag

    Hallo

    Wurde schon oft besprochen..
    Erstellen der Bilder:

    Spoiler anzeigen
    [autoit]

    Global $aFeld[1]

    [/autoit] [autoit][/autoit] [autoit]

    For $s = 0 To 9
    For $i = 0 To 9
    ReDim $aFeld[UBound($aFeld) + 1]
    $aFeld[UBound($aFeld) - 1] = GUICtrlCreatePic("images\buttonchose.gif", 31 + $i * 20 + $i, 146 + $s * 20 + $s, 20, 20, 0)
    Next
    Next
    $aFeld[0] = UBound($aFeld)-1

    [/autoit]

    Drauf zugreifen:

    Spoiler anzeigen
    [autoit]

    For $i = 1 To $aFeld[0]
    GUICtrlSetState($aFeld[$i],$GUI_HIDE)
    Next

    [/autoit]

    Mfg Spider

  • Also das klappt zwar soweit aber ich stehe vor einem neuen Problem. Ich möchte die einzelnen Bilder jetzt gerne seperat anfragen sprich, dass wenn ich auf 1 bestimmtes Bild klicke, soll damit auch was passieren.

  • GtaSpider warum nicht gleich ein Array mit 100 Einträgen erstellen, wenn er weiß wie viele Bilder, dann braucht man das Array nicht jedesmal neu zu dimensonieren

  • Also ich möchte den Bildchen die Funktion eines Buttons zuschreiben. Das man sie eben anklicken kann und dann etwas passiert und einen Hover Effekt. Gut da versteh ich jetzt nur nich am Beispiel von GTA-Spider wie ich auf ein einzelnes Bild zugreifen kann und dem eine Funktion zuschreiben kann.

  • jedes Bild wurde einem Eintrag im Array $aFeld eingeordnet -> also von 1 bis 9
    einfach so dann über $aFeld[2] ansteuern

    • Offizieller Beitrag

    Wenn du im OnEvent-Mode arbeitest, kannst du dir viel Schreibarbeit sparen, indem du die Aktionen beim Anklicken mit in das Array der Pic-ID schreibst und beim Anklicken per Execute ausführst.

    Spoiler anzeigen
    [autoit]

    Opt("GUIOnEventMode", 1)

    [/autoit] [autoit][/autoit] [autoit]

    Global $n = -1, $aFeld[100][2]
    $aFeld[0][1] = 'MsgBox(0,"", "Hallo, das ist Pic1")'
    $aFeld[1][1] = 'MsgBox(0,"", "Hallo, das ist Pic2")'
    $aFeld[2][1] = 'MsgBox(0,"", "Hallo, das ist Pic3")'

    [/autoit] [autoit][/autoit] [autoit]

    For $s = 0 To 9
    For $i = 0 To 9
    $n += 1
    $aFeld[$n][0] = GUICtrlCreatePic("images\buttonchose.gif", 31 + $i * 20 + $i, 146 + $s * 20 + $s, 20, 20, 0)
    GUICtrlSetOnEvent(-1, 'Pic_click')
    Next
    Next

    [/autoit] [autoit][/autoit] [autoit]

    Func Pic_click()
    For $i = 0 To UBound($aFeld) -1
    If $aFeld[$n][0] = @GUI_CtrlId Then Return Execute($aFeld[$n][1])
    Next
    EndFunc

    [/autoit]
  • @ BugFix... Mir leuchtet die Lösung zwar ein aber sie funktioniert iwie nicht... wenn ich auf nem Pic klick passiert nichts... Mein sieht jetzt so aus immoment:

    Spoiler anzeigen
    [autoit]

    Global $m = -1, $CPUFeld[100][2]

    [/autoit] [autoit][/autoit] [autoit]

    $CPUFeld[0][1] = 'MsgBox(0,"", "Hallo, das ist Pic1")'
    $CPUFeld[1][1] = 'MsgBox(0,"", "Hallo, das ist Pic2")'
    $CPUFeld[2][1] = 'MsgBox(0,"", "Hallo, das ist Pic3")'

    [/autoit] [autoit][/autoit] [autoit]

    For $f = 0 To 9
    For $g = 0 To 9
    $m += 1
    $CPUFeld[$m][0] = GUICtrlCreatePic("images\buttonchose.gif", 317 + $f * 20 + $f, 146 + $g * 20 + $g, 20, 20, 0)
    GUICtrlSetOnEvent($CPUFeld[$m][0], "_cpufeld")
    Next
    Next

    [/autoit] [autoit][/autoit] [autoit]

    Func _cpufeld()
    For $i = 0 To UBound($CPUFeld) -1
    If $CPUFeld[$m][0] = @GUI_CtrlId Then Return Execute($CPUFeld[$m][1])
    Next
    EndFunc

    [/autoit]

    Glaube ist ja das selbe wie bei dir, lediglich die Variablen teilweise umbenannt...
    Irgendwie kommt mir das komisch vor: If $CPUFeld[$m][0] ... weil $m ist ja nach dem ablauf der For Schleife 99...

    @ Edit: OnEventmode ist auch an.

    Einmal editiert, zuletzt von Wambo (26. Juni 2008 um 15:11)

  • je nachdem an welcher Stelle Deines Scripts du die 100 Pic's erstellst erhalten diese doch jeweils eine Ctrl-ID.
    Diese läßt sich ja ermitteln.
    Nachdem beim Start Deines Scripts sich die Ctrl-ID der Pic's nicht ändert, kannst Du doch so auf die 100 zugreifen.
    Dabei kannst Du auch wieder eine Schleife zum @Hide verwenden, da die Ctrl-ID ja direkt aufsteigend ist.

    MfG Schnuffel

    "Sarkasmus ist die niedrigste Form des Witzes, aber die höchste Form der Intelligenz."
    Val McDermid

    ein paar Infos ...

    Wer mehr als "nur" Hilfe benötigt, kann sich gern im Forum "Programmieranfragen" an uns wenden. Wir helfen in allen Fällen, die die Forenregeln zulassen.

    Für schnelle Hilfe benötigen wir ein ! lauffähiges ! Script, dass wir als Demonstration des Problems testen können. Wer von uns erwartet ein Teilscript erstmal lauffähig zu bekommen, der hat
    1. keine wirkliche Not
    2. keinen Respekt vor Menschen die ihm in ihrer Freizeit Ihre Hilfe anbieten
    3. oder ist einfach nur faul und meint wir coden das für ihn

    In solchen Fällen erlaube ich mir, die Anfrage einfach zu ignorieren. ;)

  • ich versuche es nochmal...
    Jedes der Bilder erhält bei Erstellung durch GuiCtrlCreatePic eine eigene @GUI_CtrlId.
    Um die Bilder abzufragen oder anzusprechen kannst Du diese @GUI_CtrlId verwenden.
    Damit kannst Du auch in einer eigenen For-Schleife alle 100 Pic's z.B. verstecken.
    Wenn z.B. das erste Bild die @GUI_CtrlId 17 hat:

    Spoiler anzeigen
    [autoit]

    For $i = 1 to 100
    GuiCtrlSetState($i - 1 + 17, $GUI_HIDE)
    Next

    [/autoit]


    Das wollte ich damit erklären :)
    Ansonsten solltest Du mal ein vollständiges Script posten,
    sonst bleiben unsere Lösungsansätze immer ein Stückwerk... ;)

    MfG Schnuffel

    "Sarkasmus ist die niedrigste Form des Witzes, aber die höchste Form der Intelligenz."
    Val McDermid

    ein paar Infos ...

    Wer mehr als "nur" Hilfe benötigt, kann sich gern im Forum "Programmieranfragen" an uns wenden. Wir helfen in allen Fällen, die die Forenregeln zulassen.

    Für schnelle Hilfe benötigen wir ein ! lauffähiges ! Script, dass wir als Demonstration des Problems testen können. Wer von uns erwartet ein Teilscript erstmal lauffähig zu bekommen, der hat
    1. keine wirkliche Not
    2. keinen Respekt vor Menschen die ihm in ihrer Freizeit Ihre Hilfe anbieten
    3. oder ist einfach nur faul und meint wir coden das für ihn

    In solchen Fällen erlaube ich mir, die Anfrage einfach zu ignorieren. ;)

  • Jetzt bin ich irgendwie verwirrt... Das Script weis doch garnicht was was ist irgendwie... ehm ich war vorhin schon soweit, dass ich die bildchen zwar Verstecken und Zeigen haben können aber ncith einzeln iwie drauf zugreifen... Schaff aber das grad nichtmal mehr... Jetzt steh ich aufem Schlauch.. ?( ?( ?(

    Spoiler anzeigen
    [autoit]

    #include <GUIConstantsEx.au3>
    #include <ButtonConstants.au3>
    #include <EditConstants.au3>
    #include <StaticConstants.au3>

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    Opt("GUIOnEventMode", 1)
    #Region ### START Koda GUI section ### Form=
    $battleshipmenu = GUICreate("BATTLESHIP", 560, 512, 196, 130, 0)

    [/autoit] [autoit][/autoit] [autoit]

    $Pic1 = GUICtrlCreatePic("\images\menubgjpg.jpg", 0, 0, 560, 480, 0)

    [/autoit] [autoit][/autoit] [autoit]

    $Label1 = GUICtrlCreateLabel("Geben Sie den gewünschten Einsatz ein und klicken sie auf Start! Falls Sie das erste Mal spielen, klicken sie auf das Fragezeichen unten rechts im Bild für eine Anleitung.", 72, 230, 412, 51, $SS_CENTER)
    GUICtrlSetColor(-1, 0xCCCCCC)
    GUICtrlSetBkColor($Label1,$GUI_BKCOLOR_TRANSPARENT )

    [/autoit] [autoit][/autoit] [autoit]

    $Input1 = GUICtrlCreateInput("100", 243, 292, 141, 22, BitOR($ES_CENTER,$ES_AUTOHSCROLL,$ES_NUMBER), 0)
    GUICtrlSetFont(-1, 10, 800, 0, "MS Sans Serif")
    GUICtrlSetColor(-1, 0xFFFFE1)
    GUICtrlSetBkColor($Input1, 0x000000)
    GUICtrlSetCursor (-1, 5)

    [/autoit] [autoit][/autoit] [autoit]

    $Label2 = GUICtrlCreateLabel("Der Einsatz muss zwischen 100€ und 50000€ liegen.", 72, 324, 412, 17, $SS_CENTER)
    GUICtrlSetColor(-1, 0xCCCCCC)
    GUICtrlSetBkColor($Label2,$GUI_BKCOLOR_TRANSPARENT )

    [/autoit] [autoit][/autoit] [autoit]

    $button1 = GUICtrlCreatePic("\images\bigbuttonhelp.bmp", 474, 412, 66, 58)
    GUICtrlSetCursor (-1, 0)

    [/autoit] [autoit][/autoit] [autoit]

    $button2 = GUICtrlCreatePic("\images\buttonbig_start.bmp", 196, 340, 160, 50)
    GUICtrlSetCursor (-1, 0)

    [/autoit] [autoit][/autoit] [autoit]

    $button4 = GUICtrlCreatePic("\images\button_end.bmp", 193, 416, 166, 49)
    GUICtrlSetCursor (-1, 0)

    [/autoit] [autoit][/autoit] [autoit]

    $Label3 = GUICtrlCreateLabel("Lädt...", 388, 52, 124, 23, $SS_CENTER)
    GUICtrlSetColor(-1, 0xCCCCCC)
    GUICtrlSetBkColor($Label3,$GUI_BKCOLOR_TRANSPARENT )
    GUICtrlSetFont(-1, 12, 800, 0, "MS Sans Serif")

    [/autoit] [autoit][/autoit] [autoit]

    $Battlefield = GUICtrlCreatePic("\images\spielfeld.jpg", 0, 106, 560, 291)
    GUICtrlSetState(-1, $GUI_HIDE)

    [/autoit] [autoit][/autoit] [autoit]

    $button_abort = GUICtrlCreatePic("\images\abbrechen.gif", 0, 366, 163, 31)
    GUICtrlSetState(-1, $GUI_HIDE)
    GUICtrlSetState(-1, $GUI_DISABLE)

    [/autoit] [autoit][/autoit] [autoit]

    $Pic2 = GUICtrlCreatePic("\images\anleitung.jpg", 16, 106, 510, 244)
    GUICtrlSetState(-1, $GUI_HIDE)

    [/autoit] [autoit][/autoit] [autoit]

    $helpclose = 1

    [/autoit] [autoit][/autoit] [autoit]

    $Label4 = GUICtrlCreateLabel("Label 4", 32, 130, 476, 199, $SS_CENTER)
    GUICtrlSetColor(-1, 0xCCCCCC)
    GUICtrlSetFont(-1, 10, 800, 0, "MS Sans Serif")
    GUICtrlSetBkColor($Label4,$GUI_BKCOLOR_TRANSPARENT )
    GUICtrlSetState(-1, $GUI_HIDE)

    [/autoit] [autoit][/autoit] [autoit]

    $Label5 = GUICtrlCreateLabel("Viel Spaß", 220, 306, 190, 28)
    GUICtrlSetFont(-1, 16, 800, 0, "MS Sans Serif")
    GUICtrlSetColor(-1, 0xCCCCCC)
    GUICtrlSetBkColor($Label5,$GUI_BKCOLOR_TRANSPARENT )
    GUICtrlSetState($Label5, $GUI_HIDE)

    [/autoit] [autoit][/autoit] [autoit]

    $error = GUICtrlCreateLabel("", 12, 114, 538, 24, $SS_CENTER)
    GUICtrlSetFont(-1, 12, 800, 0, "MS Sans Serif")
    GUICtrlSetColor(-1, 0xFFFFFF)
    GUICtrlSetBkColor($error,$GUI_BKCOLOR_TRANSPARENT )
    GUICtrlSetState($error, $GUI_HIDE)

    [/autoit] [autoit][/autoit] [autoit]

    Global $m = -1, $CPUFeld[100][2]

    [/autoit] [autoit][/autoit] [autoit]

    $CPUFeld[0][1] = 'MsgBox(0,"", "Hallo, das ist Pic1")'
    $CPUFeld[1][1] = 'MsgBox(0,"", "Hallo, das ist Pic2")'
    $CPUFeld[2][1] = 'MsgBox(0,"", "Hallo, das ist Pic3")'

    [/autoit] [autoit][/autoit] [autoit]

    For $f = 0 To 9
    For $g = 0 To 9
    $m += 1
    $CPUFeld[$m][0] = GUICtrlCreatePic("images\buttonchose.gif", 317 + $f * 20 + $f, 146 + $g * 20 + $g, 20, 20, 0)
    GUICtrlSetOnEvent(-1, "_cpufeld")
    Next
    Next

    [/autoit] [autoit][/autoit] [autoit]

    Func _cpufeld()
    For $i = 0 To UBound($CPUFeld) -1
    If $CPUFeld[$m][0] = @GUI_CtrlId Then Return Execute($CPUFeld[$m][1])
    Next
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    GUISetState(@SW_SHOW)

    [/autoit] [autoit][/autoit] [autoit]

    GUICtrlSetOnEvent($button1, "_help")
    GUICtrlSetOnEvent($button2, "_startgame")
    GUICtrlSetOnEvent($button4, "_exit")
    #EndRegion ### END Koda GUI section ###

    [/autoit] [autoit][/autoit] [autoit]

    $kontoread = IniRead("settings.ini", "Settings", "money", "kontoerror")
    If $kontoread = "kontoerror" Then
    $konto = "1500"
    IniWrite("settings.ini", "Settings", "money", $konto)
    GUICtrlSetData($Label3, $konto&" €")
    Else
    $konto = $kontoread
    GUICtrlSetData($Label3, $konto&" €")
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    While 1
    Sleep(100)

    [/autoit] [autoit][/autoit] [autoit]

    WEnd

    [/autoit] [autoit][/autoit] [autoit]

    Func _startgame()
    GUICtrlSetState($error, $GUI_HIDE)
    $einsatz = GUICtrlRead($Input1)
    If $einsatz < 100 Or $einsatz > 50000 Then
    GUICtrlSetState($error, $GUI_SHOW)
    GUICtrlSetData($error, "Der Einsatz muss zwischen 100 und 50000 liegen.")
    Else
    If $einsatz > $konto Then
    GUICtrlSetState($error, $GUI_SHOW)
    GUICtrlSetData($error, "Sie haben nicht genug Guthaben.")
    ElseIf $einsatz <= $konto Then
    $konto -= $einsatz
    GUICtrlSetData($Label3, $konto&" €")
    IniWrite("settings.ini", "Settings", "money", $konto)
    GUICtrlSetState($Battlefield, $GUI_SHOW)
    GUICtrlSetState($button_abort, $GUI_SHOW)
    GUICtrlSetState($button_abort, $GUI_ENABLE)
    _start()
    EndIf
    EndIf
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func _help()
    GUICtrlSetState($error, $GUI_HIDE)
    If $helpclose = 1 Then
    $helpclose = 0
    GUICtrlSetState($Input1, $GUI_HIDE)
    GUICtrlSetState($Input1, $GUI_DISABLE)
    GUICtrlSetState($Pic2, $GUI_SHOW)
    GUICtrlSetState($Label4, $GUI_SHOW)
    GUICtrlSetState($Label5, $GUI_SHOW)
    ElseIf $helpclose = 0 Then
    $helpclose = 1
    GUICtrlSetState($Input1, $GUI_SHOW)
    GUICtrlSetState($Input1, $GUI_ENABLE)
    GUICtrlSetState($Pic2, $GUI_HIDE)
    GUICtrlSetState($Label4, $GUI_HIDE)
    GUICtrlSetState($Label5, $GUI_HIDE)
    EndIf
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func _start()
    GUICtrlSetState($button2, $GUI_DISABLE)
    GUICtrlSetState($Input1, $GUI_HIDE)
    GUICtrlSetState($Input1, $GUI_DISABLE)
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func _exit()
    Exit
    EndFunc

    [/autoit]

  • Das ist für ein Schiffe versenken Spiel. Habs aber erstmal aufgegeben weil da noch andere Probleme auf mich zukommen würden ;)
    Muss da noch ein bisschen lernen für...