Hintergrundflächen in Fenstern, welcher Objekttyp am besten ?

  • Was ich in meiner jungen Unerfahrenheit ein wenig vermisse, ist ein Objekttyp für Flächen ?( ( vermutlich stehe ich nur ein wenig auf der Leitung )

    Banales Beispiel. Erstellt man ein normales Form / Fenster, besteht es aus den Fenstereigenschaften und einer Hintergrundfläche, die darauf wartet, mit Objekten, wie Groupboxen, Buttons, Labelfeldern etc. gefüllt zu werden.

    Nur was verwendet man beispielsweise, um Flächen zwischen Hintergrund und Objekten zu setzen ? Tabs ?

    Ich will im Prinzip eine Fensterfläche durch partielle Flächen aufgliedern. Ich stell mal ein visuelles Beispiels ein, damit man einen bildlichen Eindruck hat :D

  • Du könntest es ja mit Child GUIs machen...

    Spoiler anzeigen
    [autoit]

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

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

    Opt("GUIOnEventMode", 1)

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

    $hWnd_Main = GUICreate("Main", 600, 400, Default, Default, BitOR($WS_MINIMIZEBOX, $WS_CAPTION, $WS_SYSMENU, $WS_CLIPCHILDREN))
    $cButton_Main_Test = GUICtrlCreateButton("Main Test", 5, 5, 80, 25)
    GUISetState()

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

    $hWnd_Child1 = GUICreate("Child 1", 200, 200, 50, 50, $WS_POPUP)
    GUISetBkColor(0x5050FF, $hWnd_Child1)
    $cButton_Child1_Test = GUICtrlCreateButton("Child 1 Test", 5, 5, 80, 25)

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

    $hWnd_Child2 = GUICreate("Child 2", 200, 200, 150, 150, $WS_POPUP)
    GUISetBkColor(0xFFFF50, $hWnd_Child2)
    $cButton_Child2_Test = GUICtrlCreateButton("Child 2 Test", 5, 5, 80, 25)

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

    $hWnd_Child3 = GUICreate("Child 3", 400, 300, 60, 40, $WS_POPUP)
    GUISetBkColor(0xFF5050, $hWnd_Child3)
    $cButton_Child3_Test = GUICtrlCreateButton("Child 3 Test", 50, 50, 80, 80)

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

    _SetParent($hWnd_Main, $hWnd_Child1)
    _SetParent($hWnd_Main, $hWnd_Child2)
    _SetParent($hWnd_Main, $hWnd_Child3)

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

    GUISetOnEvent($GUI_EVENT_CLOSE, "_Exit", $hWnd_Main)
    GUISetOnEvent($GUI_EVENT_CLOSE, "_CloseChild1", $hWnd_Child1)
    GUISetOnEvent($GUI_EVENT_CLOSE, "_CloseChild2", $hWnd_Child2)
    GUISetOnEvent($GUI_EVENT_CLOSE, "_CloseChild3", $hWnd_Child3)

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

    GUICtrlSetOnEvent($cButton_Main_Test, "_ButtonMain")
    GUICtrlSetOnEvent($cButton_Child1_Test, "_ButtonChild1")
    GUICtrlSetOnEvent($cButton_Child2_Test, "_ButtonChild2")
    GUICtrlSetOnEvent($cButton_Child3_Test, "_ButtonChild3")

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

    GUISetState(@SW_SHOW, $hWnd_Child1)
    GUISetState(@SW_SHOW, $hWnd_Child2)
    GUISetState(@SW_SHOW, $hWnd_Child3)

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

    While Sleep(1000)
    WEnd

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

    Func _SetParent($hWnd_Parent, $hWnd_Child)
    $nExStyle = DllCall("user32.dll", "int", "GetWindowLong", "hwnd", $hWnd_Child, "int", 0xEC)
    DllCall("user32.dll", "int", "SetWindowLong", "hwnd", $hWnd_Child, "int", 0xEC, "int", BitOR($nExStyle[0], $WS_EX_MDICHILD))
    DllCall("user32.dll", "int", "SetParent", "hwnd", $hWnd_Child, "hwnd", $hWnd_Parent)

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

    GUISwitch($hWnd_Parent)
    EndFunc

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

    Func _Exit()
    Exit
    EndFunc

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

    Func _ButtonMain()
    MsgBox(64, "Button", "Main")
    EndFunc

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

    Func _ButtonChild1()
    MsgBox(64, "Button", "Child 1")
    EndFunc

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

    Func _ButtonChild2()
    MsgBox(64, "Button", "Child 2")
    EndFunc

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

    Func _ButtonChild3()
    MsgBox(64, "Button", "Child 3")
    EndFunc

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

    Func _CloseChild1()
    GUIDelete($hWnd_Child1)
    EndFunc

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

    Func _CloseChild2()
    GUIDelete($hWnd_Child2)
    EndFunc

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

    Func _CloseChild3()
    GUIDelete($hWnd_Child3)
    EndFunc

    [/autoit]
  • Das klingt nicht schlecht, ich hatte nicht daran gedacht, das man bei Fenstern ja die Rahmeneigenschaften weg machen kann.

    Ich hatte mir dazu schon einmal ein Beispiel Childwindows in Mainwindows angeschaut.

  • Hallo autoBert,

    vielen Dank für Deinen Ansatz :)

    ja, auch das geht in diese Richtung :thumbup: , stell ich mir allerdings ziemlich tippintensiv vor. ( muss ich zur Not durch :D )

    Ich bin davon ausgegangen, das man es z.B. so macht, wie ich es im Anhang Post #1 gemacht hatte, sich eine Grafik (Pic) definiert, die auf dem Hintergrund, aber hinter den Labelcontrolls liegt, aber ich denke, das kann nicht der Weissheit letzter Schluss sein, auch wenn es visuell alle Freiheiten zuließe.

    Ich stell im Anhang 1 mal ein weiteres Bild ein, woraus meine Frage entstanden ist ( gut, ich vermute, es wurde in Delphi oder so geproggt und ist mit entsprechenden userdefined Styles gemacht worden ), ich kann mir dort nicht vorstellen, dass da die Programmierer hingegangen sind, und mit einer
    GUICtrlCreateGraphic vergleicbaren Funktion gearbeitet haben.

    Ich erläuter mal kurz, wie mein Ansinnen zustande kam.

    Ich fand das Beispiel von chrisatack sehr ansprechend, eine GUI mit den Ribbons. Ich hatte mir dann überlegt, wie man den Hintergrund unterhalb des Ribbons mit Inhalt füllt. Erster Ansatz war, eine Childgui rein zu machen, vergleichbar einem Tabellenblatt in Excel, Dazu hab ich mir auch das eine Beispiel Gui in Gui angeschaut. Ich bin dann aber daran gescheitert, das Andocken des Childfensters beim Maximieren oben an den Ribbon hinzubekommen ( DAU :D ) .

    Dann überlegte ich mir, fangen wir klein an, und machen eine Oberfläche, die mit Flächenelementen das Fenster etwas gliedert.Da kam mir das exemplarische Beispiel aus Anhang 1 unten, wo ich mir überlegte, wie man es am saubersten anstellt, diese Flächenelemente mittels Objekten darzustellen.

    Ich halte halt meinen ursprünglichen Weg aus dem Anhang in Post #1 für zweifelhaft, da ich bedenken habe, durch viele (externe ) Grafiken einen Overhead zu schaffen. Daher suchte ich nach einem Weg vergleichbar einem Tab oder einer Groupbox, lediglich, das es definierte, farbige Flächen darstellt. ( Ich vermute, hat nu kein Mensch verstanden :wacko: :D )

    Um es aber auf den Punkt zu bringen, schaut Euch mal den Anhang an und verratet, wie ihr, wenn ihr in Auto-IT so etwas layoutmäßig gestalten würdet, vorgehen würdet. :rolleyes:

    ( btw. langsam hab ich den Verdacht, es könnte sich dabei doch im Groupboxen handeln ? 8o )