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
Zugriff auf Guictrlmenuitem wenn es mittels Funktion erstellt wird
-
- [ gelöst ]
-
Flarkus -
15. Juli 2009 um 19:14 -
Geschlossen -
Erledigt
-
-
also meinst du so:
[autoit]GUICreate("", 431, 497, 193, 125)
[/autoit]
$m1 = GUICtrlCreateMenu("Datei")
$mi1 = GUICtrlCreateMenuItem("speichern", $m1)
[autoit]
Und jetzt wenn man speichern drückt.While1
[/autoit]
$msg = GUIGetMsg()
Case $msg = $GUI_EVENT_CLOSE
Exit
Case $mi1
filewrite... -
Hallo
[autoit]
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.While 1
[/autoit][autoit][/autoit][autoit]
$msg = GUIGetMsg(1)Select
[/autoit][autoit][/autoit][autoit]
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_CLOSEExitLoop
[/autoit][autoit][/autoit][autoit][/autoit]
EndSelect
WEnd -
Schau mal hier rein: [ offen ] "Automatisch" erstellten Button ansprechen - Gute Idee gesucht!
Ist naja sagen wir mal suboptimal, leider hatte auch niemand sonst eine bessere Idee.
-
Bin leider noch nicht so weit als das ich damit etwas anfangen könnte.
mein Code sieht bisher so ausSpoiler anzeigen
[autoit]$Sprachen = GUICtrlCreateMenu( IniRead("Progdatei\" & $Sprache & ".lng", "Menue", "Sprachen","Sprachen"), $Einstellungen )
[/autoit]
$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) -
Vielleicht hab ichs auch missverstanden? Poste doch mal dein ganzes Skript.
-
Der erste Teil
Spoiler anzeigen
[autoit]#include
[/autoit] [autoit][/autoit] [autoit]
#include;Variabeldeklaration
[/autoit] [autoit][/autoit] [autoit]
Dim $Wndws, $msg
Dim $RegCod4 = RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Activision\Call of Duty 4", "InstallPath")$Wndws = GUICreate("Call of Duty 4 - Serverkonfigurator von RL", 700, 625)
[/autoit] [autoit][/autoit] [autoit]
GUISetIcon("%SystemRoot%\system32\SHELL32.dll", 47)_Menue() ;Menues erstellen
[/autoit] [autoit][/autoit] [autoit]$Tab = GUICtrlCreateTab(0, 0, 700, 570)
[/autoit] [autoit][/autoit] [autoit]
;Tab Servereinstellungen-------------------------------------------------------------------------------------------------
$TabServer = GUICtrlCreateTabItem("Servereinstellungen")$TabGame = GUICtrlCreateTabItem("Spieleinstellungen")
[/autoit] [autoit][/autoit] [autoit]
GUICtrlCreateTabItem("") ; Beendet die Tab Definition
GUICtrlSetState($TabServer,$GUI_SHOW)GUISetState(@SW_SHOW, $Wndws)
[/autoit] [autoit][/autoit] [autoit]While 1
[/autoit] [autoit][/autoit] [autoit]
$msg = GUIGetMsg(1)Select
[/autoit] [autoit][/autoit] [autoit][/autoit]
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
und der RestSpoiler anzeigen
[autoit]Func _Menue()
[/autoit] [autoit][/autoit] [autoit]
Local $Sprache, $MenueText, $search, $file
Global $Dateimenue, $Dateioeffnen, $Dateispeichern, $Serverstart
Global $Einstellungen, $Sprachen, $BefehlsVariabel,$BefehlNichts, $BefehlSet, $BefehlSetA
Global $Info, $InfoMeldung$Sprache = IniRead("Progdatei\Config.ini", "Optionen", "Sprache", "Deutsch")
[/autoit] [autoit][/autoit] [autoit]
$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]
;~ $MenueText = IniRead("Progdatei\" & $Sprache & ".lng", "Menue", "Datei","rrr")
;~ MsgBox(0,"Sprache", $MenueText)
;~ GUICtrlSetData($DateiMenue,$MenueText,"ssss")
EndFunc -
Jedes (?) Control bekommt eine ID (zeigt unter anderem das autoit window tool), darüber kann es im MessageLoop Modus angesprochen werden:
Spoiler anzeigen
[autoit]
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>Opt("GUICoordMode", 1)
[/autoit] [autoit][/autoit] [autoit]Global $HauptGUI = GUICreate("", 100, 100, -1, -1)
[/autoit] [autoit][/autoit] [autoit]
GUICtrlCreateButton("Button1", 10, 10)
GUICtrlCreateButton("Button2", 10, 40)GUISetState(@SW_SHOW, $HauptGUI)
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]While 1
[/autoit] [autoit][/autoit] [autoit]$msg = GUIGetMsg()
[/autoit]
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
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 -
Um in der eigenen Gui zu bleiben könnte man auch eine Combobox verwenden.
Oder eine Listbox mit "Suche"- Funktion für ganz viele Sprachen.
Oder eben einfach Filopendialog -
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.