Datei-Anzeige

  • AutoIt ist viel komplizierter als VBA. In VBA habe ich z.B. auch "IIf", was ganz hilfreich ist, ein Äquivalent dazu scheint es in AutoIt nicht zu geben. Mehrere ENUM scheinen in AutoIt auch nicht möglich (damit könnte ich den Code verkürzen).

  • Ist das Gegenstück für IIf nicht einfach eine logische Verknüpfung?

    Code
    ;Some VBA from internet: IIf([MEPNumber]>200,[BasicSalary],[BasicSalary]/30*21)
    ;Autoit (kept naming just for clarification
    If ([MEPNumber] > 200) and ([BasicSalary] or [BasicSalary]/30*21) then
  • Und was meinst Du mit mehrere ENUM? Beispielscript bitte!

    Z.B. diese Zeile: Global Enum $e_idNew = 1000, $e_idOpen, $e_idSave, $e_idHelp,

    Um Code zu kürzen, wären weitere Global Enum hilfreich. Eine mit Text (für die Button-Beschriftung), und eine mit Zahlen (für die Icon-Nummer). In VBA nutze man dafür einfach mehrer ENUM- oder Typ-Anweisungen.

  • Du meinst sowas?

    AutoIt
    Opt('MustDeclareVars', 1)
    #include <Array.au3>
    Global Enum $IllegalerEintrag1 = -1, $SicherheitsLevel1_1, $SicherheitsLevel1_2
    Global Const $IllegalerEintrag2 = 2, $SicherheitsLevel2_1 = 9, $SicherheitsLevel2_2 = 3 ; hier macht Enum keinen Sinn, da keine Logik vorhanden
    Global Const $SicherheitsLevel_1[3] = [$IllegalerEintrag1, $SicherheitsLevel1_1, $SicherheitsLevel1_2]
    Global Const $SicherheitsLevel_2[3] = [$IllegalerEintrag2, $SicherheitsLevel2_1, $SicherheitsLevel2_2]
    
    _Arraydisplay($SicherheitsLevel_1) ; -> -1, 0, 1
    _Arraydisplay($SicherheitsLevel_2) ; ->  2, 9, 3

    2 Mal editiert, zuletzt von Moombas (1. September 2023 um 13:05)

  • Ist das Gegenstück für IIf nicht einfach eine logische Verknüpfung?

    Nicht, so wie ich Iif verstehe, denn als Ergebnis bekommt man ja nicht TRUE/FALSE, sondern den Wert von A bzw. B.
    Also: $C = Iif($x > 50, $A, $B) ; wenn $x größer als 50, dann wird $A zurückgegeben, ansonsten $B.

    Zumindest war das in alten AutoIt-Versionen mit "_Iif()" so. VBA kenne ich nicht.

    In den neuen AutoIt-Versionen gibt es ja den ternären Operator: $C = $x > 50 ? $A : $B

  • Ah ok, dann habe ich es falsch verstanden ;)

    Dann ließe sich das doch (abgesehen von den ternären operatoren) mit einer eigenen Funktion basteln.

    Fertige gefunden (https://www.autoitscript.com/forum/topic/15…changes-_iif/):

  • Das Ergebnis ist aber das selbe.

    Dann würde ich aber keine Codezeilen sparen. ;)

    Das Ergebnis muss doch das Selbe sein, ich denke du suchst den Ersatz von IIf in Autoit?

    Natürlich sparst du Codezeilen, allerdings nur bei mehrerer Verwendung von _Iif() bzw. Verschachtelung.

    If...then...else = 5 Zeilen

    _Iif = 1 Zeile + Einmalig 7 Zeilen

    Bedeutet: Schon ab der 2. Verwendung sparst du Zeilen, bei nur einmaliger Verwendung brauchst du jedoch mehr.

    Wobei ich die Funktion sogar noch so wegkürzen würde und die Gleiche Funktionalität hätte:

    AutoIt
    Func _Iif($fTest, $vTrueVal, $vFalseVal)
        If $fTest Then Return $vTrueVal
        Return $vFalseVal
    EndFunc   ;==>_Iif

    Dann wäre es:

    If...then...else = 5 Zeilen

    _Iif = 1 Zeile + Einmalig 4 Zeilen

    Bedeutet: Schon ab der 1. Verwendung nutzt du die Gleiche Anzahl an Zeilen und jede weitere spart dir Zeilen.

    Du kannst diese Funktion auch in eine au3 Auslagern, die du am Anfang einbindest, dann brauchst du nur 1 Zeile zum Einbinden + max. 1 Zeile je Nutzung (egal welche Variante du wählst).

  • Ich hab ja nur gesagt es gibt beide Möglichkeiten....

    Und ich habe irgendwas im Hiunterkopf, das der ternäre unter bestimmten Bedingungen nicht funktioniert aber ggf. habe ch das aber noch falsch im Gedächtnis (oder bereits behoben).

  • Und ich habe irgendwas im Hiunterkopf, das der ternäre unter bestimmten Bedingungen nicht funktioniert

    Welche Bedingungen wären das? Gibt es da Infos? Für meinen Fall trifft das hoffentlich nicht zu.

    Auf jeden Fall konnte ich den Code jetzt schon ein wenig kürzen.

    Vorher:

    Code
    $ToolButtonText[0] = _GUICtrlToolbar_AddString($g_hToolbar, ($sprachID = "de") ? "Datei öffnen" : "Open File") ; Text für Öffnen-Schaltfläche
    $ToolButtonText[1] = _GUICtrlToolbar_AddString($g_hToolbar, ($sprachID = "de") ? "Ordner zuklappen" : "Order up") ; Text für Zuklappen-Schaltfläche
    $ToolButtonText[2] = _GUICtrlToolbar_AddString($g_hToolbar, ($sprachID = "de") ? "Ordner aufklappen" : "Order down") ; Text für Aufklappen-Schaltfläche
    $ToolButtonText[3] = _GUICtrlToolbar_AddString($g_hToolbar, ($sprachID = "de") ? "Zurück" : "Back") ; Text für Zurück-Schaltfläche
    $ToolButtonText[4] = _GUICtrlToolbar_AddString($g_hToolbar, ($sprachID = "de") ? "Vorwärts" : "Forward") ; Text für Vorwärts-Schaltfläche
    $ToolButtonText[5] = _GUICtrlToolbar_AddString($g_hToolbar, ($sprachID = "de") ? "Laden abbrechen" : "Stop") ; ; Text für Abbrechen-Schaltfläche
    $ToolButtonText[6] = _GUICtrlToolbar_AddString($g_hToolbar, ($sprachID = "de") ? "Beenden" : "Exit") ; Text für Beenden-Schaltfläche
    $ToolButtonText[7] = _GUICtrlToolbar_AddString($g_hToolbar, ($sprachID = "de") ? "Neu laden" : "Refresh") ; Text für Refresh-Schaltfläche
    $ToolButtonText[8] = _GUICtrlToolbar_AddString($g_hToolbar, ($sprachID = "de") ? "Hilfe" : "Help") ; Text für Hilfe-Schaltfläche
    $ToolButtonText[9] = _GUICtrlToolbar_AddString($g_hToolbar, ($sprachID = "de") ? "Einstellungen" : "Settings") ; Text für Einstellungen

    Nachher:

    Code
    For $iButtonText = 0 To 9
        $ToolButtonText[$iButtonText] = _GUICtrlToolbar_AddString($g_hToolbar, ($sprachID = "de") ? $btn_de[$iButtonText] : $btn_en[$iButtonText])
    Next
  • Ich meine es ging darum, das man manchmal den ternären Operator in () setzen muss aber wann/warum und ob das mittlerweile gefixt ist, weiß ich nicht mehr.

    Ein Beispiel was ich auf die schnele gefunden habe aber schon sehr alt ist: https://www.autoitscript.com/forum/topic/16…g-in-some-ways/

    War einer der Gründe warum ich bei If..Then..else geblieben bin (wobei bei mir oft auch mehr als die pure Rückgabe eines Wertes gemacht werden muss).

    Wie gesagt, kann mich auch falsch erinnern und so lange es bei dir klappt ist doch super.

  • und so lange es bei dir klappt ist doch super

    Das wird sich zeigen. ;)

    Ich habe noch mehr Code einkürzen können (den zum Erstellen der Toolbar-Button)

    Vorher:

    Nachher:

    Code
         For $iButtonCount = 0 To 9
             If $iButtonCount = 1 Or $iButtonCount = 3 Or $iButtonCount = 7 Then _GUICtrlToolbar_AddButtonSep($g_hToolbar)
             _GUICtrlToolbar_AddButton($g_hToolbar, $iButtonCount + 1000, $iButtonCount, $ToolButtonText[$iButtonCount])
         Next

    Aber da sieht man man wieder, das Quellcode aus dem Internet nicht immer den eigenen Wünschen entsprechen muss (Ob das Einkürzen sinnvoll ist oder nicht, steht auf einem anderen Blatt). ;)