_MeineFunktion($Parameter 1,$Parameter 2 [,$Parameter n])

  • Hallo,
    Ist es möglich eine eigene Funktion mit einer "unendlichen" Zahl an Parametern auszustatten?
    Hintergrund des ganzen: Ich habe eine Funktion, welche ein Fenster einblendet.

    [autoit]

    Func _Fade($hGUI, $iFadeIn = 1, $iMinTrans = 0, $iMaxTrans = 255, $iFadeSpeed = 5, $bMov = True)

    [/autoit]

    Wie ihr seht ist der erste Parameter ein GUI Handle.
    Ich würde die Funktion aber gerne wie folgt aufbauen:

    [autoit]

    Func _Fade($hGUI, $iFadeIn = 1, $iMinTrans = 0, $iMaxTrans = 255, $iFadeSpeed = 5, $bMov = True,$hGUI1,$hGUI2,$hGUI3, .... , $hGUIn)

    [/autoit]


    Das hat den Hintergrund, dass ich zum jetzigen Standpunkt ein GUI erst voll einfaden muss bevor der nächste "Fade" startet.
    Wenn ich mehrere GUI's beim Funktionsaufruf eintragen könnte, (und diese auch entsprechend abfrage) kann ich ein Pseudo-Paralleles einblenden ermöglichen.

    Es sieht zum jetzigen Zeitpunkt einfach scheiße aus, wenn Minimieren, Maximieren und Schließen (Eigene Pics als Buttons) nacheinander einblenden.

    Vom Code selbst kann ich euch leider nur eine minimalversion der _Fade() geben, da das ganze Projekt für den uIT-Light gedacht ist.

    Spoiler anzeigen
    [autoit]

    Func _Fade($hGUI, $iFadeIn = 1, $iMinTrans = 0, $iMaxTrans = 255, $iFadeSpeed = 5, $bMov = True)
    If $iMinTrans < 0 Then $iMinTrans = 0
    If $iMaxTrans > 255 Then $iMaxTrans = 255
    If $iFadeSpeed < 0 Then $iFadeSpeed = 5
    Local $aPos = WinGetPos($hGUI)
    Local $iN = 1

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

    Switch $iFadeIn
    Case 1
    WinSetTrans($hGUI, "", 0)
    GUISetState(@SW_SHOW, $hGUI)
    For $i = $iMinTrans To $iMaxTrans Step $iFadeSpeed
    WinSetTrans($hGUI, "", $i)
    Sleep(10)
    Next
    Case 0
    For $i = $iMaxTrans To $iMinTrans Step $iFadeSpeed * (-1)
    WinSetTrans($hGUI, "", $i)
    Sleep(10)
    Next
    GUISetState(@SW_HIDE, $hGUI)
    EndSwitch
    EndFunc ;==>_Fade

    [/autoit]

    Möglich ist sowas ja . BitAND() bzw BitOR() haben ja so eine Syntax. Nur leider sind das ja Build-In Funktionen, die man leider nicht einsehen kann, sonst hätte ich nicht posten müssen.

  • Da musst du dann aber vorher alles reinpacken, ich wollte ja nur so die Funktion nehmen ohne was vorher zumachen. Deswegen pack ich es ja in eine Funktion. Ich machs jetzt anders.

    • Offizieller Beitrag

    Da musst du dann aber vorher alles reinpacken, ich wollte ja nur so die Funktion nehmen ohne was vorher zumachen. Deswegen pack ich es ja in eine Funktion. Ich machs jetzt anders.


    Für den Fall, dass du nicht erst ein Array bestücken möchtest und danach dieses übergibst, kannst du eine (sicher begrenzte, weiß grad nicht die Größe) Zahl an optionalen Parametern im Funktionskopf deklarieren und diese alle mit '0' oder einem anderen Wert, der nicht übergeben werden soll, vorbelegen. Hatte ich mal so gelöst:

    Spoiler anzeigen
    [autoit]

    ;===============================================================================
    ; Function Name: _InList($var, $CaseSens, $op1, $op2='-0', $op3='-0', $op4='-0', $op5='-0', $op6='-0', $op7='-0', $op8='-0', $op9='-0', $op10='-0')
    ; Description:: Prüft auf Übereinstimmung einer Variablen mit bis zu 10 Operanden (min 1) einer Auflistung
    ; Es kann Case Sensitiv geprüft werden
    ; Parameter(s): $var die Variable
    ; $CaseSens 1 = Case Sensitiv; 0 (oder alles <> 1) = nicht CS
    ; $op1..10 die Listenelemente
    ; Return Value(s): True bei Übereinstimmung, sonst False
    ; Author(s): BugFix ([email='bugfix@autoit.de'][/email])
    ;===============================================================================
    Func _InList($var, $CaseSens, $op1, $op2='-0', $op3='-0', $op4='-0', $op5='-0', $op6='-0', $op7='-0', $op8='-0', $op9='-0', $op10='-0')
    Local $match = 0
    For $i = 1 To 10
    If $match Then Return True
    If $CaseSens = 1 Then
    If Eval("op" & $i) == '-0' Then ExitLoop
    If $var == Eval("op" & $i) Then $match += 1
    Else
    If Eval("op" & $i) == '-0' Then ExitLoop
    If $var = Eval("op" & $i) Then $match += 1
    EndIf
    Next
    Return False
    EndFunc ;==>_InList

    [/autoit]


    Eine andere Variante:
    Du übergibst die unbekannte Anzahl zusätzlicher Parameter als Trennzeichenbasierten String und splittest intern am Trennzeichen.