Label auf Mausklick reagieren?

  • Hallo, ich weiss, dass dieses bestimmt schon sehr oft gefragt wurde. Nur leider habe ich nach längerem suchen (google,SuFu) nichts gefunden. Undzwar möchte ich ein Transparentes Label machen, welches auf einen Mausklick reagiert. Hier mein Script wo ich es benötige

    Spoiler anzeigen
    [autoit]

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

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

    ;Variablen deklarierung
    Global $ini = @ScriptDir & "\Daten.ini", $splash = @ScriptDir & "\Millionär.jpg", $bkgr = @ScriptDir & "\a.jpg", $var = IniReadSection(@ScriptDir & "\Daten.ini", "Fragen")
    Global $Antwort[5],$e
    ;<==

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

    ;Splash
    SplashImageOn("", $splash, 320, 322, -1, -1, 1)
    Sleep(1500)
    SplashOff()
    ;<==

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

    ;Main Gui
    GUICreate("Wer wird Millionär", 631, 378)
    GUICtrlCreatePic($bkgr, 0, 0, 631, 378)
    GUISetFont(15)
    $Frage = GUICtrlCreateEdit("", 50, 235, 390, 47, $ES_READONLY, 0) ;Feld für Frage
    GUICtrlSetBkColor(-1, 0xFFFFFF)
    $Antwort[1] = GUICtrlCreateLabel("", 63, 300, 150, 23) ;Feld für Antwort A
    GUICtrlSetBkColor(-1, 0xFFFFFF)
    $A = GUICtrlCreateLabel("", 30, 294, 195, 37) ;Soll auf Klick reagieren
    GUICtrlSetBkColor(-1, 0x000000)
    GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
    $Antwort[2] = GUICtrlCreateLabel("", 63, 337, 150, 23) ;Feld für Antwort B
    GUICtrlSetBkColor(-1, 0xFFFFFF)
    $B = GUICtrlCreateLabel("", 30, 331, 195, 37) ;Soll auf Klick reagieren
    GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
    $Antwort[3] = GUICtrlCreateLabel("", 295, 300, 150, 23) ;Feld für Antwort C
    GUICtrlSetBkColor(-1, 0xFFFFFF)
    $C = GUICtrlCreateLabel("", 262, 294, 195, 37) ;Soll auf Klick reagieren
    GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
    $Antwort[4] = GUICtrlCreateLabel("", 295, 337, 150, 23) ;Feld für Antwort D
    GUICtrlSetBkColor(-1, 0xFFFFFF)
    $D = GUICtrlCreateLabel("", 262, 331, 195, 37) ;Soll auf Klick reagieren
    GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)

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

    $question = Random(1, UBound($var) - 1, 1) ;Zufällige Frage

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

    $str = StringSplit($var[$question][1], '-', 1) ;Antworten splitten
    GUICtrlSetData($Frage, $var[$question][0]) ;Frage Nr. 1

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

    For $i = 1 To 4
    GUICtrlSetData($Antwort[$i], $str[$i]) ;Antwortmöglichkeiten zu Frage Nr. 1
    Next

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

    GUISetState()

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

    Switch $str[5]

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

    Case 1
    $e = "A"
    Case 2
    $e = "B"
    Case 3
    $e = "C"
    Case 4
    $e = "D"
    EndSwitch

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

    ;~ MsgBox(0,"Richtige Antwort","Richtige antwort ist " & $e)
    ;<==

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

    ;Mainloop
    While 1
    $Msg = GUIGetMsg()
    Switch $Msg
    Case $GUI_EVENT_CLOSE
    ;~ $close = MsgBox(4, "Wirklich Beenden?", "Wollen sie wirklich aufhören?")
    ;~ Switch $close
    ;~ Case 6
    Exit
    ;~ EndSwitch
    Case $A
    MsgBox(0,"test","Test")
    EndSwitch
    WEnd
    ;<==

    [/autoit]

    Kann ja nicht so schwer sein oder ? :(

    Einmal editiert, zuletzt von SiLenCa (28. April 2009 um 18:18)

  • oder dem Label den erweiterten Syle zuweisen:

    Spoiler anzeigen
    [autoit]

    $B = GUICtrlCreateLabel("", 30, 331, 195, 37,-1,$SS_NOTIFY) ;Soll auf Klick reagieren

    [/autoit]

    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. ;)

  • Ja, das hatte ich auch herausgefunden, aber ich kann ja nicht GUI MessageLoop Mode und GUI OnEvent Mode zusammen in einem Script benutzen... muss ich jetzt dann alles im OnEvent Mode machen ? ich mag den MessageLoop Mode bisschen lieber ;)

    Gibts keine möglichkeit für den MessageLoopMode ?

    Edit: Schnuffel das hatte ich auch schon in der Hilfe gefunden... funktioniert allerdings nicht... oder ich bin zu dumm... in der while kommt trotzdem dann

    [autoit]

    While 1
    $Msg = GUIGetMsg()
    Switch $Msg
    Case $A
    MsgBox(0,"test","Test")
    EndSwitch
    WEnd

    [/autoit]

    oder nicht ?

  • Hallo SilenCa,

    klappt doch,

    Spoiler anzeigen
    [autoit]

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

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

    ;Variablen deklarierung
    Global $ini = @ScriptDir & "\Daten.ini", $splash = @ScriptDir & "\Millionär.jpg", $bkgr = @ScriptDir & "\a.jpg", $var = IniReadSection(@ScriptDir & "\Daten.ini", "Fragen")
    Global $Antwort[5],$e
    ;<==

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

    ;Splash
    SplashImageOn("", $splash, 320, 322, -1, -1, 1)
    Sleep(1500)
    SplashOff()
    ;<==

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

    ;Main Gui
    GUICreate("Wer wird Millionär", 631, 378)
    GUICtrlCreatePic($bkgr, 0, 0, 631, 378)
    GUISetFont(15)
    $Frage = GUICtrlCreateEdit("", 50, 235, 390, 47, $ES_READONLY, 0) ;Feld für Frage
    GUICtrlSetBkColor(-1, 0xFFFFFF)
    ;$Antwort[1] = GUICtrlCreateLabel("", 63, 300, 150, 23) ;Feld für Antwort A
    GUICtrlSetBkColor(-1, 0xFFFFFF)
    $A = GUICtrlCreateLabel("KLAPPT DOCH", 30, 294, 195, 37) ;Soll auf Klick reagieren
    GUICtrlSetBkColor(-1, 0x000000)
    GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
    #cs
    $Antwort[2] = GUICtrlCreateLabel("", 63, 337, 150, 23) ;Feld für Antwort B
    GUICtrlSetBkColor(-1, 0xFFFFFF)
    $B = GUICtrlCreateLabel("", 30, 331, 195, 37) ;Soll auf Klick reagieren
    GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
    $Antwort[3] = GUICtrlCreateLabel("", 295, 300, 150, 23) ;Feld für Antwort C
    GUICtrlSetBkColor(-1, 0xFFFFFF)
    $C = GUICtrlCreateLabel("", 262, 294, 195, 37) ;Soll auf Klick reagieren
    GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
    $Antwort[4] = GUICtrlCreateLabel("", 295, 337, 150, 23) ;Feld für Antwort D
    GUICtrlSetBkColor(-1, 0xFFFFFF)
    $D = GUICtrlCreateLabel("", 262, 331, 195, 37) ;Soll auf Klick reagieren
    GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)

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

    $question = Random(1, UBound($var) - 1, 1) ;Zufällige Frage

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

    $str = StringSplit($var[$question][1], '-', 1) ;Antworten splitten
    GUICtrlSetData($Frage, $var[$question][0]) ;Frage Nr. 1

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

    For $i = 1 To 4
    GUICtrlSetData($Antwort[$i], $str[$i]) ;Antwortmöglichkeiten zu Frage Nr. 1
    Next
    #ce
    GUISetState()

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

    #cs
    Switch $str[5]

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

    Case 1
    $e = "A"
    Case 2
    $e = "B"
    Case 3
    $e = "C"
    Case 4
    $e = "D"
    EndSwitch

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

    ;~ MsgBox(0,"Richtige Antwort","Richtige antwort ist " & $e)
    ;<==
    #ce
    ;Mainloop
    While 1
    $Msg = GUIGetMsg()
    Switch $Msg
    Case $GUI_EVENT_CLOSE
    ;~ $close = MsgBox(4, "Wirklich Beenden?", "Wollen sie wirklich aufhören?")
    ;~ Switch $close
    ;~ Case 6
    Exit
    ;~ EndSwitch
    Case $A
    MsgBox(0,"test","Test")
    EndSwitch
    WEnd
    ;<==

    [/autoit]

    du must dem CLICKer aber auch die Möglichkeit geben das Laben anzuCLICKen,

    Edit1: Auch im OnEventLoop hättest du das gleiche Problem, wer das Label nicht trifft bekommt keine MsgBox

    mfg (Auto)Bert

  • Joa... hab mein fehler gefunden... Als erstes, musste ich das Bild Disablen, und 2. habich jetzt noch das problem, dass das Label $A hinter $Antwort[1] liegt... warum ? ich erstelle doch $A danach

    Also ich möchte $A über $Antwort[1] legen... $A ist aber etwas größer.

    Edit... hat sich geklärt... GUICtrlSetState(-1,$GUI_ONTOP)

    Danke an alle.

  • Hallo Silenca,

    erstell doch deine Labels und Edits mal alle mit Text in der maximal möglichen Länge, dann erkennst du wo sich Labels und Edits überschneiden. Danach kannst du deine GUI schöner aufbauen, wo du diesen Problem nicht mehr hast oder nimm KODA, da siehst du es schon beim erstellen,

    Edit: hab gerade wieder dein Original geladen, das bricht bei mir ab: (42) : ==> Subscript used with non-Array variable.: Liegt wohl daran das ich kein Ini-File habe, das must du also auch noch abfangen.

    mfg (Auto)Bert

    Einmal editiert, zuletzt von AutoBert (28. April 2009 um 18:56)