Frage zu Bitand (Variablen zusammenfassen)

  • Hey,

    kurze Frage:

    Ich möchte eine Funktion für mehrere Variablen anwenden.
    Eigentlich dachte ich mit Bitand schaffe ich es, leider funktioniert das ganze nicht.
    Im Beispiel wird die Funktion nur auf Variable 1 angewendet.

    [autoit]


    $lala = BitAND ($1, $2)
    _HauptReset ($lala)

    [/autoit]

    Bin ich mit Bitand völlig auf dem Holzweg?

    Gruß nuts

    Einmal editiert, zuletzt von nuts (15. Oktober 2008 um 17:32)

  • So evtl.?

    Spoiler anzeigen
    [autoit]


    $1 = '1111'
    $2 = '2222'
    $lala = $1 & $2
    MsgBox(0,"",$lala)

    [/autoit]

    Lieben Gruß,
    Alina

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    Geheime Information: ;)
    OuBVU5ebLhHu5QvlnAyQB4A7SzBrvWulwL7RLl2BdH5tI6sIYspeMKeXMSXl

  • Hallo nuts,
    das weiss ich jetzt auch nicht genau, ich habe mir dann immer die Werte in Array's angepasst, dass ich Forschleifen nutzen kann. Aber es geht auch ohne Array's aber ob das die beste Lösung ist, kann ich nicht sagen ;).

    [autoit]

    $var1 = 1
    $var2 = 4
    $var3 = 6

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

    For $i = 1 to 3
    _blubb(Eval("var"&$i))
    Next

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

    Func _blubb($zahl)
    MsgBox(0, "", $zahl)
    EndFunc

    [/autoit]
    • Offizieller Beitrag

    Ich möchte eine Funktion für mehrere Variablen anwenden.
    Eigentlich dachte ich mit Bitand schaffe ich es, leider funktioniert das ganze nicht.
    Im Beispiel wird die Funktion nur auf Variable 1 angewendet.


    Ich verstehe nicht, was du machen möchtest.
    Wenn du 2 Variablen in der Funktion verwenden möchtest, solltest du auch 2 übergeben.
    Bit-Operationen kannst du verwenden, wenn Konstanten eingesetzt werden, so wie das z.B. bei Styles für Controls der Fall ist.
    Mehr über Bit-Operationen: s. Tut in meiner Signatur.

  • hey,

    danke für die antworten.

    ich möchte diesen ausdruck zusammenfassen (sind im echten skript natürlich viel mehr variablen)
    es soll die funktion zuerst auf $1 und dann auf $2 angewendet werden.

    [autoit]


    _HauptReset ($1)
    _HauptReset ($2)

    [/autoit]

    meine variablen erstellen alle buttons und ich damit ich selber noch durchblicke hab ich den variablen eindeutige bezeichnungen gegeben.
    somit fällt die array lösung raus oder?

    edit \

    [autoit]


    $lala = $1 & $2
    _HauptReset ($lala)

    [/autoit]


    funktioniert bei mir leider nicht :(

    • Offizieller Beitrag

    Hi nuts,
    Tipp für dich im eigenen Interesse: Sei nicht so geizig mit deinem Code. Mit 2 hingeworfenen Skriptzeilen läßt sich dein Problem schlecht überblicken. Denn von enormen Interesse ist doch der Inhalt der übergebenen Variablen. Und das ist hier nicht sichtbar.
    Also gib mal mehr Infos - umso größer ist die Wahrscheinlichkeit, dass dir geholfen wird.

    • Offizieller Beitrag

    nuts: wenn ich das richtig verstanden habe, dann suchst Du so etwas:

    [autoit]


    $array = StringSplit('1,2,3,4,5,6,7', ',') ; hier die Namen der Variablen (ohne $) eingeben
    For $i = 1 To $array[0]
    _HauptReset(Eval($array[$i]))
    Next

    [/autoit]

    Edit: Bei Eval müssen die Variablennamen ohne das Dollarzeichen übergeben werden!

  • Hey,

    kein problem. mein code ist nur ziemlich unübersichtlich:
    habs etwas abgespeckt - so wirds denke ich klar war ich machen will.

    Spoiler anzeigen
    [autoit]


    #include <GUIConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>

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

    ;;;;;;;;;;;;;;;;;;;; Haupt-Menü Variablen
    Opt("GUICoordMode", 1)
    Global $last_focus = -1
    Global $Farbe = 0x000080
    Global $HauptGUI = GUICreate("HTPC", 400, 800, -1, -1, BitOR($WS_POPUP,$WS_BORDER,$WS_CLIPSIBLINGS))
    GUICtrlSetState(-1, $GUI_DISABLE)

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

    ;;;;;;;;;;;;;;;;;;;;;;Buttons;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    Dim $L = 100 ; Buttonleft
    Dim $W = 200 ; Buttonwidth
    Dim $H = 60; Buttonheight
    Dim $C = 4169E1 ;Hintergrundfarbe Button
    Dim $F = GUISetFont( 18, 800, 0, "MS Sans Serif") ;Schrift der Buttons

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

    Global $TV = GUICtrlCreateButton("TV", $L, 8, $W, $H, -1, $WS_EX_STATICEDGE)
    Global $DVD = GUICtrlCreateButton("DVD", $L, 88, $W, $H, -1, $WS_EX_STATICEDGE)
    Global $Aufnahmen = GUICtrlCreateButton("Aufnahmen", $L, 168, $W, $H, -1, $WS_EX_STATICEDGE)
    Global $Internet = GUICtrlCreateButton("Internet", $L, 248, $W, $H, -1, $WS_EX_STATICEDGE)
    Global $Musik = GUICtrlCreateButton("Musik/Bilder", $L, 328, $W, $H, -1, $WS_EX_STATICEDGE)
    Global $Bluray = GUICtrlCreateButton("Bluray", $L, 408, $W, $H, -1, $WS_EX_STATICEDGE)
    Global $Einstellungen = GUICtrlCreateButton("Einstellungen", $L, 488, $W, $H, -1, $WS_EX_STATICEDGE)
    Global $Beenden = GUICtrlCreateButton("Beenden", $L, 568, $W, $H, -1, $WS_EX_STATICEDGE)
    Global $Exit = GUICtrlCreateButton("exit", $L, 648, $W, $H, -1, $WS_EX_STATICEDGE)

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

    ;$lala = $Internet ;& $Aufnahmen Hier will ich die Funktion für die oben genannten Variablen aufrufen um die default Farbe zu setzen
    ;_HauptReset ($lala)

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

    GUISetState(@SW_SHOW, $HauptGUI)
    GUISetState(@SW_MAXIMIZE, $HauptGUI)
    While 1
    $msg = GUIGetMsg()
    switch $msg
    case $GUI_EVENT_Close
    Exit
    Case $TV
    Case $DVD
    Case $Aufnahmen
    Case $Musik
    Case $Bluray
    Case $Einstellungen ;Aufruf Einstellungen
    Case $Beenden ;Aufruf Beenden
    Case $Exit
    exit
    EndSwitch
    ; Start Farbe ButtonFokus Hauptmenü
    If Not _IsFocused($HauptGUI,$last_focus) Then
    Select
    Case _IsFocused($HauptGUI, $TV)
    GUICtrlSetBkColor($TV, $Farbe)
    _HauptReset($Exit)
    _HauptReset($DVD)
    $last_focus = $TV
    Case _IsFocused($HauptGUI, $DVD)
    GUICtrlSetBkColor($DVD, $Farbe)
    _HauptReset($TV)
    _HauptReset($Aufnahmen)
    $last_focus = $DVD
    Case _IsFocused($HauptGUI, $Aufnahmen)
    GUICtrlSetBkColor($Aufnahmen, $Farbe)
    _HauptReset($DVD)
    _HauptReset($Internet)
    $last_focus = $Aufnahmen
    Case _IsFocused($HauptGUI, $Internet)
    GUICtrlSetBkColor($Internet, $Farbe)
    _HauptReset($Aufnahmen)
    _HauptReset($Musik)
    $last_focus = $Internet
    Case _IsFocused($HauptGUI, $Musik)
    GUICtrlSetBkColor($Musik, $Farbe)
    _HauptReset($Internet)
    _HauptReset($Bluray)
    $last_focus = $Musik
    Case _IsFocused($HauptGUI, $Bluray)
    GUICtrlSetBkColor($Bluray, $Farbe)
    _HauptReset($Musik)
    _HauptReset($Einstellungen)
    $last_focus = $Bluray
    Case _IsFocused($HauptGUI, $Einstellungen)
    GUICtrlSetBkColor($Einstellungen, $Farbe)
    _HauptReset($Bluray)
    _HauptReset($Beenden)
    $last_focus = $Einstellungen
    Case _IsFocused($HauptGUI, $Beenden)
    GUICtrlSetBkColor($Beenden, $Farbe)
    _HauptReset($Einstellungen)
    _HauptReset($exit)
    $last_focus = $Beenden
    Case _IsFocused($HauptGUI, $exit)
    GUICtrlSetBkColor($exit, $Farbe)
    _HauptReset($beenden)
    _HauptReset($TV)
    $last_focus = $exit
    EndSelect
    EndIf
    ;Ende Farbe ButtonFokus Hauptmenü

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

    WEnd

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

    Func _IsFocused($hWnd, $nCID)
    Return GUICtrlGetHandle($nCID) = ControlGetHandle($hWnd, '', ControlGetFocus($hWnd))
    EndFunc

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

    Func _HauptReset ($ID)
    $Resetfarbe = 4169E1
    Switch $ID
    Case $TV
    GUICtrlSetBkColor($ID, $Resetfarbe)
    Case $DVD
    GUICtrlSetBkColor($ID, $Resetfarbe)
    Case $Aufnahmen
    GUICtrlSetBkColor($ID, $Resetfarbe)
    Case $Internet
    GUICtrlSetBkColor($ID, $Resetfarbe)
    Case $Musik
    GUICtrlSetBkColor($ID, $Resetfarbe)
    Case $Bluray
    GUICtrlSetBkColor($ID, $Resetfarbe)
    Case $Einstellungen
    GUICtrlSetBkColor($ID, $Resetfarbe)
    Case $Beenden
    GUICtrlSetBkColor($ID, $Resetfarbe)
    Case $Exit
    GUICtrlSetBkColor($ID, $Resetfarbe)
    EndSwitch
    EndFunc

    [/autoit]

    edit \
    Oscar : funktioniert leider noch nicht bei mir.
    muss mir aber auch erstmal die von dir verwendeten funktionen in der hilfe ansehen.

    3 Mal editiert, zuletzt von nuts (12. Oktober 2008 um 16:43)

  • Spoiler anzeigen
    [autoit]

    Global $1 = 1, $2 = 2, $3 = 3, $4 = 4, $5 = 5

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

    $array = StringSplit('1,2,3,4,5', ',') ; hier die Namen der Variablen (ohne $) eingeben
    For $i = 1 To $array[0]
    _msgbox(Eval($array[$i]))
    Next

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

    Func _msgbox($zahl)
    MsgBox(0, "", $zahl)
    EndFunc ;==>_msgbox

    [/autoit]
  • hehe genial läuft :thumbup:

    danke an alle die mitgeholfen haben!

    edit \ könnte ich auch eine der Variablen im array ausschließen?
    ich glaube dann könnte ich die schleife zur "is_focused" Funktion erheblich vereinfachen.

  • Also in meinem geposteten Skript (post8 ) setze ich ziemlich umständlich die Hintergrundfarbe zurück.

    Wenn ich im String die auszuschließende Variable rausnehme, dann muss ich für jeden Button einen neuen String schreiben.
    Diesen Teil meine ich.

    Spoiler anzeigen
    [autoit]


    If Not _IsFocused($EinstellungenGUI,$last_focus) Then
    Select
    Case _IsFocused($EinstellungenGUI, $720P)
    GUICtrlSetBkColor($720P, $Farbe)
    _EinstellungenReset($Back2)
    _EinstellungenReset($1080P)
    $last_focus = $720P
    Case _IsFocused($EinstellungenGUI, $1080P)
    GUICtrlSetBkColor($1080P, $Farbe)
    _EinstellungenReset($720P)
    _EinstellungenReset($Notfallskript)
    $last_focus = $1080P
    Case _IsFocused($EinstellungenGUI, $Notfallskript)
    GUICtrlSetBkColor($Notfallskript, $Farbe)
    _EinstellungenReset($1080P)
    _EinstellungenReset($Backupskript)
    $last_focus = $Notfallskript
    Case _IsFocused($EinstellungenGUI, $Backupskript)
    GUICtrlSetBkColor($Backupskript, $Farbe)
    _EinstellungenReset($Notfallskript)
    _EinstellungenReset($50HZ)
    $last_focus = $Backupskript
    Case _IsFocused($EinstellungenGUI, $50HZ)
    GUICtrlSetBkColor($50HZ, $Farbe)
    _EinstellungenReset($backupskript)
    _EinstellungenReset($24HZ)
    $last_focus = $50HZ
    Case _IsFocused($EinstellungenGUI, $24HZ)
    GUICtrlSetBkColor($24HZ, $Farbe)
    _EinstellungenReset($50HZ)
    _EinstellungenReset($60HZ)
    $last_focus = $24HZ
    Case _IsFocused($EinstellungenGUI, $60HZ)
    GUICtrlSetBkColor($60HZ, $Farbe)
    _EinstellungenReset($24HZ)
    _EinstellungenReset($back2)
    $last_focus = $60HZ
    Case _IsFocused($EinstellungenGUI, $back2)
    GUICtrlSetBkColor($back2, $Farbe)
    _EinstellungenReset($720P)
    _EinstellungenReset($60HZ)
    $last_focus = $back2
    EndSelect
    EndIf

    [/autoit]


    Über das gleiche System wie oben könnte ich das stark vereinfachen, allerdings müsste der Button mit dem Eingabefokus ausgeschlossen werden, sonst wird ja die Resetfunktion und der Befehl GUICtrlSetBkColor($720P, $Farbe) gleichzeitig angewendet.

    2 Mal editiert, zuletzt von nuts (12. Oktober 2008 um 16:44)

    • Offizieller Beitrag

    Um eine Variable auszuschließen, kannst Du eine If-Abfrage einbauen:

    Spoiler anzeigen
    [autoit]


    Global $1 = 11, $2 = 12, $3 = 13, $4 = 14, $5 = 15

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

    $raus = 14

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

    $array = StringSplit('1,2,3,4,5', ',') ; hier die Namen der Variablen (ohne $) eingeben
    For $i = 1 To $array[0]
    If Eval($array[$i]) <> $raus Then _msgbox(Eval($array[$i]))
    Next

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

    Func _msgbox($zahl)
    MsgBox(0, "", $zahl)
    EndFunc ;==>_msgbox

    [/autoit]
    • Offizieller Beitrag

    Ich habe Dein Script mal einfacher gestaltet:

    Spoiler anzeigen
    [autoit]


    #include <GUIConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>

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

    ;;;;;;;;;;;;;;;;;;;; Haupt-Menü Variablen
    Opt("GUICoordMode", 1)
    Global $last_focus = -1
    Global $HauptGUI = GUICreate("HTPC", 400, 800, -1, -1, BitOR($WS_POPUP, $WS_BORDER, $WS_CLIPSIBLINGS))
    GUICtrlSetState(-1, $GUI_DISABLE)

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

    ;;;;;;;;;;;;;;;;;;;;;;Buttons;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    Dim $L = 100 ; Buttonleft
    Dim $W = 200 ; Buttonwidth
    Dim $H = 60; Buttonheight
    Dim $F = GUISetFont(18, 800, 0, "MS Sans Serif") ;Schrift der Buttons

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

    Global $TV = GUICtrlCreateButton("TV", $L, 8, $W, $H, -1, $WS_EX_STATICEDGE)
    Global $DVD = GUICtrlCreateButton("DVD", $L, 88, $W, $H, -1, $WS_EX_STATICEDGE)
    Global $Aufnahmen = GUICtrlCreateButton("Aufnahmen", $L, 168, $W, $H, -1, $WS_EX_STATICEDGE)
    Global $Internet = GUICtrlCreateButton("Internet", $L, 248, $W, $H, -1, $WS_EX_STATICEDGE)
    Global $Musik = GUICtrlCreateButton("Musik/Bilder", $L, 328, $W, $H, -1, $WS_EX_STATICEDGE)
    Global $Bluray = GUICtrlCreateButton("Bluray", $L, 408, $W, $H, -1, $WS_EX_STATICEDGE)
    Global $Einstellungen = GUICtrlCreateButton("Einstellungen", $L, 488, $W, $H, -1, $WS_EX_STATICEDGE)
    Global $Beenden = GUICtrlCreateButton("Beenden", $L, 568, $W, $H, -1, $WS_EX_STATICEDGE)
    Global $Exit = GUICtrlCreateButton("exit", $L, 648, $W, $H, -1, $WS_EX_STATICEDGE)

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

    _HauptReset($Internet)

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

    GUISetState(@SW_SHOW, $HauptGUI)
    GUISetState(@SW_MAXIMIZE, $HauptGUI)
    While 1
    $msg = GUIGetMsg()
    Switch $msg
    Case $GUI_EVENT_Close
    Exit
    Case $TV
    _HauptReset($TV)
    Case $DVD
    _HauptReset($DVD)
    Case $Aufnahmen
    _HauptReset($Aufnahmen)
    Case $Internet
    _HauptReset($Internet)
    Case $Musik
    _HauptReset($Musik)
    Case $Bluray
    _HauptReset($Bluray)
    Case $Einstellungen ;Aufruf Einstellungen
    _HauptReset($Einstellungen)
    Case $Beenden ;Aufruf Beenden
    _HauptReset($Beenden)
    Case $Exit
    Exit
    EndSwitch
    WEnd

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

    Func _HauptReset($ID)
    Local $FarbeNorm = 0x000080, $FarbeMark = 0x4169E1
    Local $aID = StringSplit('tv,dvd,aufnahmen,internet,musik,bluray,einstellungen,beenden,exit', ',')
    For $i = 1 To $aID[0]
    If Eval($aID[$i]) = $ID Then
    GUICtrlSetBkColor(Eval($aID[$i]), $FarbeMark)
    Else
    GUICtrlSetBkColor(Eval($aID[$i]), $FarbeNorm)
    EndIf
    Next
    EndFunc

    [/autoit]
  • Trifft jetzt nicht ganz die Funktionsweise meines Skripts.

    Ich möchte ja die Hintergrundfarbe des Buttons dynamisch zum Fokus verändern (z.B. Button im Fokus = hellblau, Rest = dunkelblau).

    Trotzdem danke für deine Mühen.
    So wie ich das sehe könnte es etwas umgebaut trotzdem helfen - ich muss aber erstmal ne Pause einlegen, bei mir dreht sich schon alles. 8o