Gui vergrößern

  • Hallo Zusammen,

    im Moment löse ich das Vergrößern meiner GUI wie folgt:

    Spoiler anzeigen
    [autoit]

    #include <ButtonConstants.au3>
    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>

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

    $Form1 = GUICreate("Form1", 335, 270, -1, -1,$WS_EX_TOOLWINDOW)
    $Group1 = GUICtrlCreateGroup("details", 8, 248, 313, 201)
    GUICtrlSetResizing(-1, $GUI_DOCKTOP+$GUI_DOCKHEIGHT)
    $Edit1 = GUICtrlCreateEdit("", 16, 272, 297, 169, BitOR($GUI_SS_DEFAULT_EDIT,$ES_READONLY))
    GUICtrlSetData(-1, "Edit1")
    GUICtrlSetResizing(-1, $GUI_DOCKTOP+$GUI_DOCKHEIGHT)
    GUICtrlCreateGroup("", -99, -99, 1, 1)
    $Group2 = GUICtrlCreateGroup("altes zeug", 8, 48, 313, 121)
    GUICtrlSetResizing(-1, $GUI_DOCKTOP+$GUI_DOCKHEIGHT)
    $Edit2 = GUICtrlCreateEdit("", 16, 72, 297, 89, BitOR($ES_READONLY,$WS_VSCROLL))
    GUICtrlSetData(-1, StringFormat("-> test"))
    GUICtrlSetResizing(-1, $GUI_DOCKTOP+$GUI_DOCKHEIGHT)
    GUICtrlCreateGroup("", -99, -99, 1, 1)
    $Label1 = GUICtrlCreateLabel("Testlabel", 8, 16, 319, 20)
    GUICtrlSetFont(-1, 10, 800, 0, "MS Sans Serif")
    GUICtrlSetResizing(-1, $GUI_DOCKTOP+$GUI_DOCKHEIGHT)
    $Button1 = GUICtrlCreateButton("v v v v details anzeigen v v v v", 8, 216, 313, 17)
    GUICtrlSetResizing(-1, $GUI_DOCKTOP+$GUI_DOCKHEIGHT)
    $Button2 = GUICtrlCreateButton("Schließen", 128, 176, 75, 25, $BS_DEFPUSHBUTTON)
    GUICtrlSetResizing(-1, $GUI_DOCKTOP+$GUI_DOCKHEIGHT)
    GUISetState(@SW_SHOW)

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

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

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

    Case $Button1
    Local $size = WinGetPos("[active]")
    If $size[3] = 270 then
    GUICtrlSetData($Button1, "^ ^ ^ ^ details schließen ^ ^ ^ ^")
    WinMove($Form1, "", $size[0], $size[1], 335, 490) ;490 / 270
    Else
    GUICtrlSetData($Button1, "v v v v details anzeigen v v v v")
    WinMove($Form1, "", $size[0], $size[1], 335, 270) ;490 / 270
    EndIf

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

    EndSwitch
    WEnd

    [/autoit]

    Aber wie kann ich das smother :) machen? Also so flüssig animiert aufklappen lassen? Also so, dass es schöner ausschaut.
    Auch könnte ich mir es vorstellen, wie es hier im Forum bei den Signaturen so nett ausklappt. Also einfach in einem bestimmten Bereich den Mauszeiger drauf halten.
    Muss halt schön aussehen! Meint ihr könnt mir helfen? Oder gibt es dazu schon was tolles?

    Die Anna :*

    "Wo kämen wir hin, wenn jeder sagte wo kämen wir hin, und niemand ginge, um zu sehen, wohin wir kämen, wenn wir gingen..." :wacko:

    Einmal editiert, zuletzt von AnnaM (10. Oktober 2012 um 16:56)

  • Spoiler anzeigen
    [autoit]

    #include <ButtonConstants.au3>
    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>

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

    Global $f = True
    $Form1 = GUICreate("Form1", 335, 270, -1, -1,$WS_EX_TOOLWINDOW)
    $Group1 = GUICtrlCreateGroup("details", 8, 248, 313, 201)
    GUICtrlSetResizing(-1, $GUI_DOCKTOP+$GUI_DOCKHEIGHT)
    $Edit1 = GUICtrlCreateEdit("", 16, 272, 297, 169, BitOR($GUI_SS_DEFAULT_EDIT,$ES_READONLY))
    GUICtrlSetData(-1, "Edit1")
    GUICtrlSetResizing(-1, $GUI_DOCKTOP+$GUI_DOCKHEIGHT)
    GUICtrlCreateGroup("", -99, -99, 1, 1)
    $Group2 = GUICtrlCreateGroup("altes zeug", 8, 48, 313, 121)
    GUICtrlSetResizing(-1, $GUI_DOCKTOP+$GUI_DOCKHEIGHT)
    $Edit2 = GUICtrlCreateEdit("", 16, 72, 297, 89, BitOR($ES_READONLY,$WS_VSCROLL))
    GUICtrlSetData(-1, StringFormat("-> test"))
    GUICtrlSetResizing(-1, $GUI_DOCKTOP+$GUI_DOCKHEIGHT)
    GUICtrlCreateGroup("", -99, -99, 1, 1)
    $Label1 = GUICtrlCreateLabel("Testlabel", 8, 16, 319, 20)
    GUICtrlSetFont(-1, 10, 800, 0, "MS Sans Serif")
    GUICtrlSetResizing(-1, $GUI_DOCKTOP+$GUI_DOCKHEIGHT)
    $Button1 = GUICtrlCreateButton("v v v v details anzeigen v v v v", 8, 216, 313, 17)
    GUICtrlSetResizing(-1, $GUI_DOCKTOP+$GUI_DOCKHEIGHT)
    $Button2 = GUICtrlCreateButton("Schließen", 128, 176, 75, 25, $BS_DEFPUSHBUTTON)
    GUICtrlSetResizing(-1, $GUI_DOCKTOP+$GUI_DOCKHEIGHT)
    GUISetState(@SW_SHOW)

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

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

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

    Case $Button1
    Local $size = WinGetPos("[active]")
    If $f Then
    GUICtrlSetData($Button1, "^ ^ ^ ^ details schließen ^ ^ ^ ^")
    For $i = 270 To 490 Step 5
    WinMove($Form1, "", $size[0], $size[1], 335, $i) ;490 / 270
    Sleep(1)
    Next
    Else
    GUICtrlSetData($Button1, "v v v v details anzeigen v v v v")
    For $i = 490 To 270 Step - 5
    WinMove($Form1, "", $size[0], $size[1], 335, $i) ;490 / 270
    Sleep(1)
    Next
    EndIf
    $f = Not $f
    EndSwitch
    WEnd

    [/autoit]

    Also ich finds schön... :D
    Die Verwendung des OnEvent-Modes wäre dabei noch angebracht, aber nicht zwingend notwendig.

  • Ohja, das ist echt schön :) Dankesehr.
    Wie sehe das denn aus, wenn ich nur mit der Maus auf einen bestimmten Bereich gehen würde und es dann aufklappt?
    Weil im Moment habe ich ja in meinem Skript folgende Funktion an: Opt("GUIOnEventMode", 1)
    Daher kenne ich das GUICtrlSetOnEvent aber das ist ja nur zum Klicken. WIe schaut es mit move-over oder so aus :)

    Die Anna :*

    "Wo kämen wir hin, wenn jeder sagte wo kämen wir hin, und niemand ginge, um zu sehen, wohin wir kämen, wenn wir gingen..." :wacko:

  • Mauskoordinaten abfangen, mit Fensterkoordinaten in Relation setzten (Oder mit AutoItSetOption die Mauskoordinaten auf Fensterbezogen umstellen) und dann überprüfen, ob die Maus in dem festgelegten Bereich ist.
    Geht aber bestimmt auch simpler mit einem Control und einer Message wie MOUSEOVER, vermute ich mal.

    lg chess

  • Spoiler anzeigen
    [autoit]

    #include <ButtonConstants.au3>
    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>

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

    Opt('GUIOnEventMode', 1)

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

    Global $f = True
    $Form1 = GUICreate("Form1", 335, 270, -1, -1,$WS_EX_TOOLWINDOW)
    $Group1 = GUICtrlCreateGroup("details", 8, 248, 313, 201)
    GUICtrlSetResizing(-1, $GUI_DOCKTOP+$GUI_DOCKHEIGHT)
    $Edit1 = GUICtrlCreateEdit("", 16, 272, 297, 169, BitOR($GUI_SS_DEFAULT_EDIT,$ES_READONLY))
    GUICtrlSetData(-1, "Edit1")
    GUICtrlSetResizing(-1, $GUI_DOCKTOP+$GUI_DOCKHEIGHT)
    GUICtrlCreateGroup("", -99, -99, 1, 1)
    $Group2 = GUICtrlCreateGroup("altes zeug", 8, 48, 313, 121)
    GUICtrlSetResizing(-1, $GUI_DOCKTOP+$GUI_DOCKHEIGHT)
    $Edit2 = GUICtrlCreateEdit("", 16, 72, 297, 89, BitOR($ES_READONLY,$WS_VSCROLL))
    GUICtrlSetData(-1, StringFormat("-> test"))
    GUICtrlSetResizing(-1, $GUI_DOCKTOP+$GUI_DOCKHEIGHT)
    GUICtrlCreateGroup("", -99, -99, 1, 1)
    $Label1 = GUICtrlCreateLabel("Testlabel", 8, 16, 319, 20)
    GUICtrlSetFont(-1, 10, 800, 0, "MS Sans Serif")
    GUICtrlSetResizing(-1, $GUI_DOCKTOP+$GUI_DOCKHEIGHT)
    $Button1 = GUICtrlCreateButton("v v v v details anzeigen v v v v", 8, 216, 313, 17)
    GUICtrlSetResizing(-1, $GUI_DOCKTOP+$GUI_DOCKHEIGHT)
    $Button2 = GUICtrlCreateButton("Schließen", 128, 176, 75, 25, $BS_DEFPUSHBUTTON)
    GUICtrlSetResizing(-1, $GUI_DOCKTOP+$GUI_DOCKHEIGHT)

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

    GUISetOnEvent($GUI_EVENT_CLOSE, '_Exit')
    GUICtrlSetOnEvent($Button2, '_Exit')
    GUISetState(@SW_SHOW)

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

    While 1
    If $f And _MouseOver() Then
    Local $size = WinGetPos("[active]")
    GUICtrlSetData($Button1, "^ ^ ^ ^ details schließen ^ ^ ^ ^")
    For $i = 270 To 490 Step 5
    WinMove($Form1, "", $size[0], $size[1], 335, $i) ;490 / 270
    Sleep(1)
    Next
    $f = Not $f
    ElseIf Not $f And Not _MouseOver() Then
    Local $size = WinGetPos("[active]")
    GUICtrlSetData($Button1, "v v v v details anzeigen v v v v")
    For $i = 490 To 270 Step - 5
    WinMove($Form1, "", $size[0], $size[1], 335, $i) ;490 / 270
    Sleep(1)
    Next
    $f = Not $f
    EndIf
    WEnd

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

    Func _MouseOver()
    Local $aInfo = GUIGetCursorInfo($Form1)
    Return $aInfo[4] = $Button1
    EndFunc

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

    Func _Exit()
    Exit
    EndFunc

    [/autoit]

    Öffnet sich, wenn du über den Anzeigen-Button fährst.
    Sieht beim Schließen aber ziemlich komisch aus... Vielleicht hat hier ja jemand eine Idee dazu.

  • Hallo $var,

    danke für dein schnelles Beispiel. Nur dieses läuft auf jeden Fall nicht sonderlich performant.
    Ich habe eine CPU-Auslastung von über 25% und das bei einem i7 :)

    Die Anna :*

    "Wo kämen wir hin, wenn jeder sagte wo kämen wir hin, und niemand ginge, um zu sehen, wohin wir kämen, wenn wir gingen..." :wacko:

  • Nun muss ich doch noch einen neuen Post setzen :)

    Da mein Programm sich in einer Funktion befindet, greife ich auf die Buttons "im Hintergrund" mittels WM_COMMAND zu:

    Spoiler anzeigen
    [autoit]

    Func WM_COMMAND($hWnd, $nMsg, $wParam, $lParam) ;das klicken auf "buttons"

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

    Local $hButton_stop = GUICtrlGetHandle($btn_stop)
    Local $hButton_pause = GUICtrlGetHandle($btn_pause)

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

    Switch $lParam
    Case $hButton_stop
    $bBreak = true
    Case $hButton_pause
    $bPause = true
    EndSwitch

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

    EndFunc ;==>WM_COMMAND

    [/autoit]

    Ist hier etwas zu beachten, wenn ich z.b. über ein Label gehe?
    Ich denke anders wird das Programm dann nicht reagieren, da es sich ja gerade in einer anderen Funktion befindet.
    ?(

    Die Anna :*

    "Wo kämen wir hin, wenn jeder sagte wo kämen wir hin, und niemand ginge, um zu sehen, wohin wir kämen, wenn wir gingen..." :wacko:

  • Stimmt. Ich komme auch auf unschöne 12%.
    Ein kleines Sleep in der Schleife hilft da natürlich aus:

    Spoiler anzeigen
    [autoit]

    #include <ButtonConstants.au3>
    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>

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

    Opt('GUIOnEventMode', 1)

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

    Global $f = True
    $Form1 = GUICreate("Form1", 335, 270, -1, -1,$WS_EX_TOOLWINDOW)
    $Group1 = GUICtrlCreateGroup("details", 8, 248, 313, 201)
    GUICtrlSetResizing(-1, $GUI_DOCKTOP+$GUI_DOCKHEIGHT)
    $Edit1 = GUICtrlCreateEdit("", 16, 272, 297, 169, BitOR($GUI_SS_DEFAULT_EDIT,$ES_READONLY))
    GUICtrlSetData(-1, "Edit1")
    GUICtrlSetResizing(-1, $GUI_DOCKTOP+$GUI_DOCKHEIGHT)
    GUICtrlCreateGroup("", -99, -99, 1, 1)
    $Group2 = GUICtrlCreateGroup("altes zeug", 8, 48, 313, 121)
    GUICtrlSetResizing(-1, $GUI_DOCKTOP+$GUI_DOCKHEIGHT)
    $Edit2 = GUICtrlCreateEdit("", 16, 72, 297, 89, BitOR($ES_READONLY,$WS_VSCROLL))
    GUICtrlSetData(-1, StringFormat("-> test"))
    GUICtrlSetResizing(-1, $GUI_DOCKTOP+$GUI_DOCKHEIGHT)
    GUICtrlCreateGroup("", -99, -99, 1, 1)
    $Label1 = GUICtrlCreateLabel("Testlabel", 8, 16, 319, 20)
    GUICtrlSetFont(-1, 10, 800, 0, "MS Sans Serif")
    GUICtrlSetResizing(-1, $GUI_DOCKTOP+$GUI_DOCKHEIGHT)
    $Button1 = GUICtrlCreateButton("v v v v details anzeigen v v v v", 8, 216, 313, 17)
    GUICtrlSetResizing(-1, $GUI_DOCKTOP+$GUI_DOCKHEIGHT)
    $Button2 = GUICtrlCreateButton("Schließen", 128, 176, 75, 25, $BS_DEFPUSHBUTTON)
    GUICtrlSetResizing(-1, $GUI_DOCKTOP+$GUI_DOCKHEIGHT)

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

    GUISetOnEvent($GUI_EVENT_CLOSE, '_Exit')
    GUICtrlSetOnEvent($Button2, '_Exit')
    GUISetState(@SW_SHOW)

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

    While Sleep(250)
    If $f And _MouseOver() Then
    Local $size = WinGetPos($Form1)
    GUICtrlSetData($Button1, "^ ^ ^ ^ details schließen ^ ^ ^ ^")
    For $i = 270 To 490 Step 5
    WinMove($Form1, "", $size[0], $size[1], 335, $i) ;490 / 270
    Sleep(1)
    Next
    $f = Not $f
    ElseIf Not $f And Not _MouseOver() Then
    Local $size = WinGetPos($Form1)
    GUICtrlSetData($Button1, "v v v v details anzeigen v v v v")
    For $i = 490 To 270 Step - 5
    WinMove($Form1, "", $size[0], $size[1], 335, $i) ;490 / 270
    Sleep(1)
    Next
    $f = Not $f
    EndIf
    WEnd

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

    Func _MouseOver()
    Local $aInfo = GUIGetCursorInfo($Form1)
    Return $aInfo[4] = $Button1
    EndFunc

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

    Func _Exit()
    Exit
    EndFunc

    [/autoit]

    Habe übrigens noch das "[active]" durch $Form1 ersetzt, da es sonst zu Fehlern führen würde...

  • Hallo Nochmal,

    weiß denn jemand, wie ich dieses mouse-over hinbekomme?
    Weil mit dem WM_COMMAND($hWnd, $nMsg, $wParam, $lParam) kann ich ja nur den Klick abfangen.
    Ich bin mit dem Programm in einer Schleife drin, da ich hier einen Ladebalken anzeige.
    Nun soll der User aber details angezeigt bekommen, wenn er über das gelbe Label "details" geht.
    Somit soll sich die Form verlängern und die Details werden sichtbar.
    Zur not muss ich das natürlich mit dem Klick machen. Aber wenn auch ein mouseover geht, dann ist es besser :)

    Vielen Dank schonmal.

    Die Anna :*

    "Wo kämen wir hin, wenn jeder sagte wo kämen wir hin, und niemand ginge, um zu sehen, wohin wir kämen, wenn wir gingen..." :wacko:

  • ... Aber nicht meine Frage :)
    Weil das WM_COMMAND doch nur Klicks abfängt, oder?

    Die Anna :*

    "Wo kämen wir hin, wenn jeder sagte wo kämen wir hin, und niemand ginge, um zu sehen, wohin wir kämen, wenn wir gingen..." :wacko:

  • Im Übrigen ist deine WM_COMMAND ein wenig fehlerhaft.
    Wie sieht denn dein aktuelles Script aus?

    Und warum nutzt du nicht für die Klicks die OnEvent-Methode?

    Einmal editiert, zuletzt von m-obi (9. Oktober 2012 um 21:14)

  • Hallo Zusammen,

    ich habe es nun hin bekommen mit

    [autoit]

    GUISetOnEvent($GUI_EVENT_MOUSEMOVE, "_GUI_EVENT_MOUSEMOVE")

    [/autoit]


    Ich verwende zu jedem Steuerelement, welches sich nicht verschieben soll folgendes:

    [autoit]

    GUICtrlSetResizing(-1, $GUI_DOCKHEIGHT + $GUI_DOCKBOTTOM)

    [/autoit]

    Aber für die Statusleiste geht es nicht. Sie bleibt nicht unten. Kann das jmd auch nachvollziehen?
    Hier der Code:

    [autoit]

    Global $StatusBar = _GUICtrlStatusBar_Create($hGUI, -1, "", $SBARS_TOOLTIPS)
    GUICtrlSetResizing(-1, $GUI_DOCKSTATEBAR)

    [/autoit]

    Die Anna :*

    "Wo kämen wir hin, wenn jeder sagte wo kämen wir hin, und niemand ginge, um zu sehen, wohin wir kämen, wenn wir gingen..." :wacko:

  • Aber für die Statusleiste geht es nicht. Sie bleibt nicht unten. Kann das jmd auch nachvollziehen?


    Sie ist ja auch kein Standardsteuerelement und mit GUICtrlSetResizing lassen sich nur Standardsteuerelemente beeinflussen. Ich baue aus diesem Grund die Statusbar mit mehreren Inputs ($ES_READONLY) nach, du kannst aber auch auf $GUI_EVENT_RESIZED reagieren und die Statusbar mit ControlMove bzw. WinMove verschieben.


    mfg autoBert

  • Na wenn ich es mit $GUI_EVENT_RESIZED hinbekomme.
    Weil mein WinMove ist ja dank der schleife hübsch animiert :)
    Da schau ich mal und melde mich wieder ^^ Danke für den Tipp

    Die Anna :*

    "Wo kämen wir hin, wenn jeder sagte wo kämen wir hin, und niemand ginge, um zu sehen, wohin wir kämen, wenn wir gingen..." :wacko:

  • Haha, es reicht ein ControlMove("", "", $StatusBar, 0, 0, 0, 0) nach dem WinMove. :D
    Danke für den Tipp.

    Die Anna :*

    "Wo kämen wir hin, wenn jeder sagte wo kämen wir hin, und niemand ginge, um zu sehen, wohin wir kämen, wenn wir gingen..." :wacko: