Auslesen von Combobox und Schleifenproblematik

  • Hallo Gemeinde,

    ich wollte mal was probieren und üben. Da ich ja Galenda-Tester bin und nur Bugs suche, wollte ich auch gerne mal einen kleinen Code-Einsatz beisteuern.
    Auch wenns später keine verwendung findet, aber eine übung ist es allemal,
    um auch mal selber zu schreiben und zu verstehen was ich schreibe.
    Habe mir die Hilfe genommen und vieles probiert ....

    Jetzt dachte ich mir mach nee Gui ... einfach und simpel...
    denkste ...

    Mein prob ist das ich eine Combobox habe und diese einigen Einträgen hat.
    Aber ich weiß nicht wie ich diese Einträge ansprechen kann.
    Ich habe mal meinen Codeansatz angezeigt... bekomme es aber nicht ans laufen ...
    entweder heißt es "Sie haben OK gedrückt" oder es passiert nix... so wie jetzt

    Also, wer kann mir einige tricks geben ... und oder erläuterungen ... das ich als anfänger damit zurecht komme.

    Habe das Script denke ich gut auskomentiert ....

    Ach ... und bitte nicht Steinigen


    Grüsse

    Chicago


    Spoiler anzeigen
    [autoit]

    ; ##############################
    ; includes
    ; ##############################
    #include <Array.au3>
    ; [FTP-Funktionen]:
    #include <GUIConstants.au3>
    #Include <GuiStatusBar.au3>
    #Include <GuiListView.au3>
    #Include <GuiMonthCal.au3>
    #Include <Date.au3>
    #include <String.au3>
    #include <Math.au3>
    #include <Color.au3>
    #include <File.au3>

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

    ; [_INetSmtpMail()];
    #include <INet.au3>
    ; _Singleton:
    #include <Misc.au3>
    #Include <GuiList.au3>
    #Include <GuiCombo.au3>

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

    GUICreate("Geburtstagsliste", 500, 400) ; Fenster dimensionieren und Titel des Fensters
    Opt("GUICoordMode",3)
    Opt("GUIOnEventMode", 1) ; Wechsle in den OnEvent Modus

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

    $text = "Name:"
    $text1 = "Geb:"
    $text3 = "Alarme:"

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

    $checkCN = GUICtrlCreateCheckbox ($text & "", 15, 20, 50, 10) ; Kästchen zum anklicken
    $file = GUICtrlCreateInput ("", 80, 15, 100, 20) ; Eingebefeld
    $checkCN = GUICtrlCreateCheckbox ($text1 & "", 200, 20, 50, 10) ; <-- Diese Checkbox möchte ich nicht nur den Text $text1
    $file1 = GUICtrlCreateInput ("", 250, 15,80, 20)
    $checkCN_Alarme = GUICtrlCreateCheckbox ($text3 & "", 350, 20, 50, 10)

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

    $AusWahlCombo = GUICtrlCreateCombo ("Auswahl", 20,350, 110) ; Auswahlbox mit verschiedenen möglichkeiten
    GUICtrlSetData(-1,"Liste laden|Zeile einfügen|Alles markieren|Übergeben|Alarme für alle|Speichern|Beenden") ; Auswahlmöglichkeiten der Combobox
    $OKButton = GUICtrlCreateButton ("&OK", 150, 348, 50) ; OK Button
    GUICtrlSetOnEvent($OKButton, "OKButton")
    GUISetState(@SW_SHOW)

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

    While 1
    $msg = GUIGetMsg()

    If $msg = $GUI_EVENT_CLOSE Then ExitLoop
    Wend

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

    GUISetState () ; will display an empty dialog box with a combo control with focus on

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

    Func OKButton()
    ;MsgBox(0, "GUI Event", "Du hast auf OK geklickt!")

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

    #cs
    Hier soll folgendes gemacht werden....
    Wenn in der Combobox "Auswahl" steht und der Button OK gedrückt wird = MsgBox( "Bitte wählen Sie eine Aktion" )
    Dann soll abgefragt werden was jetzt in der Combobox steht .....
    Entsprechend soll gehandelt werden ....

    Momentan passiert bei klick auf OK nichts
    #ce
    ; Auswahl
    if $AusWahlCombo = "Auswahl" then
    MsgBox(4096, "", "Wählen Sie eine Aktion")

    if $AusWahlCombo = "Liste laden" then ; vieleicht auch mit case machen ?
    MsgBox("Liste laden"

    ; Liste laden
    if $AusWahlCombo = "Liste laden" then ; vieleicht auch mit case machen ?
    MsgBox(4096,"", "Liste laden")
    ; Vorhandene Ini-Datei laden aus Galenda-Ordner

    ; Zeile einfügen
    if $AusWahlCombo = "Zeile einfügen" then ; vieleicht auch mit case machen ?
    ;Zeile_mehr()
    MsgBox(4096 "Zeile wurde eingefügt", 2)

    ;Neue Zeile einfügen

    ; Alles markieren
    if $AusWahlCombo = "Alles markieren" then
    ;$checkCN = "Check"
    MsgBox(4096 "Alles markiert" )
    ; alle GUICtrlCreateCheckboxen anctivieren

    ; Übergeben an Galenda mit Alarme
    if $AusWahlCombo = "Übergeben" then
    ; alle marckierten Einträge an Galenda übergeben und eintragen
    MsgBox(4096 "Daten Übergeben" )

    ; Alarme für alle setzen
    if $AusWahlCombo = "Alarm für alle" then
    ; alle marckierten Einträge mit einmalig eingestelltem Alarm versehen und bei Galenda mit eintragen
    MsgBox(4096 "Alle Einträge mit Alarm versehen" )

    ; Speichern in ini-Datei
    if $AusWahlCombo = "Speichern" then

    ; alle eingaben im Galenda-Ordner in einer ini-Datei speichern
    MsgBox(4096 "Ini-Datei geschrieben" )

    ; Beenden
    if $AusWahlCombo = "Beenden" then
    MsgBox(4096 " Beenden ")
    CLOSEClicked()

    EndIf
    EndIf
    EndIf
    EndIf
    EndIf
    EndIf
    EndIf
    EndIf
    EndIf

    EndFunc

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




    GUISetOnEvent($GUI_EVENT_CLOSE, "CLOSEClicked")

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

    Func CLOSEClicked()
    ;Beachte: an diesem Punkt wäre @GUI_CTRLID gleich $GUI_EVENT_CLOSE,
    ;und @GUI_WINHANDLE wäre gleich $mainwindow
    MsgBox(0, "GUI Event", "Du hast auf CLOSE geklickt! Programm wird beendet...")
    Exit
    EndFunc

    func Zeile_mehr()

    $checkCN = GUICtrlCreateCheckbox ($text & "", 15, 95, 50, 10)
    $file = GUICtrlCreateInput ("", 80, 90, 100, 20)
    $checkCN = GUICtrlCreateCheckbox ($text1 & "", 200, 95, 50, 10) ; <-- Diese Checkbox möchte ich nicht nur den Text $text1
    $file = GUICtrlCreateInput ("", 250, 90,80, 20)
    $checkCN_Alarme = GUICtrlCreateCheckbox ($text3 & "", 350, 95, 50, 10)
    EndFunc

    [/autoit]
  • Hi Chicago,

    bist Du Dir sicher, dass Dein geposteter Code so überhaupt läuft? Das kann nicht sein!

    Fast jeder MsgBox-Aufruf hat zu wenige Parameter und/oder es fehlen Kommata.

    Deine Bemerkungen in den Remarks, man sollte vielleicht besser case anstatt if nehmen, ist sicherlich deutlich eleganter. ;)

  • Hi,

    setz mal vor deine Arie an MsgBoxen:

    Code
    $selcombo = GUICtrlRead ( $AusWahlCombo , 0 )
    MsgBox(0,"",$selcombo)

    Du musst erst den Wert deiner Box auslesen bevor du ihn weiterverarbeiten kannst.

    Ich hoffe das hilft schon.

    Grüße

    Machtin

  • hallo Machtin,

    deine antwort hat mir schon sehr geholfen. Jetzt muss ich mal schauen wie ich die schleifen machen muss.

    Flex, wie das alles so geht mit Parametern und Komata ... muss ich erst noch lernen
    und probieren ...
    Aber schon mal danke .... werde mich aber bestimmt nochmal melden

    Chicago


    Edit: Super ich habs geschafft...... danke an alle ....

    Spoiler anzeigen
    [autoit]


    ; ##############################
    ; includes
    ; ##############################
    #include <Array.au3>
    ; [FTP-Funktionen]:
    #include <GUIConstants.au3>
    #Include <GuiStatusBar.au3>
    #Include <GuiListView.au3>
    #Include <GuiMonthCal.au3>
    #Include <Date.au3>
    #include <String.au3>
    #include <Math.au3>
    #include <Color.au3>
    #include <File.au3>

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

    ; [_INetSmtpMail()];
    #include <INet.au3>
    ; _Singleton:
    #include <Misc.au3>
    #Include <GuiList.au3>
    #Include <GuiCombo.au3>

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

    GUICreate("Geburtstagsliste", 500, 400) ; Fenster dimensionieren und Titel des Fensters
    Opt("GUICoordMode",3)
    Opt("GUIOnEventMode", 1) ; Wechsle in den OnEvent Modus

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

    $text = "Name:"
    $text1 = "Geb:"
    $text3 = "Alarme:"

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

    ; Zeile

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

    $checkCN = GUICtrlCreateCheckbox ($text & "", 15, 20, 50, 10) ; Kästchen zum anklicken
    $file = GUICtrlCreateInput ("", 80, 15, 100, 20) ; Eingebefeld
    $checkCN = GUICtrlCreateCheckbox ($text1 & "", 200, 20, 50, 10) ; <-- Diese Checkbox möchte ich nicht nur den Text $text1
    $file1 = GUICtrlCreateInput ("", 250, 15,80, 20)
    $checkCN_Alarme = GUICtrlCreateCheckbox ($text3 & "", 350, 20, 50, 10)

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

    $AusWahlCombo = GUICtrlCreateCombo ("Auswahl", 20,350, 110) ; Auswahlbox mit verschiedenen möglichkeiten
    GUICtrlSetData(-1,"Liste laden|Zeile einfügen|Alles markieren|Übergeben|Alarme für alle|Speichern|Beenden";) ; Auswahlmöglichkeiten der Combobox
    $OKButton = GUICtrlCreateButton ("&OK", 150, 348, 50) ; OK Button
    GUICtrlSetOnEvent($OKButton, "OKButton";)
    GUISetState(@SW_SHOW)

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

    While 1

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

    $msg = GUIGetMsg()

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

    Wend

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

    GUISetState ()

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

    Func OKButton()

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

    $selcombo = GUICtrlRead ( $AusWahlCombo , 0 )

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

    ; Auswahl
    if $selcombo <> "Auswahl" then
    _Listeladen()
    Else
    MsgBox(4096, "", "Wählen Sie eine Aktion",1 )
    EndIf
    EndFunc

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

    Func _Listeladen()
    $selcombo = GUICtrlRead ( $AusWahlCombo , 0 )
    if $selcombo <> "Liste laden" then
    Zeileeinfuegen()
    Else
    MsgBox(4096, "", "Liste geladen";)
    EndIf
    EndFunc

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

    Func Zeileeinfuegen()
    $selcombo = GUICtrlRead ( $AusWahlCombo , 0 )
    if $selcombo <> "Zeile einfügen" Then
    _Allesmarkieren()
    Else
    MsgBox(4096, "", "Zeile eingefügt";)
    EndIf
    EndFunc

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

    func _Allesmarkieren()
    $selcombo = GUICtrlRead ( $AusWahlCombo , 0 )
    if $selcombo <> "Alles markieren" Then
    _uebergeben()
    Else
    MsgBox(4096, "", "Alles markiert";)
    EndIf
    EndFunc

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

    Func _uebergeben()
    $selcombo = GUICtrlRead ( $AusWahlCombo , 0 )
    If $selcombo <> "Übergeben" Then
    _Alarmealle()
    Else
    MsgBox(4096, "", "Daten weitergeleitet";)
    EndIf
    EndFunc

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

    Func _Alarmealle()
    $selcombo = GUICtrlRead ( $AusWahlCombo , 0 )
    if $selcombo <> "Alarme für alle" then
    _Speichern()
    Else
    MsgBox(4096, "", "Alarme gesetzt für alle Einträge";)
    EndIf
    EndFunc

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

    Func _Speichern()
    $selcombo = GUICtrlRead ( $AusWahlCombo , 0 )
    if $selcombo <> "Speichern" Then
    _Beenden()
    Else

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

    MsgBox(4096, "", "Daten in ini-Datei gespeichert";)
    EndIf
    EndFunc

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

    Func _Beenden()
    $selcombo = GUICtrlRead ( $AusWahlCombo , 0 )
    if $selcombo = "Beenden" then
    CLOSEClicked()
    EndIf
    EndFunc

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

    Func CLOSEClicked() ; schließt Fenster
    Exit
    EndFunc

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

    So jetzt hab ich nur noch das problem ..... wie kann ich das mit der Zeile bewerkstelligen..... Zeile ist gegeben .... aber Zeile mehr mit abstand
    und die 2 Checkbox sollte weg...
    Also etwa so ....

    Checkbox / Input1 \ $text / Input 2 Checkbox

    Chicago :stolz_bin:

    • Offizieller Beitrag

    Hi,

    sorry hab das Ziel noch nicht verstanden, habe aber schon mal die Fehler ausgebaut.

    Spoiler anzeigen
    [autoit]

    ; ##############################
    ; includes
    ; ##############################
    #include <Array.au3>
    ; [FTP-Funktionen]:
    #include <GUIConstants.au3>
    #Include <GuiStatusBar.au3>
    #Include <GuiListView.au3>
    #Include <GuiMonthCal.au3>
    #Include <Date.au3>
    #include <String.au3>
    #include <Math.au3>
    #include <Color.au3>
    #include <File.au3>

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

    ; [_INetSmtpMail()];
    #include <INet.au3>
    ; _Singleton:
    #include <Misc.au3>
    #Include <GuiList.au3>
    #Include <GuiCombo.au3>

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

    GUICreate("Geburtstagsliste", 500, 400) ; Fenster dimensionieren und Titel des Fensters
    Opt("GUICoordMode", 3)
    Opt("GUIOnEventMode", 1) ; Wechsle in den OnEvent Modus

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

    $text = "Name:"
    $text1 = "Geb:"
    $text3 = "Alarme:"

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

    ; Zeile
    $checkCN = GUICtrlCreateCheckbox($text & "", 15, 20, 50, 20) ; Kästchen zum anklicken
    $file = GUICtrlCreateInput("", 80, 15, 100, 20) ; Eingebefeld
    $checkCN = GUICtrlCreateCheckbox($text1 & "", 200, 20, 50, 20) ; <-- Diese Checkbox möchte ich nicht nur den Text $text1
    $file1 = GUICtrlCreateInput("", 250, 15, 80, 20)
    $checkCN_Alarme = GUICtrlCreateCheckbox($text3 & "", 350, 20, 50, 20)
    $AusWahlCombo = GUICtrlCreateCombo("Auswahl", 20, 350, 110) ; Auswahlbox mit verschiedenen möglichkeiten
    GUICtrlSetData(-1, "Liste laden|Zeile einfügen|Alles markieren|Übergeben|Alarme für alle|Speichern|Beenden") ; Auswahlmöglichkeiten der Combobox
    $OKButton = GUICtrlCreateButton("&OK", 150, 348, 50) ; OK Button
    GUICtrlSetOnEvent($OKButton, "OKButton")
    GUISetState(@SW_SHOW)

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

    While 1

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

    $msg = GUIGetMsg()

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

    WEnd
    Func OKButton()
    $selcombo = GUICtrlRead($AusWahlCombo, 0)
    ; Auswahl
    If $selcombo <> "Auswahl" Then
    _Listeladen()
    Else
    MsgBox(4096, "", "Wählen Sie eine Aktion", 1)
    EndIf
    EndFunc ;==>OKButton

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

    Func _Listeladen()
    $selcombo = GUICtrlRead($AusWahlCombo, 0)
    If $selcombo <> "Liste laden" Then
    Zeileeinfuegen()
    Else
    MsgBox(4096, "", "Liste geladen")
    EndIf
    EndFunc ;==>_Listeladen

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

    Func Zeileeinfuegen()
    $selcombo = GUICtrlRead($AusWahlCombo, 0)
    If $selcombo <> "Zeile einfügen" Then
    _Allesmarkieren()
    Else
    MsgBox(4096, "", "Zeile eingefügt")
    EndIf
    EndFunc ;==>Zeileeinfuegen

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

    Func _Allesmarkieren()
    $selcombo = GUICtrlRead($AusWahlCombo, 0)
    If $selcombo <> "Alles markieren" Then
    _uebergeben()
    Else
    MsgBox(4096, "", "Alles markiert")
    EndIf
    EndFunc ;==>_Allesmarkieren

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

    Func _uebergeben()
    $selcombo = GUICtrlRead($AusWahlCombo, 0)
    If $selcombo <> "Übergeben" Then
    _Alarmealle()
    Else
    MsgBox(4096, "", "Daten weitergeleitet")
    EndIf
    EndFunc ;==>_uebergeben

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

    Func _Alarmealle()
    $selcombo = GUICtrlRead($AusWahlCombo, 0)
    If $selcombo <> "Alarme für alle" Then
    _Speichern()
    Else
    MsgBox(4096, "", "Alarme gesetzt für alle Einträge")
    EndIf
    EndFunc ;==>_Alarmealle

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

    Func _Speichern()
    $selcombo = GUICtrlRead($AusWahlCombo, 0)
    If $selcombo <> "Speichern" Then
    _Beenden()
    Else

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

    MsgBox(4096, "", "Daten in ini-Datei gespeichert")
    EndIf
    EndFunc ;==>_Speichern

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

    Func _Beenden()
    $selcombo = GUICtrlRead($AusWahlCombo, 0)
    If $selcombo = "Beenden" Then
    CLOSEClicked()
    EndIf
    EndFunc ;==>_Beenden

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

    Func CLOSEClicked() ; schließt Fenster
    Exit
    EndFunc ;==>CLOSEClicked

    [/autoit]

    So long,

    Mega

  • hi th.meger,

    ich wollte die Checkbox bei Geb: nicht haben .....
    die erste Checkbox soll für Name und Geb: zählen....
    brauche nur die beim Namen und die für Alarme.

    Und dann wollte ich noch, wenns geht ...... das ich wenn ich sage Zeile einfügen
    unter die vorhandene Zeile eine weitere einfügen.... was aber nicht so einfach ist,
    da sich doch die positionszahlen ändern ....zb:
    ($text & "", 15, 20, 50, 10) ; Edit ....<-- das hab ich noch immer
    ($text & "", 15, 50, 50, 10) ; Edit ....<-- das hab ich noch immer
    ($text & "", 15, 80, 50, 10) ; Edit ....<-- das hab ich noch immer

    hier die 20, 50, 80 und so weiter ........ und gibts eine möglichkeit alles in eine Zeile zu schreiben, was bei mir im Script ja zur Zeit noch 5 Zeilen sind.

    Desweiteren ist mir aufgefallen, das Du diese Zeile entfernt hast....

    GUISetOnEvent($GUI_EVENT_CLOSE, "CLOSEClicked";)

    Somit habe ich nicht mehr die möglichkeit über X die Gui zu schließen....


    grüsse

    Chicago


    Edit: So habe jetzt die eine Checkbox weg....

    $Geb = GUICtrlCreateLabel($text1 , 190, 50, 50, 20)


    Aber dafür wird bestimmt auch noch nee lösung geben ...

    Chicago

    • Offizieller Beitrag
    [autoit]

    Opt("GUIOnEventMode", 1) ; Wechsle in den OnEvent Modus
    ;;
    ;;
    While 1

    $msg = GUIGetMsg() ; Ersetze das mit Sleep(100)

    Wend

    [/autoit]


    Schönheitskorrektur:

    OnEventMode ODER GUIGetMsg( )

    Da du dich für OnEventMode entschieden hast schmeiß GUIGetMsg( ) ganz raus. Verwirrt dich sonst nur selbst.

  • hi th.meger,

    wie Du vieleicht sehen kannst im letzten post, habe ich einiges mit Edit markiert.

    Aber hier nochmal....

    Und dann wollte ich noch, wenns geht ...... das ich wenn ich sage Zeile einfügen
    unter die vorhandene Zeile eine weitere einfügen.... was aber nicht so einfach ist,
    da sich doch die positionszahlen ändern ....zb:
    ($text & "", 15, 20, 50, 10) ; Edit ....<-- das hab ich noch immer
    ($text & "", 15, 50, 50, 10) ; Edit ....<-- das hab ich noch immer
    ($text & "", 15, 80, 50, 10) ; Edit ....<-- das hab ich noch immer

    hier die 20, 50, 80 und so weiter ........ an 2 Stelle...


    grüsse

    Chicago