Mehrere Checkboxen mit unterschiedlichen Funktionen

  • Hallo AutoIt-Experten,

    ich steh mal wieder vor meinem nächsten Problem. Ich erstelle gerade für mich und meine Arbeitskollegen ein kleines Programm, worüber wir unsere eMailvorlagen (welche wir unseren Kunden zusenden) auswählen und senden können. Soweit ist das Grundgerüst schon fertig und funktioniert auch so wie ich mir das vorstelle.

    Nun kommen wir aber an den Punkt, dass auch Dateianhänge mitgesendet werden müssen. Bei einem einzelnen Dateianhang wär das kein Problem nur müssen pro Mail teils 3 Anhänge mit raus.

    Also hab ich dafür Checkboxen angelegt und der User kann selbst entscheiden ob und welche Anhänge er mit rausschicken will.

    Checkboxen sind bereits implentiert jedoch schnelle ich es nicht wie ich es hinbekomme das, wenn z.b. checkbox 1 und checkbox 2 aktiv sind (und checkbox 3 nicht) er dann Anhang X und Y mit anhängt (und Anhang Z z.b. nicht)

    Man sollte sich mal mein Script anschauen um zu verstehen wie es funktioniert. Es ist noch lange nicht vollständig. Ich habe nur eine Inhalte gefüllt, nur um zu schauen wie es funktioniert...

    Spoiler anzeigen
    [autoit]


    ;################################ Includes ################################
    #include <GuiConstantsEx.au3>
    #include <WindowsConstants.au3>
    #include <EditConstants.au3>
    ;############################## User auslesen #############################
    $winuser = RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\winlogon", "Defaultusername")
    If $winuser = "751076" then
    $winuser = "Max Mustermann"
    ElseIf $winuser = "828520" Then
    $winuser = "Peter Mustermann"
    ElseIf $winuser = "748169" Then
    $winuser = "Klaus Mustermann"
    ElseIf $winuser = "759732" Then
    $winuser = "Horst Mustermann"
    ElseIf $winuser = "828487" Then
    $winuser = "Fritz Mustermann"
    EndIf

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

    $Read_ZP500_Reset1 = FileRead(@ScriptDir & '\' & 'zp_500_reset.txt')
    $Read_ZP500_Reset = StringReplace($Read_ZP500_Reset1, 'Dein Name', $winuser)
    $Read_LP2348_Reset1 = FileRead(@ScriptDir & '\' & 'LP2348_reset.txt')
    $Read_LP2348_Reset = StringReplace($Read_LP2348_Reset1, 'Dein Name', $winuser)
    ;############################### Dateianhänge #############################
    $Datei1 = "M:\test1.txt"
    $Datei2 = "M:\test2.txt"
    $Datei3 = "M:\test3.txt"
    $Datei4 = "M:\test4.txt"
    $Datei5 = "M:\test5.txt"
    $Datei6 = "M:\test6.txt"
    ;############################## GUI erstellen #############################
    $GUI = GUICreate("The Templater", 620, 300)
    $Combo_Template = GUICtrlCreateCombo("Bitte auswählen", 30, 30, 350, 20)
    GUICtrlSetData(-1,"ZP500 Resetanleitung|LP2348 Resetanleitung|LP2844 Resetanleitung|LP2844 LINE/PAGE Mode ändern|Konfiguration FSM 7.15|" & _
    "Software 07.15 Serbien/Montenegro Patch|Schwedische Postleitzahlen|Software V3|Software 07.15|Datenbank Exportierung FSM Software|" & _
    "Löschen der Temporären Internetdateien für den Internet Explorer|Löschen der Temporären Internetdateien für Firefox|Löschen der Temporären Internetdateien für Opera|Löschen der Temporären Internetdateien für Google Chrome|" & _
    "Löschen der Temporären Internetdateien für Safari|Erstellen eines Screenshots (MAC)|Erstellen eines Screenshots|Lite Antwort Copy-Paste für DE/CH/AT Mastermails|FedEx ZP500 LINE/PAGE Mode ändern|" & _
    "Z4M Resetanleitung", "Bitte auswählen")

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

    $Combo_Template_Read = GUICtrlRead($Combo_Template)

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

    $Input_Template = GUICtrlCreateEdit("", 30, 60, 350, 200, BitOR ($WS_VSCROLL, $WS_HSCROLL, $ES_MULTILINE, $ES_AUTOVSCROLL, $ES_AUTOHSCROLL, $ES_WANTRETURN))

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

    GUICtrlCreateGroup("", 395, 24, 210, 236)
    GUICtrlCreateLabel("Dateianhänge:", 400, 32, 80, 18)

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

    $check1 = GUICtrlCreateCheckbox("Testcheckbox 1", 400, 60, 150, 18)
    GUICtrlSetState($check1, $GUI_HIDE)
    $check2 = GUICtrlCreateCheckbox("Testcheckbox 2", 400, 90, 150, 18)
    GUICtrlSetState($check2, $GUI_HIDE)
    $check3 = GUICtrlCreateCheckbox("Testcheckbox 3", 400, 120, 200, 18)
    GUICtrlSetState($check3, $GUI_HIDE)

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

    $check4 = GUICtrlCreateCheckbox("Testcheckbox 4", 400, 60, 150, 18)
    GUICtrlSetState($check4, $GUI_HIDE)
    $check5 = GUICtrlCreateCheckbox("Testcheckbox 5", 400, 90, 150, 18)
    GUICtrlSetState($check5, $GUI_HIDE)
    $check6 = GUICtrlCreateCheckbox("Testcheckbox 6", 400, 120, 200, 18)
    GUICtrlSetState($check6, $GUI_HIDE)

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

    GUICtrlCreateGroup("", 30, 260, 165, 32)
    GUICtrlCreateLabel("Empf.:", 35, 272, 30, 18)
    $Input_Empfaenger = GUICtrlCreateInput("", 70, 270, 120, 17)
    $Send_Button = GUICtrlCreateButton("Absenden", 200, 270, 60, 17)

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

    GUISetState(@SW_SHOW, $GUI)
    ;######################## GUI While Schleife ##########################
    While 1
    Switch (GUIGetMsg())
    Case $GUI_EVENT_CLOSE
    Exit
    Case $Combo_Template
    $Combo_Template_Read = GUICtrlRead($Combo_Template)
    _Combo_Template()
    Case $Send_Button
    $Input_Empfaenger_Read = GUICtrlRead($Input_Empfaenger)
    _CreateMailItem()
    EndSwitch
    WEnd

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

    ;############################## Funktionen #############################
    Func _CreateMailItem()
    Local $olMailItem = 0
    Local $olFormatRichText = 3
    Local $olImportanceLow = 0
    Local $olImportanceNormal= 1
    Local $olImportanceHigh = 2
    Local $olFormatHTML = 1

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

    $oOApp = ObjCreate("Outlook.Application")
    $oOMail = $oOApp.CreateItem($olMailItem)

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

    With $oOMail
    .To = $Input_Empfaenger_Read ;("beispiel@domain.com")
    .Subject = GUICtrlRead($Combo_Template) ;"email betreff"
    ;.BodyFormat = $olFormatRichText
    .BodyFormat = $olFormatHTML
    ;.Importance = $olImportanceHigh
    ;.Attachments.Add ("M:\test1.txt")
    .HTMLBody = GUICtrlRead($Input_Template)
    ;.Body = GUICtrlRead($Input_Template)
    .Display
    ;.Send ;ist aus Sicherheitsgründen standartmäßig deaktiviert
    EndWith
    EndFunc ;--> _CreateMailItem()

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

    Func _Combo_Template()
    If $Combo_Template_Read = "Bitte auswählen" Then
    GUICtrlSetData($Input_Template, "")
    GUICtrlSetState($check1, $GUI_HIDE)
    GUICtrlSetState($check2, $GUI_HIDE)
    GUICtrlSetState($check3, $GUI_HIDE)
    GUICtrlSetState($check4, $GUI_HIDE)
    GUICtrlSetState($check5, $GUI_HIDE)
    GUICtrlSetState($check6, $GUI_HIDE)
    EndIf
    If $Combo_Template_Read = "ZP500 Resetanleitung" Then
    GUICtrlSetData($Input_Template, $Read_ZP500_Reset)
    GUICtrlSetState($check1, $GUI_SHOW)
    GUICtrlSetState($check2, $GUI_SHOW)
    GUICtrlSetState($check3, $GUI_SHOW)
    GUICtrlSetState($check4, $GUI_HIDE)
    GUICtrlSetState($check5, $GUI_HIDE)
    GUICtrlSetState($check6, $GUI_HIDE)
    EndIf
    If $Combo_Template_Read = "LP2348 Resetanleitung" Then
    GUICtrlSetData($Input_Template, $Read_LP2348_Reset)
    GUICtrlSetState($check1, $GUI_HIDE)
    GUICtrlSetState($check2, $GUI_HIDE)
    GUICtrlSetState($check3, $GUI_HIDE)
    GUICtrlSetState($check4, $GUI_SHOW)
    GUICtrlSetState($check5, $GUI_SHOW)
    GUICtrlSetState($check6, $GUI_SHOW)
    EndIf
    EndFunc ;--> _Combo_Template()

    [/autoit]

    Mein AutoIT Smartphone GUI >>hier<<

    Der Mensch ist das einzige Tier, dass arbeiten muss.

    Einmal editiert, zuletzt von mirko2002 (26. November 2012 um 12:12)

  • ???

    Das die Funktion

    [autoit]

    .Attachments.Add ("M:\test1.txt")

    [/autoit]

    für das anhängen der Attachments zuständig ist, ist mir auch klar... :)

    Sie war nicht ohne Grund erstmal auskommentiert, da ich nicht eine fest vorgegebene Datei anhängen will sondern die, die der User über die Checkboxen ausgewählt hat.

    Mein AutoIT Smartphone GUI >>hier<<

    Der Mensch ist das einzige Tier, dass arbeiten muss.

  • Hmm..... das würde soweit funktionieren sofern die Dateinamen aufsteigend mit den Zahlen wären ;)

    Die sind aber total anders... die test1.txt diente hier nur zur Veranschaulichung :D

    Stell Dir vor die Dateinamen lauten shortguide.pdf und technical_description.pdf usw....

    Mit der For-Schleife sollte das hinzufügen möglich sein.... nur irgendwie übersteigt das mein Wissen in AutoIt :(

    Mein AutoIT Smartphone GUI >>hier<<

    Der Mensch ist das einzige Tier, dass arbeiten muss.

  • Sind die Namen der Anhänge denn auch alle hart codiert?

    Sonst würde ich das vielleicht ein wenig anders schreiben...
    Wenn hart codiert, und keine Verbindung zu ner DB oder sowas ist, dann vll. ein Array erstellen indem alle Anhänge (namentlich) gespeichert werden, und das Array als eine art Strichliste nutzen ... bei denen die gechecked worden sind wird dann der name aus dem Array gesucht und ab die post.

    #Edit: sry grad total unfähig das Forum zu nutzen, hab erst den Falschen post gelöscht gehabt ... naja Code s.u. :)

    Grüße Yaerox

    Grüne Hölle

    Einmal editiert, zuletzt von Yaerox (22. November 2012 um 10:29)

  • Na ich geb sie oben in dem Script mit an, ja.... da wo jetzt das steht:

    [autoit]

    ;############################### Dateianhänge #############################
    $Datei1 = "M:\test1.txt"
    $Datei2 = "M:\test2.txt"
    $Datei3 = "M:\test3.txt"
    $Datei4 = "M:\test4.txt"
    $Datei5 = "M:\test5.txt"
    $Datei6 = "M:\test6.txt"

    [/autoit]

    Nur halt mir unterschiedlichen Dateinamen. Und wichtig ist halt, dass pro Template was man auswhählt, ja auch nicht alle Anhänge zur Verfügung stehen sondern immer nur die, die auch zur Vorlage dazugehören. Also z.b. Datei 1-3 für Template 1. Datei 4 und 5 für Template 2 usw.... mal gibts auch Templates ganz ohne Anhang.

    Mein AutoIT Smartphone GUI >>hier<<

    Der Mensch ist das einzige Tier, dass arbeiten muss.

  • Dann vielleicht sowas?

    Spoiler anzeigen
    [autoit]

    Func _CreateMailItem()
    Local $olMailItem = 0
    Local $olFormatRichText = 3
    Local $olImportanceLow = 0
    Local $olImportanceNormal= 1
    Local $olImportanceHigh = 2
    Local $olFormatHTML = 1
    Local $check

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

    $oOApp = ObjCreate("Outlook.Application")
    $oOMail = $oOApp.CreateItem($olMailItem)

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

    With $oOMail
    .To = $Input_Empfaenger_Read ;("beispiel@domain.com")
    .Subject = GUICtrlRead($Combo_Template) ;"email betreff"
    ;.BodyFormat = $olFormatRichText
    .BodyFormat = $olFormatHTML
    ;.Importance = $olImportanceHigh

    Local $anhaenge
    If GUICtrlRead($check1) = 1 Then
    $anhaenge = $anhaenge & 0
    EndIf
    If GUICtrlRead($check2) = 1 Then
    $anhaenge = $anhaenge & 1
    EndIf
    If GUICtrlRead($check3) = 1 Then
    $anhaenge = $anhaenge & 2
    EndIf
    If GUICtrlRead($check4) = 1 Then
    $anhaenge = $anhaenge & 3
    EndIf
    If GUICtrlRead($check5) = 1 Then
    $anhaenge = $anhaenge & 4
    EndIf
    If GUICtrlRead($check6) = 1 Then
    $anhaenge = $anhaenge & 5
    EndIf

    Local $splitAnhaenge = StringSplit($anhaenge, "")
    For $i To $splitAnhaenge[0]
    .Attachments.Add ($aDatei[$i])
    Next

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

    .HTMLBody = GUICtrlRead($Input_Template)
    ;.Body = GUICtrlRead($Input_Template)
    .Display
    ;.Send ;ist aus Sicherheitsgründen standartmäßig deaktiviert
    EndWith
    EndFunc ;--> _CreateMailItem()

    [/autoit]


    Ich hab grad net ganz so viel Zeit mir darüber Gedanken zu machen, man könnte bei dem Beispiel nun auch die Schleife und den Split weglassen und statt die Variable anhaenge zu nutzen bei den If-Abfragen immer direkt .Attachments.Add hinschreiben ... ist halt keine wirklich optimale Lösung und je nachdem wie viele verschiedene Anhänge es gibt unpraktisch aber das wäre jetzt ein wenig gedanken machen wie man das anders verpacken kann.

    Trotzdem hoffe ich wenigstens etwas geholfen haben zu können.
    Grüße

    Grüße Yaerox

    Grüne Hölle

  • Hm stimmt....

    --> "If-Abfragen immer direkt .Attachments.Add hinschreiben" <--

    Damit könnt ich es erstmal mit meinem halbwissen machbar hinbekommen. soviele dateianhänge werden es ingesamt auch nicht sein, so das das tool nicht so überfordert sein wird mit abfragen.

    Cool, danke ;)

    Wenn wer noch andere Lösungen hat - immer her damit, mit IF-Abfragen wirds dann natürlich recht lang und unübersichtlich.

    Mein AutoIT Smartphone GUI >>hier<<

    Der Mensch ist das einzige Tier, dass arbeiten muss.

  • Wenn ich Zeit finden sollte werd ich mir darüber nochmal gedanken machen, es gibt ja diverse Möglichkeiten das umzusetzen, vll. ist ja sonst noch jemand von den erfahrenen AutoIt proggern später on der dir eine optimale Lösung bieten kann :)

    Grüße

    Grüße Yaerox

    Grüne Hölle