Bild über Label

  • Hi,
    ich hätte mal wieder eine Frage,
    und zwar versuch ich Minesweeper nachzubauen.

    Eine Funktion im Script sieht im Moment so aus:

    [autoit]

    Func _CreateField($Slots = 10, $Rows = 10, $Mines = 10)
    Dim $Fields_Label[$Rows][$Slots], $Fields_Picture[$Rows][$Slots]
    For $i1 = 0 To $Rows -1 Step 1
    For $i2 = 0 To $Slots -1 Step 1
    $Fields_Label[$i1][$i2] = 0
    Next
    Next
    $x = 0
    $y = 100
    For $i1 = 0 To $Rows -1 Step 1
    For $i2 = 0 To $Slots -1 Step 1
    $Fields_Label[$i1][$i2] = GUICtrlCreateLabel("hi", $x, $y,50,50)
    GUICtrlSetState(-1,$GUI_DISABLE)
    $x += 51
    Next
    $x = 0
    $y += 51
    Next
    $x = 0
    $y = 100
    For $i1 = 0 To $Rows -1 Step 1
    For $i2 = 0 To $Slots -1 Step 1
    $Fields_Picture[$i1][$i2] = GUICtrlCreatePic("Test.JPG", $x, $y,50,50)
    GUICtrlSetState(-1,$GUI_DISABLE)
    GUICtrlSetOnEvent(-1,"_ButtonPressed")
    GUICtrlSetState(-1,$GUI_ENABLE)
    $x += 51
    Next
    $x = 0
    $y += 51
    Next
    EndFunc

    [/autoit]

    Ergebnis:

    - Das Bild liegt über dem Label
    - Das Bild lässt sich anklicken und verschwindet dann (in ner anderen Funktion)
    - Man sieht nichts mehr vom Label darunter

    Allerdings ist jetzt das Label das darunter liegt deaktiviert, also so gräulich geschrieben :(

  • Dann sag mir mal bitte wie ich das nach dem Klick wieder aktivieren kann ^^
    Mein komplettes Script:

    [autoit]

    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    #Include <String.au3>
    #include <Array.au3>

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

    Opt("GUIOnEventMode", 1)

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

    Dim $GUI

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

    _GUI_Create()
    _CreateField()

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

    While 1
    Sleep(250)
    WEnd

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

    Func _GUI_Create()
    $GUI = GUICreate("Minesweep", 509, 629, 279, 226)
    GUISetOnEvent($GUI_EVENT_CLOSE, "_exit")
    $Spiel_Menu = GUICtrlCreateMenu("Spiel")
    $Neues_Spiel_Menu = GUICtrlCreateMenuItem("Neues Spiel (F1)", $Spiel_Menu)
    GUICtrlSetOnEvent(-1, "_CreateGame")
    GUICtrlCreateMenuItem("", $Spiel_Menu)
    $Anfaenger_Menu = GUICtrlCreateMenuItem("Anfänger", $Spiel_Menu, -1 , 1)
    GUICtrlSetState(-1, $GUI_CHECKED)
    $Fort_Menu = GUICtrlCreateMenuItem("Fortgeschritten", $Spiel_Menu, -1 , 1)
    $Profi_Menu = GUICtrlCreateMenuItem("Profi", $Spiel_Menu, -1 , 1)
    $Self_Menu = GUICtrlCreateMenuItem("Benutzerdefiniert", $Spiel_Menu, -1 , 1)
    GUICtrlCreateMenuItem("", $Spiel_Menu)
    $Bestzeiten_Menu = GUICtrlCreateMenuItem("Bestzeiten (F2)", $Spiel_Menu)
    GUICtrlCreateMenuItem("", $Spiel_Menu)
    $Beenden_Menu = GUICtrlCreateMenuItem("Beenden (ESC)", $Spiel_Menu)
    GUICtrlSetOnEvent(-1,"_exit")
    GUISetState(@SW_SHOW)
    EndFunc

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

    Func _CreateGame()
    GUIDelete($GUI)
    _GUI_Create()
    _CreateField()
    EndFunc

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

    Func _exit()
    Exit
    EndFunc

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

    Func _CreateField($Slots = 10, $Rows = 10, $Mines = 10)
    Dim $Fields_Label[$Rows][$Slots], $Fields_Picture[$Rows][$Slots]
    For $i1 = 0 To $Rows -1 Step 1
    For $i2 = 0 To $Slots -1 Step 1
    $Fields_Label[$i1][$i2] = 0
    Next
    Next
    $x = 0
    $y = 100
    For $i1 = 0 To $Rows -1 Step 1
    For $i2 = 0 To $Slots -1 Step 1
    $Fields_Label[$i1][$i2] = GUICtrlCreateLabel("hi", $x, $y,50,50)
    GUICtrlSetState(-1,$GUI_DISABLE)
    $x += 51
    Next
    $x = 0
    $y += 51
    Next
    $x = 0
    $y = 100
    For $i1 = 0 To $Rows -1 Step 1
    For $i2 = 0 To $Slots -1 Step 1
    $Fields_Picture[$i1][$i2] = GUICtrlCreatePic("Test.JPG", $x, $y,50,50)
    GUICtrlSetState(-1,$GUI_DISABLE)
    GUICtrlSetOnEvent(-1,"_ButtonPressed")
    GUICtrlSetState(-1,$GUI_ENABLE)
    $x += 51
    Next
    $x = 0
    $y += 51
    Next
    EndFunc

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

    Func _ButtonPressed()
    MsgBox("","","")
    GUICtrlDelete(@GUI_CtrlID)
    EndFunc

    [/autoit]
  • [autoit]


    Func _ButtonPressed()
    GUICtrlSetState(@GUI_CtrlID-100,$GUI_ENABLE)
    GUICtrlDelete(@GUI_CtrlID)
    EndFunc

    [/autoit]

    Die 100 Durch die Anzahl der Felder ersetzen. ;)
    Dann wird es funkrionieren. :P

    Zur Erklärung:
    Die CTRL-ID von den Labels beginnt bei 14 und endet
    bei 113. Die CTRL-ID der Bilder beginnt ab 114.
    Wenn du jetzt also auf 114 klickst, und das - 100
    nimmst, kommst du auf 14. ;)
    Du hattest also vor den Labels schon 13 andere ID's
    erstellt.


    MfG
    qixx

  • Hallo Icynator,

    lies dir die Hilfe zu GUICtrlSetState durch,

    mfg (Auto)Bert

    hab ich allerdings weiß ich nich wirklich welches ich auf was anwenden muss damit das gleich funktioniert ohne das ich i-was wieder enablen muss :(

    danke ;)

  • Hallo Icynator,
    na so:

    Spoiler anzeigen
    [autoit]

    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    #Include <String.au3>
    #include <Array.au3>

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

    Opt("GUIOnEventMode", 1)

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

    Dim $GUI

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

    _GUI_Create()
    _CreateField()

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

    While 1
    Sleep(250)
    WEnd

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

    Func _GUI_Create()
    $GUI = GUICreate("Minesweep", 509, 629, 279, 226)
    GUISetOnEvent($GUI_EVENT_CLOSE, "_exit")
    $Spiel_Menu = GUICtrlCreateMenu("Spiel")
    $Neues_Spiel_Menu = GUICtrlCreateMenuItem("Neues Spiel (F1)", $Spiel_Menu)
    GUICtrlSetOnEvent(-1, "_CreateGame")
    GUICtrlCreateMenuItem("", $Spiel_Menu)
    $Anfaenger_Menu = GUICtrlCreateMenuItem("Anfänger", $Spiel_Menu, -1 , 1)
    GUICtrlSetState(-1, $GUI_CHECKED)
    $Fort_Menu = GUICtrlCreateMenuItem("Fortgeschritten", $Spiel_Menu, -1 , 1)
    $Profi_Menu = GUICtrlCreateMenuItem("Profi", $Spiel_Menu, -1 , 1)
    $Self_Menu = GUICtrlCreateMenuItem("Benutzerdefiniert", $Spiel_Menu, -1 , 1)
    GUICtrlCreateMenuItem("", $Spiel_Menu)
    $Bestzeiten_Menu = GUICtrlCreateMenuItem("Bestzeiten (F2)", $Spiel_Menu)
    GUICtrlCreateMenuItem("", $Spiel_Menu)
    $Beenden_Menu = GUICtrlCreateMenuItem("Beenden (ESC)", $Spiel_Menu)
    GUICtrlSetOnEvent(-1,"_exit")
    GUISetState(@SW_SHOW)
    EndFunc

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

    Func _CreateGame()
    GUIDelete($GUI)
    _GUI_Create()
    _CreateField()
    EndFunc

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

    Func _exit()
    Exit
    EndFunc

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

    Func _CreateField($Slots = 10, $Rows = 10, $Mines = 10)
    Global $Fields_Label[$Rows][$Slots], $Fields_Picture[$Rows][$Slots]
    For $i1 = 0 To $Rows -1 Step 1
    For $i2 = 0 To $Slots -1 Step 1
    $Fields_Label[$i1][$i2] = 0
    Next
    Next
    $x = 0
    $y = 100
    For $i1 = 0 To $Rows -1 Step 1
    For $i2 = 0 To $Slots -1 Step 1
    $Fields_Label[$i1][$i2] = GUICtrlCreateLabel("hi", $x, $y,50,50)
    GUICtrlSetState(-1,$GUI_DISABLE)
    $x += 51
    Next
    $x = 0
    $y += 51
    Next
    $x = 0
    $y = 100
    For $i1 = 0 To $Rows -1 Step 1
    For $i2 = 0 To $Slots -1 Step 1
    $Fields_Picture[$i1][$i2] = GUICtrlCreatePic("Test.JPG", $x, $y,50,50)
    GUICtrlSetState(-1,$GUI_DISABLE)
    GUICtrlSetOnEvent(-1,"_ButtonPressed")
    GUICtrlSetState(-1,$GUI_ENABLE)
    $x += 51
    Next
    $x = 0
    $y += 51
    Next
    EndFunc

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

    Func _ButtonPressed()
    ;MsgBox("","","")
    GuiCtrlSetState(@GUI_CtrlId -100,$GUI_ENABLE); gilt nur bei 10 Zeilen a 10 Reihen
    GUICtrlDelete(@GUI_CtrlID)
    EndFunc

    [/autoit]

    mfg (Auto)Bert