Gruppen

  • Moin,

    Ich wollte einige Elemente in einer Gui in eine Gruppe setzen, so das wenn ich die Grupper verschiebe auch die Elemente mitverschoben werden und das die Elemente auserhalb diese Gruppe nicht zu sehen sind, sie also auf den bereich der Gruppe eingeschränkt wird, aber das Funktioniert irgendwie nicht so ganz :(

    Spoiler anzeigen
    [autoit]

    $hGui = GUICreate ("Test",600,600)
    $Group = GUICtrlCreateGroup ("Test",10,10)
    $B1 = GUICtrlCreateButton ("Test1",10,10)
    $B1 = GUICtrlCreateButton ("Test2",50,10)
    $B1 = GUICtrlCreateButton ("Test3",90,10)
    GUICtrlCreateGroup("", -99, -99, 1, 1)
    GUISetState (@SW_SHOW)
    GUICtrlSetPos ($Group,100,100)
    While 1
    Switch GuiGetMsg ()
    Case -3
    Exit
    EndSwitch
    WEnd

    [/autoit]

    mfg. Jam00

  • da bewegt sich nix was willst du verschieben ?

    Achtung Anfänger! :whistling:

    Betrachten des Quellcodes auf eigene Gefahr, bei Übelkeit,Erbrechen,Kopfschmerzen übernehme ich keine Haftung. 8o

  • Ich nehme mal an das du das mit Scite (Koda) machen möchtest?
    Dann must du erst das Gruppenelement einfügen und dann die Elemente die in der Gruppe erscheinen sollen.

    Skript Beispiel:

    Spoiler anzeigen
    [autoit]


    #include <ButtonConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>
    #Region ### START Koda GUI section ### Form=
    $Form1 = GUICreate("Form1", 400, 293, 192, 124)
    $Group1 = GUICtrlCreateGroup("Group1", 16, 24, 169, 137)
    $Button1 = GUICtrlCreateButton("Button1", 72, 88, 49, 25, $WS_GROUP)
    GUICtrlCreateGroup("", -99, -99, 1, 1)
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit

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

    EndSwitch
    WEnd

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

    MfG
    Der_Doc

  • Hallo Jam00,

    das kannst du nur über eine Child-Gui lösen:

    Spoiler anzeigen
    [autoit]

    ; *** Start added by AutoIt3Wrapper ***
    #include <GUIConstantsEx.au3>
    ; *** End added by AutoIt3Wrapper ***
    #Region ;**** Directives created by AutoIt3Wrapper_GUI ****
    #AutoIt3Wrapper_Add_Constants=n
    #EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
    ; *** Start added by AutoIt3Wrapper ***
    #include <WindowsConstants.au3>
    ; *** End added by AutoIt3Wrapper ***
    $hGui = GUICreate ("Test",600,600,0,0)
    $hChild = GUICreate("",200,50,20,20,$WS_PopUp,$WS_EX_MDICHILD,$hGui)
    $Group = GUICtrlCreateGroup ("Test",10,30,200,50)
    $B1 = GUICtrlCreateButton ("Test1",10,25)
    $B2 = GUICtrlCreateButton ("Test2",50,25)
    $B3 = GUICtrlCreateButton ("&verschieben",90,25)
    GUICtrlCreateGroup("", -99, -99, 1, 1)
    GUISetState (@SW_SHOW,$hGui)
    GUISetState (@SW_SHOW,$hChild)
    While 1
    Switch GuiGetMsg ()
    Case -3
    Exit
    Case $B3
    WinMove($hChild,"",100,100)

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

    EndSwitch
    WEnd

    [/autoit]

    das Verschieben habe ich auf einen Button gelegt,

    mfg autoBert

  • autoBert
    ist das nicht anders Möglich? Das währe dann nähmlich schon meine drittes Cild-Fenster was ich bracuhe für das Script wo ich das zusammenbaue

    Der_Doc
    Nein, so verschiebt sich das doch nicht mit, hier nohcmal zu verdeutlichung mit einer kurzen wartezeit:

    Spoiler anzeigen
    [autoit]

    #include <ButtonConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>
    #Region ### START Koda GUI section ### Form=
    $Form1 = GUICreate("Form1", 625, 443, 192, 124)
    $Group1 = GUICtrlCreateGroup("Group1", 144, 64, 361, 233)
    $Button1 = GUICtrlCreateButton("Button1", 200, 136, 201, 97, $WS_GROUP)
    GUICtrlCreateGroup("", -99, -99, 1, 1)
    GUISetState(@SW_SHOW)
    Sleep (1000)
    GUICtrlSetPos ($Group1,10,10)
    #EndRegion ### END Koda GUI section ###

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit

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

    EndSwitch
    WEnd

    [/autoit]

    mfg. Jam00

  • ich hab auf arbeit ne funktion mit der ich controls in einem array dann verschieben kann ... ich kanns dir am montag mal posten
    ich benutzte die weil ich wenn das programm startet nur nen teil brauche und wenn dan netwas angeklickt wird zusätzliche sachen angezeigt werden

  • also ich hab meine funktion noch ma der einfachheitshalber ien wenig abgespeckt und nen beispiel geschrieben

    kommt das so ungefähr hin mit dem was du meinst?

    Spoiler anzeigen
    [autoit]

    #include <GUIConstantsEx.au3>

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

    Global $control[4], $mousedown = False, $mousepos[2]
    Opt("GUIOnEventMode", 1) ; Wechsle in den OnEvent Modus

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

    $gui = GUICreate("Meine GUI", 300, 300) ; Erstellt ein GUI-Fenster welches mittig ausgerichtet wird
    GUISetOnEvent($GUI_EVENT_CLOSE, "Ende")

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

    $control[0] = GUICtrlCreateGroup("Gruppe 1", 10, 10, 200, 100)
    $control[1] = GUICtrlCreateButton("EINS", 20, 40, 50)
    GUICtrlSetOnEvent($control[1], "EINS")
    $control[2] = GUICtrlCreateButton("ZWEI", 80, 40, 50)
    GUICtrlSetOnEvent($control[2], "ZWEI")
    $control[3] = GUICtrlCreateButton("DREI", 140, 40, 50)
    GUICtrlSetOnEvent($control[3], "DREI")
    GUICtrlCreateGroup("", -99, -99, 1, 1) ; Gruppe schliessen

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

    GUISetState(@SW_SHOW) ; Zeigt das leere GUI-Fenster

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

    While 1
    $cursor = GUIGetCursorInfo($gui)
    If Not IsArray($cursor) Then ContinueLoop
    If $cursor[4] == $control[0] And $mousedown == False And $cursor[2] == 1 Then ; Maus über Group und gedrückt, erstes mal
    $mousepos[0] = $cursor[0]
    $mousepos[1] = $cursor[1]
    $mousedown = True
    EndIf

    $diffx = $cursor[0] - $mousepos[0]
    $diffy = $cursor[1] - $mousepos[1]

    If $mousedown == True And $diffx <> 0 Then
    Bewegen($control, $gui, $diffx, $diffy)
    $mousedown = False
    EndIf

    WEnd

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

    Func EINS()
    Bewegen($control, $gui, 10, 10)
    EndFunc

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

    Func ZWEI()
    Bewegen($control, $gui, -10)
    EndFunc

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

    Func DREI()
    Bewegen($control, $gui, -20, 10)
    EndFunc

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

    Func Bewegen($hWnd_Array,$hGUI,$x = 0, $y = 0)
    For $i = 0 To UBound($hWnd_Array) - 1 Step 1
    $pos = ControlGetPos($hGUI, "", $hWnd_Array[$i])
    $L = $pos[0] + $x
    $W = $pos[2]
    $T = $pos[1] + $y
    $H = $pos[3]
    GUICtrlSetPos($hWnd_Array[$i], $L, $T , $W , $H)
    Next
    EndFunc

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

    ;####################################################
    Func Ende()
    Exit
    EndFunc

    [/autoit]
  • Kijan
    Nein, also das mit dem Verschieben hätte ich auch so hinbekommen, aber sie verschwinden ja erst wenn sie aus der Gui sind, sie müssen aber schon abgeschnitten werden sobald sie aus einem Bestimmten Bereich verschwinden

    mfg. Jam00

  • Sowas in etwa?

    Spoiler anzeigen
    [autoit]

    #include <GUIConstantsEx.au3>

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

    Global $control[4], $mousedown = False, $mousepos[2]
    Opt("GUIOnEventMode", 1) ; Wechsle in den OnEvent Modus

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

    $gui = GUICreate("Meine GUI", 500, 200) ; Erstellt ein GUI-Fenster welches mittig ausgerichtet wird
    GUISetOnEvent($GUI_EVENT_CLOSE, "Ende")

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

    $control[0] = GUICtrlCreateGroup("Gruppe 1", 10, 10, 200, 100)
    $control[1] = GUICtrlCreateButton("EINS", 20, 40, 50)
    GUICtrlSetOnEvent($control[1], "EINS")
    $control[2] = GUICtrlCreateButton("ZWEI", 80, 40, 50)
    GUICtrlSetOnEvent($control[2], "ZWEI")
    $control[3] = GUICtrlCreateButton("DREI", 140, 40, 50)
    GUICtrlSetOnEvent($control[3], "DREI")
    GUICtrlCreateGroup("", -99, -99, 1, 1) ; Gruppe schliessen

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

    $label = GUICtrlCreateLabel("Hier ist ein Label", 250, 10, 200, 100)
    GUISetState(@SW_SHOW) ; Zeigt das leere GUI-Fenster

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

    While 1
    $cursor = GUIGetCursorInfo($gui)
    If Not IsArray($cursor) Then ContinueLoop
    If $cursor[4] == $control[0] And $mousedown == False And $cursor[2] == 1 Then ; Maus über Group und gedrückt, erstes mal
    $mousepos[0] = $cursor[0]
    $mousepos[1] = $cursor[1]
    $mousedown = True
    EndIf

    $diffx = $cursor[0] - $mousepos[0]
    $diffy = $cursor[1] - $mousepos[1]

    If $mousedown == True And $diffx <> 0 Then
    Bewegen($control, $gui, $diffx, $diffy)
    $mousedown = False
    EndIf

    WEnd

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

    Func EINS()
    Bewegen($control, $gui, 10, 10)
    EndFunc

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

    Func ZWEI()
    Bewegen($control, $gui, -10)
    EndFunc

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

    Func DREI()
    Bewegen($control, $gui, -20, 10)
    EndFunc

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

    Func Bewegen($hWnd_Array,$hGUI,$x = 0, $y = 0)
    For $i = 0 To UBound($hWnd_Array) - 1 Step 1
    $pos = ControlGetPos($hGUI, "", $hWnd_Array[$i])
    $L = $pos[0] + $x
    $W = $pos[2]
    $T = $pos[1] + $y
    $H = $pos[3]
    $guiPos = WinGetPos($gui)
    If $hWnd_Array[$i] <> $hWnd_Array[0] Then
    If ($L + $W) >= ($guiPos[2]) Or $L <= 0 Then
    GUICtrlSetState($hWnd_Array[$i], $GUI_HIDE)
    Else
    GUICtrlSetState($hWnd_Array[$i], $GUI_SHOW)
    EndIf
    EndIf
    GUICtrlSetPos($hWnd_Array[$i], $L, $T , $W , $H)
    Next
    EndFunc

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

    ;####################################################
    Func Ende()
    Exit
    EndFunc

    [/autoit]

    nur als Test damit ich weis ob ihc dich richtig verstanden habe...verbessern kann man es immer noch^^

    Einmal editiert, zuletzt von Kijan (6. September 2010 um 15:06)

  • Also ich meinte das mit dem Verschwinden so, das wenn ich einzelne Elemente in der Grupper verschiebe das die dann abgeschnittern werden wenn sie auserhalb der Gruppe kommen
    Bei deiner Lösung werden die Button einfach versteckt sobald sie auserhalb des Fenster sind, aber ich wollte ja das sie nicht direckt werschwinden sonder nur abgeschnitten werden. Einfach so wie eine Gui. Wenn ich etwas aus einer Gui schiebe, dann wird es ja auch eifnach abgeschnitten. Nur das ich diese Gui nochmal beschränken möchte für einzelne Elemente

    mfg. Jam00

  • ach du willst die controls IN der Gruppe verschieben nicht die Gruppe selbst?
    Verschieb mal bei meinem letzten post die gruppe unter das label? da sind die dann auch nicht mehr zusehen teilweise.. da durch ein label verdeckt