Zugriff auf Guictrlmenuitem wenn es mittels Funktion erstellt wird

  • Hallo
    habe mir mit GUICtrlCreateMenuitem Untermenues über eine Funktion erstellt. Da aber die Anzahl der Untermenues unterschiedlich ist, weiß ich nicht wie ich beim anklicken der Menues mithilfe der msg Funktion das Ereignis abfragen soll. Vielleicht kann mir jemand einen Tip geben.
    Gruß Ralf

    Einmal editiert, zuletzt von Flarkus (15. Juli 2009 um 21:30)

  • also meinst du so:

    [autoit]

    GUICreate("", 431, 497, 193, 125)
    $m1 = GUICtrlCreateMenu("Datei")
    $mi1 = GUICtrlCreateMenuItem("speichern", $m1)

    [/autoit]


    Und jetzt wenn man speichern drückt.

    [autoit]

    While1
    $msg = GUIGetMsg()
    Case $msg = $GUI_EVENT_CLOSE
    Exit
    Case $mi1
    filewrite...

    [/autoit]
  • Hallo
    Das mit dem erstellen habe ich bereits herausgefunden. Da aber die Anzahl der Guictrlcreatmenuitem sich ändert (wird mittels filefind erstellt) ändert sich die anzahl der Einträge (Guictrlcreatmenuitem)
    Dadurch weiß ich nicht wie ich über $msg = Eintrag drauf zugreifen soll da beim MessageLoop Modus die Einträge ja schon vorher bekannt sein müßen.

    [autoit]

    While 1
    $msg = GUIGetMsg(1)

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

    Select
    Case $msg = $okbutton
    Case $msg = $Eintrag1 ;Anzahl der Einträge variabel und vorher nicht bekannt
    _Funktion
    Case $msg = $Eintrag2
    _Funktion
    Case $msg = $Eintrag3
    _Funktion
    Case $msg = $GUI_EVENT_CLOSE

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

    ExitLoop
    EndSelect
    WEnd

    [/autoit][autoit][/autoit][autoit][/autoit]
  • Bin leider noch nicht so weit als das ich damit etwas anfangen könnte.
    :(
    mein Code sieht bisher so aus

    Spoiler anzeigen
    [autoit]

    $Sprachen = GUICtrlCreateMenu( IniRead("Progdatei\" & $Sprache & ".lng", "Menue", "Sprachen","Sprachen"), $Einstellungen )
    $search = FileFindFirstFile( "Progdatei\*.lng")
    If $search = -1 Then
    MsgBox(0, "Fehler", "Es wurden keine Sprachdateien gefunden")
    EndIf
    While 1
    $file = FileFindNextFile($search)
    If @error Then ExitLoop
    GUICtrlCreateMenuItem( $file, $Sprachen )
    WEnd
    FileClose($search)

    [/autoit]

    Einmal editiert, zuletzt von Flarkus (15. Juli 2009 um 20:51)

  • Der erste Teil

    Spoiler anzeigen
    [autoit]

    #include
    #include

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

    ;Variabeldeklaration
    Dim $Wndws, $msg
    Dim $RegCod4 = RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Activision\Call of Duty 4", "InstallPath")

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

    $Wndws = GUICreate("Call of Duty 4 - Serverkonfigurator von RL", 700, 625)
    GUISetIcon("%SystemRoot%\system32\SHELL32.dll", 47)

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

    _Menue() ;Menues erstellen

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

    $Tab = GUICtrlCreateTab(0, 0, 700, 570)
    ;Tab Servereinstellungen-------------------------------------------------------------------------------------------------
    $TabServer = GUICtrlCreateTabItem("Servereinstellungen")

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

    $TabGame = GUICtrlCreateTabItem("Spieleinstellungen")
    GUICtrlCreateTabItem("") ; Beendet die Tab Definition
    GUICtrlSetState($TabServer,$GUI_SHOW)

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

    GUISetState(@SW_SHOW, $Wndws)

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

    While 1
    $msg = GUIGetMsg(1)

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

    Select
    Case $msg[0] = $Dateioeffnen
    $fo = FileOpenDialog("Konfigurationsdatei auswählen", $RegCod4 & "\Main", "(*.cfg)")
    MsgBox(0,"Fo", $fo);fileopen _funcload einarbeiten
    Case $msg[0] = $Dateispeichern
    $fs = FileSaveDialog("Konfigurationsdatei auswählen", $RegCod4 & "\Main", "(*.cfg)")
    MsgBox(0,"Fo", $fs) ;filesave _funcsave einarbeiten
    Case $msg[0] = $Serverstart
    ;serverstart
    Case $msg[0] = $Sprachen
    MsgBox(0,"Sprache", $Sprachen)
    Case $msg[0] = $GUI_EVENT_CLOSE
    ExitLoop
    EndSelect
    WEnd

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


    und der Rest

    Spoiler anzeigen
    [autoit]

    Func _Menue()
    Local $Sprache, $MenueText, $search, $file
    Global $Dateimenue, $Dateioeffnen, $Dateispeichern, $Serverstart
    Global $Einstellungen, $Sprachen, $BefehlsVariabel,$BefehlNichts, $BefehlSet, $BefehlSetA
    Global $Info, $InfoMeldung

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

    $Sprache = IniRead("Progdatei\Config.ini", "Optionen", "Sprache", "Deutsch")
    $DateiMenue = GUICtrlCreateMenu (IniRead("Progdatei\" & $Sprache & ".lng", "Menue", "Datei","Datei"))
    $Dateioeffnen = GUICtrlCreateMenuItem( IniRead("Progdatei\" & $Sprache & ".lng", "Menue", "öffnen","Datei öffnen"), $DateiMenue )
    $Dateispeichern = GUICtrlCreateMenuItem( IniRead("Progdatei\" & $Sprache & ".lng", "Menue", "speichern","Datei speichern"), $DateiMenue )
    $Serverstart = GUICtrlCreateMenuItem( IniRead("Progdatei\" & $Sprache & ".lng", "Menue", "Start","Server starten"), $DateiMenue )
    $Einstellungen = GUICtrlCreateMenu ( IniRead("Progdatei\" & $Sprache & ".lng", "Menue", "Optionen","Optionen"))
    $Sprachen = GUICtrlCreateMenu( IniRead("Progdatei\" & $Sprache & ".lng", "Menue", "Sprachen","Sprachen"), $Einstellungen )
    $search = FileFindFirstFile( "Progdatei\*.lng")
    If $search = -1 Then
    MsgBox(0, "Fehler", "Es wurden keine Sprachdateien gefunden")
    EndIf
    While 1
    $file = FileFindNextFile($search)
    If @error Then ExitLoop
    GUICtrlCreateMenuItem( $file, $Sprachen )
    WEnd
    FileClose($search)
    $BefehlsVariabel = GUICtrlCreateMenu( IniRead("Progdatei\" & $Sprache & ".lng", "Menue", "Befehlsvariabel","Befehlsvariabel"), $Einstellungen )
    $BefehlNichts = GUICtrlCreateMenuItem( "...", $BefehlsVariabel)
    $BefehlSet = GUICtrlCreateMenuItem( "Set", $BefehlsVariabel)
    $BefehlSetA = GUICtrlCreateMenuItem( "Seta", $BefehlsVariabel)
    $Befehlsvariabel = IniRead("Progdatei\Config.ini", "Optionen", "Befehlsvariabel", "1")
    Select
    case $Befehlsvariabel = 0
    GUICtrlSetState( $BefehlNichts, $GUI_CHECKED)
    case $Befehlsvariabel = 1
    GUICtrlSetState( $BefehlSet, $GUI_CHECKED)
    case $Befehlsvariabel = 2
    GUICtrlSetState( $BefehlSetA, $GUI_CHECKED)
    EndSelect
    $Info = GUICtrlCreateMenu ( "?")
    $InfoMeldung = GUICtrlCreateMenuItem( IniRead("Progdatei\Config.ini", "Menue", "Info", "Info"), $Info)

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

    ;~
    ;~ $MenueText = IniRead("Progdatei\" & $Sprache & ".lng", "Menue", "Datei","rrr")
    ;~ MsgBox(0,"Sprache", $MenueText)
    ;~ GUICtrlSetData($DateiMenue,$MenueText,"ssss")
    EndFunc

    [/autoit]
  • Jedes (?) Control bekommt eine ID (zeigt unter anderem das autoit window tool), darüber kann es im MessageLoop Modus angesprochen werden:

    Spoiler anzeigen
    [autoit]


    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>

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

    Opt("GUICoordMode", 1)

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

    Global $HauptGUI = GUICreate("", 100, 100, -1, -1)
    GUICtrlCreateButton("Button1", 10, 10)
    GUICtrlCreateButton("Button2", 10, 40)

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

    GUISetState(@SW_SHOW, $HauptGUI)

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

    While 1

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

    $msg = GUIGetMsg()
    switch $msg
    case $GUI_EVENT_Close
    Exit
    case 3
    MsgBox(32 + 4, "", "Hallo hier ist Button1")
    case 4
    MsgBox(32 + 4, "", "Hallo hier ist Button2")
    EndSwitch
    WEnd

    [/autoit]


    Allerdings ist bei dir nichtmal die Anzahl der Controls so ohne weiteres bekannt?
    Dann wirds schwierig :(
    Irgendwie erscheint mir das auch wenig sinnvoll, was haste denn eigentlich vor? Vielleicht gibts ein besseres Konzept?

  • wollte ein Programm schreiben, bei dem man über ne Auswahl die eigene Sprache einstellen kann. Da es keinen leichten Weg gibt mache ich es über Filopendialog das geht auch.
    Danke für die Hilfe

  • Fileopendialog ist wohl das einfachste und das kannn ich zumindest :)
    Dachte nur das es ne Möglichkeit gab die Kindelemente zu ermitteln. Schwamm drüber, wozu den Kopf unnötig zerbrechen, wenns auch so geht.