1. Dashboard
  2. Mitglieder
    1. Letzte Aktivitäten
    2. Benutzer online
    3. Team
    4. Mitgliedersuche
  3. Forenregeln
  4. Forum
    1. Unerledigte Themen
  • Anmelden
  • Registrieren
  • Suche
Alles
  • Alles
  • Artikel
  • Seiten
  • Forum
  • Erweiterte Suche
  1. AutoIt.de - Das deutschsprachige Forum.
  2. Mitglieder
  3. entsel

Beiträge von entsel

  • Mail erstellen

    • entsel
    • 23. Januar 2013 um 19:06

    Servus

    Es gibt zwar schon etliches zum Thema EMail, aber das "Richtige" habe ich dennoch nicht gefunden.

    Das Programm soll E-Mails erstellen - und vorweg - ich hab keine Zugangsdaten für _INetSmtpMailCom (Mailserver, Passwort, etc.)

    Bis jetzt hab ich

    [autoit]

    _INetMail($sMailadr, $sBetreff, $sNachrText)

    [/autoit]

    verwendet.

    [autoit]

    $sMailadr = "mail@adresse.at" ; aus Projektdaten
    $sBetreff = "betrifft öäüß..." ; aus Projektdaten
    $sNachrText = "Nachrichtentext ... öäüß ..." ; je nach Art der Mail (Anfrage, Bestellung, Lieferung, ...

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

    $sAnhang = "c:\test.txt"

    [/autoit]

    ... werden zuvor im Programm zugewiesen.

    Nachteile:
    1) Keine Signatur und kein Anhang möglich (?)
    2) kann keine Umlaute und "ß" - müssen extra korrigiert werden

    =========================================================================================

    Hab dann weitere Möglichkeiten gefunden:

    Spoiler anzeigen
    [autoit]

    ;~ keine Ahnung, was die folgenden beiden Zeilen bewirken (sollen), es funktioniert eigentlich auch ohne sie ...?
    ;~ #AutoIt3Wrapper_AU3Check_Parameters= -d -w 1 -w 2 -w 3 -w 4 -w 5 -w 6
    ;~ #AutoIt3Wrapper_AU3Check_Stop_OnWarning=Y

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

    #include <OutlookEX.au3>

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

    ;~ ... Mail senden: ("entsel-0" und "entsel-1" sind in Outlook vorhandene Signaturen)

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

    _OL_MailSignatureSet("entsel-1", "") ; gewünschte Signatur setzen
    $oOutlook = _OL_Open()
    _OL_Wrapper_SendMail($oOutlook, $sMailadr, "", "", $sBetreff, $sNachrText, $sAnhang, "", "")
    _OL_Close($oOutlook)

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

    _OL_MailSignatureSet("entsel-0", "") ;auf Standardsignatur zurücksetzen

    [/autoit]

    1) Was muss ich ändern/ergänzen, damit die Mail nicht gleich gesendet, sondern nur erstellt und zur Kontrolle (und eventuellen weiteren Bearbeitung) geöffnet wird.
    Das Abschicken soll manuell über den Senden-Button erfolgen.

    2) Wie kann ich bewirken, dass noch eine (der bereits vorhanden Signaturen) angehängt/verwendet wird - die hier verwendete

    [autoit]

    _OL_MailSignatureSet ()

    [/autoit]

    funktioniert leider nicht.
    (ich glaube mich zu erinnern, dazu was gelesen zu haben, find's aber nicht mehr)

    =========================================================================================

    Dritte Möglichkeit:

    Spoiler anzeigen
    [autoit]

    #include <OutlookEX.au3>
    Global $oOutlook = _OL_Open()

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

    _OL_MailSignatureSet("entsel-1", "")

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

    $oItem = _OL_ItemCreate($oOutlook, $olMailItem, "", "", "Subject=Betreff öäüß")
    $oItem.BodyFormat = $olFormatHTML
    $oItem.GetInspector
    $sBody = $oItem.HTMLBody
    $oItem.HTMLBody = "Nachricht öäü?..." & $sBody
    $oItem.Display

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

    _OL_MailSignatureSet("entsel-0", "entsel-0")

    [/autoit]

    Funktioniert mit Signatur, aber wie könnte ich da noch die EMail-Adresse und den Anhang einbauen.


    Bitte um Eure Hilfe
    SG, entsel

  • Default-Wert mit Enter übernehmen

    • entsel
    • 10. Juli 2012 um 18:23

    Hallo BugFix

    Mit Deinem Code kann ich jetzt meine Vorstellungen verwirklichen, auch wenn mir die Funktion WM_COMMAND nach wie vor unverständlich ist - genauso, wie die Tatsache, dass sowas AutoIt nicht eingebaut hat. 
    (In AutoLisp/DCL-(DialogControlLanguage) reicht dafür ein "allow_accept=true")

    Vielleicht magst Du noch dazu beitragen, dass etwas mehr Licht in meine trübe Birne kommt.

    [autoit]

    Func WM_COMMAND($hWnd, $iMsg, $iwParam, $ilParam)

    [/autoit]


    Nach meinem Verständis müßte die Funktion mit den 4 Parametern aufgerufen werden (?), es gibt aber nur mehr die Zeile

    [autoit]

    GUIRegisterMsg($WM_COMMAND, 'WM_COMMAND')

    [/autoit]


    in der "WM_COMMAND" vorkommt - und keine Parameter!?

    Deshalb ist es mir ein Rätsel, woher die Variablen $hWnd, $iMsg, $iwParam, $ilParam ihre Werte haben, ebenso wie die daraus resultierenden Variablen -
    z.B.

    [autoit]

    $iCode = BitShift($iwParam, 16) ; Hi Word.

    [/autoit]


    Ebenso bekommt $GUI_RUNDEFMSG nie einen Wert zugewiesen? Soll aber wohl nur eine Meldung raus/rückgeben?

    Auf das setzen des Focus mit

    [autoit]

    ControlFocus($hGUI, '', $aInput[$iNext][0])

    [/autoit]


    könnte ich wohl verzichten, weil ich das ja abhängig von der jeweiligen Eingabe mit

    [autoit]

    GUICtrlSetState($input3, $GUI_FOCUS)

    [/autoit]


    erledige - richtig?

    Die Spalte 1 im Array $aInput beginnt mit 3 (und nicht mit 0 oder 1) - Zufall ?
    und es gäbe noch weitere Fragen, aber das soll ja hier nicht in einem Lehrgang enden ...

    Vielleicht kannst mir die eine oder andere Frage noch beantworten, ansonsten nehm' ich's als gegeben ...


    Ja, und natürlich ein großes DANKESCHÖN für Deinen Code.
    Danke auch an Christoph und Micha.

  • Default-Wert mit Enter übernehmen

    • entsel
    • 8. Juli 2012 um 10:23

    Vielleicht noch ein Beispiel zur Klarstellung wie ich mir das vorstelle (es geht nicht um AutoVervollständigung)
    Es soll ein Name erfasst werden - zB. Müller Gerd:
    - Ich starte das Programm, gebe die Projektnummer ins entsprechende Feld - ENTER.
    - Aus einer INI-Datei werden die bereits vorhandenen Daten gelesen und an entsprechender Stelle eingetragen.
    - Ich klicke nun ins betreffende Eingabefeld und trag den NachNamen ein - Enter.
    - Jetzt wird geprüft, obs den Namen schon gibt (INI-Datei) und wenn er nur einmal vorkommt, wird "Gerd" ins entsprechende Eingabefeld geschrieben und der Focus dorthin weitergereicht. *)
    - Ein ENTER würde dann den Vornamen bestätigen (bewirkt aber rein gar nix, warum das nicht eingebaut ist, ist mir unverständlich), weitere Vorgabemöglichkeiten prüfen, und den Focus weiterreichen.
    Aber weils ja auch der Müller Thomas sein könnte, müsste man die Vorgabe auch überschreiben können.
    - Nun könnte weiter dessen Dienststelle vorgeschlagen werden - ENTER - die Adresse - ENTER -, usw..
    - Mit OK werden die Daten in die INI geschrieben und das Programm beendet.


    *) Idealerweise würde ich mehrere (für diesen Nachnamen) vorhandene Vornamen in einem Combofeld zur Auswahl angebieten, wobei man einen weiteren über dessen Edit-Feld hinzufügen können sollte. Dort kann ich zwar was reinschreiben, aber ein ENTER bewirkt auch da rein gar nix. (aber das hab ich auch an anderer Stelle bereits angesprochen)

    BugFix
    Nachdem ich meinen Text verfasst habe (stelle ihn jetzt trotzdem rein) sehe ich grad Deine Ergänzung - werd mal schauen, ob mein bescheidener Horizont dafür ausreicht.

  • Default-Wert mit Enter übernehmen

    • entsel
    • 7. Juli 2012 um 19:02

    Servus

    Vielleicht habe ich an anderer Stelle ([ offen ] Vorgaben in Input-Felder mit Enter übernehmen) zu speziell gefragt (Sackgasse?), aber weil ich nicht glauben kann, dass es dafür keine einfache ;) Lösung geben soll, hier nochmal allgemeiner gefragt:

    In einem GUI sollen Daten eingegeben/erfasst werden. Allerdings nicht in einer bestimmten Reihenfolge, sondern wie sie grad anfallen. Und vielfach gibt es Default-Werte - sei es auf Grund von Wahrscheinlichkeiten (ist zu 98% immer "xyz") oder weil sie sich von anderen Werten ableiten lassen (und es gibt Ausnahmen).

    Das Eintragen der Default-Werte ginge ja mit GUICtrlSetData und mit GUICtrlSetState($xyz, $GUI_FOCUS) könnte man den Focus setzen.
    Aber gibt es auch eine (andere s.o. ?) Möglichkeit, die Vorgabewerte einfach durch drücken der ENTERtaste zu übernehmen?
    (auch wenn AutoIt keine ausgewachsene Programmiersprache ist - die Vorgabe, ein Programm zB. in "C:\Programme" zu installieren könnte man ja dann auch nicht einfach mit ENTER "durchwinken").
    Sollte so eine Möglichkeit tatsächlich fehlen?
    Außerdem würde ich (programmtechnisch) gern erkennen, in welches Feld Daten übernommen wurden um davon abhängig weitere Funktionen anzustoßen - zB. prüfen, ob sich durch die Eingabe weitere Vorgabewerte ergeben, weiterreichen des Focus, etc.?

    Übrigens - es gibt noch keinen Code.
    Da ich noch Anfänger bin, trage ich erst die Umsetzungsmöglichkeiten zusammen. Hätte ja nicht viel Sinn, wild drauf los zu coden um am Ende feststellen zu müssen, dass einige Bausteine fehlen (etwa der obige).
    Und (weil ich schon an anderer Stelle gefragt wurde) nein, nicht das Schreiben des Programms ist gefragt, das Aufzeigen von Lösungsmöglichkeiten für dieses spezielle Problem reicht ;)

    Schöne Grüße
    entsel

    Falls es interessiert, was es am Ende werden sollte - eine kleine Projektverwaltung mit Baustellenadressen, Kontaktpersonen, Lieferadressen, Überwachung von Terminen etc.

  • Vorgaben in Input-Felder mit Enter übernehmen

    • entsel
    • 5. Juni 2012 um 18:20

    Hallo BugFix

    Was den Wert betrifft - das hast Du ja kommentiert:
    $aInput[$i][1] = GUICtrlRead($aInput[$i][0]) ; == Wert auslesen und in das Array schreiben
    Aber -
    angenommen ich starte das Programm, gebe etwas in Input2 ein - wie könnte ich dann feststellen, dass es eben in Input2, und nicht in Input1 oder 4, 7 oder 12 eingegeben wurde.
    Oder anders gesagt, wie weiß ich (programmtechnisch), ob ich eine Adresse, den Namen des Auftraggebers oder den eines Sachbearbeiters eingegeben habe. Und abhängig davon sollten ja auch verschiedene Funktionen angestoßen werden ...

    Ich fürchte, Deine Mühe dürfte umsonst gewesen zu sein und eine Lösung scheint nicht möglich.
    Und falls doch, ist sie für mich wahrscheinlich schon zu kompliziert.

  • CuiCTRLCreateCombo soll bei manueller Eingabe auf Enter reagieren

    • entsel
    • 4. Juni 2012 um 19:36

    Das hätte ich auch schon gesucht - wozu?
    Um in der Combo-Box vorhandene Daten zur Auswahl anzubieten, mit der Möglichkeit, der Erweiterung.
    z.B. Nachnahme Müller - Gerd und Hansi sind vorhanden und werden angeboten, Thomas muss eingetragen werden.

    Ich hab dann eine Input-Box drüber gesetzt.

  • Vorgaben in Input-Felder mit Enter übernehmen

    • entsel
    • 4. Juni 2012 um 19:16

    Hallo BugFix

    Danke für Deine Mühe.
    Mit Deiner Lösung komme ich zwar mit Enter ins nächste Feld, aber was mir jetzt fehlt ist, was ich mit

    Case $input1
    GUICtrlSetData($input2, 2)

    dargestellt habe.
    Wenn ich also in Feld1 z.B. eine Baustellenadresse eingebe, könnte man davon eine zuständige Behörde ableiten (natürlich aus weiteren vorhandenen Daten) und in Feld 2 als Vorgabe eintragen, die dann meist mit Enter bestätigt werden könnte (für die Ausnahmen bleibt die Überschreibmöglichkeit). Kennt man weiters die Art des Auftrags, könnte man vielleicht den Sachbearbeiter ermitteln. Termine sind vielleicht abhängig von anderen Terminen, usw.
    Die Daten (hier als Wert 2) müssten natürlich in jedem "Case $Inputx" anders berechnet werden.

    Wenn ich aber kein "Case $input..." habe, wie kann ich da wissen, was ich grade eingegeben (welches Feld in grade befüllt) habe?
    Oder bin ich noch zu "neu" um es zu durchschauen?

  • Vorgaben in Input-Felder mit Enter übernehmen

    • entsel
    • 3. Juni 2012 um 17:01

    Hallo BugFix

    Die ersten Zeilen glaube ich in etwa zu durchschauen:
    ich vermute, es werden 2 GUI's erstellt, eine Art "Identität" abgefragt, und das 2. angezeigt.

    Mit

    [autoit]

    GUIRegisterMsg($WM_COMMAND, "WM_COMMAND")

    [/autoit]


    und

    [autoit]

    Case -3

    [/autoit]


    kann ich leider gar nix anfangen ...

    Die Funktion WM_COMMAND sollte (nach meinem Verständnis) irgendwo (mit 4 Argumenten ?) aufgerufen werden ?
    Passiert das damit ???:

    [autoit]

    GUIRegisterMsg($WM_COMMAND, "WM_COMMAND")

    [/autoit]

    ?
    Was ist dann mit der Anzahl der Argumente ?
    $hWnd, $iMsg, $iwParam, $ilParam: wird denen nie ein Wert zugewiesen? (wie etwa $hWnd = ... ?)


    Nach

    [autoit]

    Case $hWndFrom = $hIn And $iCode = $EN_CHANGE

    [/autoit]


    bzw.

    [autoit]

    Case $iCode = 0x0

    [/autoit]


    wird dann jeweils das andere GUI angezeigt/verborgen bzw. mit Daten beschickt und der Focus gesetzt,
    wenn ich's richtig verstanden hab?
    Aber was die beiden Zeilen selber bedeuten kann ich leider nicht entschlüsseln, das ist ganz offensichtlich noch zu hoch für mich.

    Würd' mich freuen, wenn Du mir das anhand meines Beispiels noch genauer erklären könntest?:

    Spoiler anzeigen
    [autoit]

    #include <GUIConstantsEx.au3>

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

    $hGUI = GUICreate('TEST')
    $input1 = GUICtrlCreateInput('1', 40, 30, 60, 20)
    $input2 = GUICtrlCreateInput('', 40, 60, 60, 20)
    $input3 = GUICtrlCreateInput('', 40, 90, 60, 20)
    $input4 = GUICtrlCreateInput('', 40, 120, 60, 20)
    GUISetState(@SW_SHOW, $hGUI)

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $input1
    $wert1 = GUICtrlRead($input1)
    GUICtrlSetData($input2, 2)
    GUICtrlSetState($input2, $GUI_FOCUS)
    Case $input2
    $wert2 = GUICtrlRead($input2)
    GUICtrlSetData($input3, 3)
    GUICtrlSetState($input3, $GUI_FOCUS)
    Case $input3
    $wert3 = GUICtrlRead($input3)
    GUICtrlSetData($input4, 4)
    GUICtrlSetState($input4, $GUI_FOCUS)
    Case $input4
    $wert4 = GUICtrlRead($input4)
    EndSwitch
    WEnd

    [/autoit]

    Wenn ich einen Wert eingebe, läufts ja weiter, ich will aber oft den Vorschlag nur mit Enter übernehmen.

  • Vorgaben in Input-Felder mit Enter übernehmen

    • entsel
    • 29. Mai 2012 um 20:06

    Danke mal für die Antwort.

    Auf den ersten Blick verstehe ich davon allerdings nur viel "Bahnhof". ?(
    Ich werde mich aber noch ausgiebiger damit beschäftigen - vielleicht geht mir ja dann das eine oder andere Licht auf - melde mich dann später wieder.

    Danke

  • Vorgaben in Input-Felder mit Enter übernehmen

    • entsel
    • 28. Mai 2012 um 20:02

    Hallo

    In einer GUI gibts mehrere Eingabefelder:

    [autoit]

    $input1 = GUICtrlCreateInput(....)
    $input2 = GUICtrlCreateInput(....)

    [/autoit]

    Jetzt wird durch Eingaben und Berechnungen des öfteren der Wert des nächsten Eingabefeldes ermittelt und als Vorschlag angeboten - das funktioniert auch. Nun soll der Vorschlag (meistens) durch drücken der Enter-Taste übernommen werden. Das löst aber nicht die Fortsetzung des Programms (im Beispiel nach "Case $input2") aus - also [weitere Berechnungen] bzw. die Weitergabe des Focus an Input3.


    [autoit]

    .
    Switch $nMsg
    Case $input1
    $wert1 = GUICtrlRead($input1)
    [Berechnungen]
    .
    .
    $wert2 = (wurde berechnet)
    GUICtrlSetData($input2, $wert2)
    GUICtrlSetState($input2, $GUI_FOCUS)
    Case $input2
    $wert2 = GUICtrlRead($input2)
    [weitere Berechnungen]
    .
    .
    GUICtrlSetData($input3, $wert3)
    GUICtrlSetState($input3, $GUI_FOCUS)

    [/autoit]

    Könnt Ihr mir auf die Sprünge helfen?

  • INI-File, Combo-Box, Liste zur Auswahl und Ergänzung

    • entsel
    • 14. April 2012 um 19:27

    Leider ist mir meine Wunschlösung nicht gelungen.
    Ich hab jetzt mal den betreffenden Code isoliert (3 Varianten):

    Lösung 1 mit Input-Box - funktioniert genauso, wie ich's mir vorstelle, aber leider nicht in allen Fällen:

    Fall 1 - Name nur einmal in INI
    (z.B. "Messi" eingeben)
    Fall 2 - Name noch nicht in INI
    (z.B. "Müller" und "Gerd", danach noch das "ü" in der Mailadresse zu "ue" editieren)
    Fall 3 - Name einmal in INI, aber mit neuem Vornamen
    (z.B. "Messi" und Vornamen überschreiben

    Spoiler anzeigen
    [autoit]

    #cs ----------------------------------------------------------------------------

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

    AutoIt Version: 3.3.8.0
    Author: entsel

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

    Script Function:
    Template AutoIt script.

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

    #ce ----------------------------------------------------------------------------

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

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

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

    Global $Inifile, $Name, $Vorname, $Mailadresse
    $Inifile = @ScriptDir & "\MAIL.INI"

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

    ; Erzeugung einer Test-INI - von AutoBert entlehnt:

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

    If Not FileExists($Inifile) Then
    $sData = "Sepp=sepp.maier@mail.com" & @LF
    $sData &= "Hermann=hermann.maier@mail.com" & @LF
    $sData &= "Isidor=isidor.maier@mail.com" & @LF
    IniWriteSection($Inifile, "Maier", $sData)
    $sData = "Lionel=lionel.messi@mail.com" & @LF
    IniWriteSection($Inifile, "Messi", $sData)
    $sData = "Thomas=thomas.huber@mail.com" & @LF
    $sData &= "Alexander=alexander.huber@mail.com" & @LF
    IniWriteSection($Inifile, "Huber", $sData)
    EndIf

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

    ; GUI:

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

    #Region ### START Koda GUI section ###
    $Form1 = GUICreate("MailAdresse", 485, 153, 192, 114)
    $InpName = GUICtrlCreateInput("Name", 25, 30, 201, 21)
    $LabName = GUICtrlCreateLabel("Name", 25, 15, 32, 15)
    $InpVorname = GUICtrlCreateInput("Vorname", 265, 30, 201, 21)
    $LabVorname = GUICtrlCreateLabel("Vorname", 265, 15, 46, 15)
    $InpMail = GUICtrlCreateInput("Mailadresse", 25, 80, 441, 21)
    $LabMail = GUICtrlCreateLabel("Mailadresse", 25, 65, 23, 15)
    $ButOK = GUICtrlCreateButton("OK", 350, 120, 116, 21)
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

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

    ; MAIN:

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $InpName ;----------------------------------------------Eingabe Name
    $Name = GUICtrlRead($InpName)
    Local $arrayNamen = IniReadSection($Inifile, $Name)
    If @error Then
    GUICtrlSetState($InpVorname, $GUI_FOCUS)
    Else
    If UBound($arrayNamen) = 2 Then
    $Vorname = $arrayNamen[1][0]
    $Mailadresse = $arrayNamen[1][1]
    GUICtrlSetData($InpVorname, $Vorname)
    GUICtrlSetData($InpMail, $Mailadresse)
    GUICtrlSetState($InpVorname, $GUI_FOCUS)
    Else
    GUICtrlSetState($InpVorname, $GUI_FOCUS)
    EndIf
    EndIf

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

    Case $InpVorname ;--------------------------------------------Eingabe Vorname
    $Vorname = GUICtrlRead($InpVorname)
    $Mailadresse = IniRead($Inifile, $Name, $Vorname, "")
    If $Mailadresse = "" Then $Mailadresse = $Vorname & "." & $Name & "@mail.com"
    GUICtrlSetData($InpMail, $Mailadresse)
    IniWrite($Inifile, $Name, $Vorname, $Mailadresse)
    GUICtrlSetState($ButOK, $GUI_FOCUS)

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

    Case $InpMail ;---------------------------------------------------Eingabe Mail
    $Mailadresse = GUICtrlRead($InpMail)
    IniWrite($Inifile, $Name, $Vorname, $Mailadresse)

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

    Case $ButOK ;-----------------------------------------------------------------OK
    MsgBox(0, "Die Mailadresse ist:", $Mailadresse)
    Exit

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

    EndSwitch
    WEnd

    [/autoit]

    Was fehlt ist Fall 4 - es gibt bereits mehrere (Zu-)Namen in der INI, die Vornamen sollen zur Auswahl angeboten werden und einer wird ausgewählt. (z.B. die Namen Maier oder Huber)
    und Fall 5 - es gibt bereits mehrere (Zu-)Namen in der INI, aber es soll ein weiterer Vorname hinzugefügt werden.

    Lösung 2 über _ArrayDisplay -> CopySelected (Notlösung):

    Würde funktionieren, aber:
    - man muss eine Auswahl treffen (auch für Fall 5),
    - wenn man das Fenster ohne Auswahl schließt, wird das Programm beendet (könnte man noch abfangen ...),
    - 2 Klicks mehr (kopieren und Fenster schließen),
    - und elegant ist die Lösung ja auch nicht.

    Spoiler anzeigen
    [autoit]

    #cs ----------------------------------------------------------------------------

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

    AutoIt Version: 3.3.8.0
    Author: entsel

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

    Script Function:
    Template AutoIt script.

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

    #ce ----------------------------------------------------------------------------

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

    #include <ButtonConstants.au3>
    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>
    #include <array.au3>

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

    Global $Inifile, $Name, $Vorname, $Mailadresse
    $Inifile = @ScriptDir & "\MAIL.INI"

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

    ; Erzeugung der MAIL.INI - von AutoBert entlehnt:

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

    If Not FileExists($Inifile) Then
    $sData = "Sepp=sepp.maier@mail.com" & @LF
    $sData &= "Hermann=hermann.maier@mail.com" & @LF
    $sData &= "Isidor=isidor.maier@mail.com" & @LF
    IniWriteSection($Inifile, "Maier", $sData)
    $sData = "Lionel=lionel.messi@mail.com" & @LF
    IniWriteSection($Inifile, "Messi", $sData)
    $sData = "Thomas=thomas.huber@mail.com" & @LF
    $sData &= "Alexander=alexander.huber@mail.com" & @LF
    IniWriteSection($Inifile, "Huber", $sData)
    EndIf

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

    ; GUI:

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

    #Region ### START Koda GUI section ###
    $Form1 = GUICreate("MailAdresse", 485, 153, 192, 114)
    $InpName = GUICtrlCreateInput("Name", 25, 30, 201, 21)
    $LabName = GUICtrlCreateLabel("Name", 25, 15, 32, 15)
    $InpVorname = GUICtrlCreateInput("Vorname", 265, 30, 201, 21)
    $LabVorname = GUICtrlCreateLabel("Vorname", 265, 15, 46, 15)
    $InpMail = GUICtrlCreateInput("Mailadresse", 25, 80, 441, 21)
    $LabMail = GUICtrlCreateLabel("Mailadresse", 25, 65, 70, 15)
    $ButOK = GUICtrlCreateButton("OK", 350, 120, 116, 21)
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

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

    ; MAIN:

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $InpName ;-------------------------------------Eingabe Name
    $Name = GUICtrlRead($InpName)
    Local $arrayNamen = IniReadSection($Inifile, $Name)
    If @error Then
    GUICtrlSetState($InpVorname, $GUI_FOCUS)
    Else
    If UBound($arrayNamen) = 2 Then
    $Vorname = $arrayNamen[1][0]
    $Mailadresse = $arrayNamen[1][1]
    GUICtrlSetData($InpVorname, $Vorname)
    GUICtrlSetData($InpMail, $Mailadresse)
    GUICtrlSetState($InpVorname, $GUI_FOCUS)
    Else
    _ArrayDisplay($arrayNamen)
    $Clip = ClipGet()
    $arrayVornamen = StringSplit($Clip, "|")
    $Vorname = $arrayVornamen[2]
    GUICtrlSetData($InpVorname, $Vorname)
    GUICtrlSetState($InpVorname, $GUI_FOCUS)
    $Mailadresse = $arrayVornamen[3]
    GUICtrlSetData($InpMail, $Mailadresse)

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

    EndIf
    EndIf

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

    Case $InpVorname ;--------------------------------------------Eingabe Vorname
    $Vorname = GUICtrlRead($InpVorname)
    $Mailadresse = IniRead($Inifile, $Name, $Vorname, "")
    If $Mailadresse = "" Then $Mailadresse = $Vorname & "." & $Name & "@mail.com"
    GUICtrlSetData($InpMail, $Mailadresse)
    IniWrite($Inifile, $Name, $Vorname, $Mailadresse)
    GUICtrlSetState($ButOK, $GUI_FOCUS)

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

    Case $InpMail ;---------------------------------------------------Eingabe Mail
    $Mailadresse = GUICtrlRead($InpMail)
    IniWrite($Inifile, $Name, $Vorname, $Mailadresse)

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

    Case $ButOK ;-----------------------------------------------------------------OK
    MsgBox(0, "Die Mailadresse ist:", $Mailadresse)
    Exit

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

    EndSwitch
    WEnd

    [/autoit]

    Lösung 3 mit Combo-Box (würde ich favorisieren):
    Nur für Fall 1 und 4 geeignet.
    Wäre ideal - allerdings kann ich neue Vornamen zwar eintragen, krieg sie aber nicht übernommen - nicht mit ENTER (und auch nicht mit irgendwelchen Mausklicks). Wenn man dort schreiben kann, sollte es wohl auch eine Möglichkeit geben, die Eingabe zu übernehmen?! Meine Frage wäre, wie?
    Ein weiteres Problem hab ich mit dem Mauszeiger - ist er bei der Namenseingabe auf dem GUI, so bleibt er sichtbar,
    anderfalls versteckt er sich "unterhalb" des GUI. ?(

    Spoiler anzeigen
    [autoit]

    #cs ----------------------------------------------------------------------------

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

    AutoIt Version: 3.3.8.0
    Author: entsel

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

    Script Function:
    Template AutoIt script.

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

    #ce ----------------------------------------------------------------------------

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

    #include <ButtonConstants.au3>
    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>
    #include <array.au3>
    #include <GuiComboBox.au3>

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

    Global $Inifile, $Name, $Vorname, $Mailadresse
    $Inifile = @ScriptDir & "\MAIL.INI"

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

    ; Erzeugung der MAIL.INI - von AutoBert entlehnt:

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

    If Not FileExists($Inifile) Then
    $sData = "Sepp=sepp.maier@mail.com" & @LF
    $sData &= "Hermann=hermann.maier@mail.com" & @LF
    $sData &= "Isidor=isidor.maier@mail.com" & @LF
    IniWriteSection($Inifile, "Maier", $sData)
    $sData = "Lionel=lionel.messi@mail.com" & @LF
    IniWriteSection($Inifile, "Messi", $sData)
    $sData = "Thomas=thomas.huber@mail.com" & @LF
    $sData &= "Alexander=alexander.huber@mail.com" & @LF
    IniWriteSection($Inifile, "Huber", $sData)
    EndIf

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

    ; GUI:

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

    #Region ### START Koda GUI section ###
    $Form1 = GUICreate("MailAdresse", 485, 153, 192, 114)
    $InpName = GUICtrlCreateInput("Name", 25, 30, 201, 21)
    $LabName = GUICtrlCreateLabel("Name", 25, 15, 32, 15)
    $InpVorname = GUICtrlCreateCombo("Vorname", 265, 30, 201, 21)
    $LabVorname = GUICtrlCreateLabel("Vorname", 265, 15, 46, 15)
    $InpMail = GUICtrlCreateInput("Mailadresse", 25, 80, 441, 21)
    $LabMail = GUICtrlCreateLabel("Mailadresse", 25, 65, 23, 15)
    $ButOK = GUICtrlCreateButton("OK", 350, 120, 116, 21)
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

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

    ; MAIN:

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $InpName ;-------------------------------------Eingabe Name
    $Name = GUICtrlRead($InpName)
    Local $arrayNamen = IniReadSection($Inifile, $Name)
    If @error Then
    GUICtrlSetState($InpVorname, $GUI_FOCUS)
    Else
    If UBound($arrayNamen) = 2 Then
    $Vorname = $arrayNamen[1][0]
    $Mailadresse = $arrayNamen[1][1]
    _GUICtrlComboBox_AddString($InpVorname, $Vorname)
    _GUICtrlComboBox_SetCurSel($InpVorname, 1)
    GUICtrlSetData($InpMail, $Mailadresse)
    GUICtrlSetState($InpVorname, $GUI_FOCUS)
    Else
    _GUICtrlComboBox_ResetContent($InpVorname)
    For $i = 1 To UBound($arrayNamen) - 1
    _GUICtrlComboBox_AddString($InpVorname, $arrayNamen[$i][0])
    Next
    _GUICtrlComboBox_ShowDropDown($InpVorname, True)
    GUICtrlSetState($InpVorname, $GUI_FOCUS)
    GUICtrlSetState($Form1, $GUI_FOCUS)
    EndIf
    EndIf

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

    Case $InpVorname ;--------------------------------------------Eingabe Vorname
    $Vorname = GUICtrlRead($InpVorname)
    $Mailadresse = IniRead($Inifile, $Name, $Vorname, "")
    If $Mailadresse = "" Then $Mailadresse = $Vorname & "." & $Name & "@mail.com"
    GUICtrlSetData($InpMail, $Mailadresse)
    IniWrite($Inifile, $Name, $Vorname, $Mailadresse)
    GUICtrlSetState($InpMail, $GUI_FOCUS)

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

    Case $InpMail ;---------------------------------------------------Eingabe Mail
    $Mailadresse = GUICtrlRead($InpMail)
    IniWrite($Inifile, $Name, $Vorname, $Mailadresse)

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

    Case $ButOK ;-----------------------------------------------------------------OK
    MsgBox(0, "Die Mailadresse ist:", $Mailadresse)
    Exit

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

    EndSwitch
    WEnd

    [/autoit]

    Eine Lösung 4 ist mir auch noch grad eingefallen - eine Kombination aus Input- und Combo-Box (vielleicht, falls es mit der 3er nix wird)

  • INI-File, Combo-Box, Liste zur Auswahl und Ergänzung

    • entsel
    • 11. April 2012 um 20:05

    Hallo Bert

    Ich sag schon mal danke!
    Mal sehen, ob ich mit "_GUICtrlComboBox_InsertString" und "_GUICtrlComboBox_SetCurSel" meine Vorstellungen verwirklichen kann. Ich will ja ohne Hinzufügen-Button auskommen.
    (komm aber wahrscheinlich erst am WE dazu)

  • INI-File, Combo-Box, Liste zur Auswahl und Ergänzung

    • entsel
    • 10. April 2012 um 19:05

    .Na klar ;)

    Nein im Ernst - die ersten drei Fragen sind ja fast mit "ja" oder "nein" zu beantworten.
    Und auf "Wie würdet Ihr das lösen?" hätte ich mir Antworten erhofft, ähnlich wie ich oben meine Versuche beschrieben hab:

    Zitat

    ...holt sich mit "IniReadSection" "Name" die dazugehörigen Daten...
    ...werden mit GUICtrlSetData die andern beiden Felder ausgefüllt...

    Und was meinen Code betrifft - den erspar ich Euch lieber - sind seitenweise Versuche, um irgendwelche (Teil-)Lösungen zu probieren ...

    SG, entsel

  • INI-File, Combo-Box, Liste zur Auswahl und Ergänzung

    • entsel
    • 9. April 2012 um 18:08

    Hallo

    Sorry wegen der Überschrift, mir ist nix treffenderes eingefallen

    Bin wieder mal an meine Grenzen gestossen:
    In einer INI-Datei stehen Namen,Vornamen und Mail-Adressen - z.B. so:

    Code
    [NameA]
    vorname1=madresse1a
    [NameB]
    vorname1=madresse1b
    vorname2=madresse2b
    vorname3=madresse3b
    [NameC]
    vorname1=madresse1c
    vorname2=madresse2c

    In einer GUI gibts 3 Eingabefelder - Name, Vorname, Mail-Adresse

    Das Programm fragt jetzt den Namen ab -
    holt sich mit "IniReadSection" "Name" die dazugehörigen Daten -
    wenn nur ein Vorname vorhanden ist die Sache eindeutig
    und es werden mit GUICtrlSetData die andern beiden Felder ausgefüllt. (hab ich grade noch geschafft ;) )

    Gibt's aber zu einem Namen mehrere Vornamen, würde ich die Vorhandenen gerne zur Auswahl angeboten bekommen (Combo-Box?).
    Es müsste aber auch die Möglichkeit geben (falls Vorname noch nicht vorhanden) auch einen Weiteren einzugeben.

    An Letzterem bin ich allerdings gescheitert - ich kann zwar in die Combo-Box schreiben, aber die Eingabe nicht abschließen, weder mit ENTER noch durch klicken ins E-Mail-Feld.
    Und wie ich die Vornamen aus den Array in die Combo-Box kriege, hab ich (zum Glück) noch gar nicht probiert.

    Anscheinend kann man in einer Combo-Box keine Einträge machen? Gibts da was anderes?
    Lässt sich meine Vorstellung überhaupt umsetzen?
    Wie würdet Ihr das lösen?

    Bitte um Hilfe
    SG, entsel

  • Die $Variablen auflisten, kopieren (zwecks Beschreibung)

    • entsel
    • 3. April 2012 um 20:08

    Hallo BugFix

    Hätte ich auch selber draufkommen können, dass die Datei im User-Bereich liegt.

    Es gibt schon Einträge in der SciTEUser.properties, aber nichts derartiges wie "command.37. ..." - hab deshalb die "37" gelassen und die Einträge unten angehängt
    (trotz der Zeilen
    # END => DO NOT CHANGE ANYTHING BEFORE THIS LINE #-#-#-#-#-#
    # START: DO NOT CHANGE ANYTHING AFTER THIS LINE #-#-#-#-#)
    Im Menü Extras erscheint dann auch "Variablen Tipp", allerdings ohne Hotkey.
    ("command.name.37.*.au3=Tipp für Variable" auch eingefügt) - hab übrigens W7pro64.
    Ist aber nicht so schlimm, da Du ja jetzt auch noch die Möglichkeit übers Kontextmenü anbietest.

    Danke auch für dieses Programm und die Hilfe.
    SG, entsel

  • Die $Variablen auflisten, kopieren (zwecks Beschreibung)

    • entsel
    • 1. April 2012 um 19:23

    Hallo BugFix

    Danke für die GetUnusedVars.au3 - funktioniert super.

    Aber zum 2. Tipp - VarGetTipp - bräuchte ich noch etwas Hilfe:
    Die Datei SciTEUser.properties gibts bei mir (noch?) nicht - ich vermute, die muss ich erst anlegen - im Ordner ..\SciTE oder im ..\SciTE\Properties? (bei mir gibts in beiden Ordnern *.properties-Files)
    "command.37. ..." bzw. "# 37 Variablen Tipp" (bei BigRox):
    Heißt das, dass es (bei Euch) bereits 36 andere "Einträge" gibt und bei mir die 37 durch 1 zu ersetzen ist?

    SG, entsel

  • Die $Variablen auflisten, kopieren (zwecks Beschreibung)

    • entsel
    • 1. April 2012 um 12:46

    Servus

    Ich hab jetzt mein erstes Projekt soweit, dass es einigermaßen funktioniert. Aber vieles ist doch durch "try and error" entstanden und ich hab ziemlich chaotisch (was die Namen betrifft) und spontan Variablen verwendet (könnte also sein, das derselbe Inhalt mehrfach zugewiesen ist). Beim Überarbeiten ist also Aufräumen angesagt. Zu diesem Zweck möchte ich mir eine Liste mit Beschreibung der Inhalte erstellen.

    Jetzt ist es in SciTE ja so, dass, wenn ich ein "$" eingebe, die vorhandenen Variablen zur Auswahl angeboten werden.
    Mag sein, dass man sowas nur als Anfänger braucht, aber - gäbe es da auch eine Möglichkeit, die zu kopieren, zu exportieren (ASCII), oder ähnliches?

    SG, entsel

  • #include <A3LDateTimePick.au3

    • entsel
    • 1. April 2012 um 12:07

    Danke - aber wie schon erwähnt geht's mir eher um's Grundsätzliche, weniger um die fragliche Funktion. Die hat nur die Frage ausgelöst.

    SG, entsel

  • #include <A3LDateTimePick.au3

    • entsel
    • 31. März 2012 um 18:13

    Danke - sowas ähnliches hatte ich vermutet. Kommt sowas öfter vor?
    Wenn ja, wär eine Möglichkeit, mit der man Funktionen und ihre dazugehörigen *.au3-Files finden kann, interessant.

    Und kann man "fehlende" *.au3-Files irgendwo downloaden - weil wie erwähnt - in meiner Version 3.3.8.0 hab ich nix gefunden (Textsuche in allen *.au3 im Ordner INCLUDE)

    SG, entsel

  • #include <A3LDateTimePick.au3

    • entsel
    • 31. März 2012 um 16:28

    Servus

    Ich wollte das hier:
    [ gelöst ] Befehl 'GuiCtrlCreateDate' mit '$DTS_SHOWNONE'
    ausprobieren, funkt aber nicht - vermutlich weil's bei mir die Datei A3LDateTimePick.au3 nicht (mehr?) gibt.
    Lasse ich <#include <A3LDateTimePick.au3> weg, dann gibt's ERROR: _DTP_GetSystemTimeEx(): undefined function.
    "_DTP_GetSystemTimeEx" findet sich auch in keiner *.au3 in meinem Include-Ordner.

    Könnt Ihr mir dazu näheres sagen? Interessiert mich eher grundsätzlich (wie ist das mit den Include-Files, Weiterentwicklung, Veränderungen) weniger wegen der fehlenden Funktion.

    SG, entsel

Spenden

Jeder Euro hilft uns, Euch zu helfen.

Download

AutoIt Tutorial
AutoIt Buch
Onlinehilfe
AutoIt Entwickler
  1. Datenschutzerklärung
  2. Impressum
  3. Shoutbox-Archiv
Community-Software: WoltLab Suite™