!! Bildschirm !!

  • Hallo liebes Forum,

    hab da eine ganz "doofe" Frage. Also ich habe mit AutoIT ein Programm geschrieben für einen Kollegen. Dieses Programm wurde an einem 17" Monitor programmiert. Hab mir echt Mühe mit der GUI und allem gegeben und hat auch super funktioniert. Nun, nachdem ich das Programm meinem Kollegen übergeben hatte die große Überraschung. Sein Laptop hat einen Widescreen und hier sind Teile der GUI nicht aufgelistet. Ich hoffe ihr versteht meine Problematik. Da ja bei z.B.: "Buttons" angegeben werden muß wie weit von links und wie weit von oben der "Button" gesetzt werden soll.

    Bitte um Ratschläge um das zu verhindern.

    Lg Jogi ?(

  • ^^ Ich kenne das Probelm, hatte das gleiche ;)
    Ich denke das hier wird dir helfen:

    [autoit]

    GUICreate("GUI", @DesktopWidth, @DesktopHeight, 0, 0)

    [/autoit]


    Nun ist die GUI genau so groß wie der Bildschirm. Wenn du die Taskleiste noch abgezogen haben willst, lass AutoIt ruhig rechnen:

    [autoit]

    GUICreate("GUI", @DesktopWidth, @DesktopHeight - $Hoehe_der_Taskleiste, 0, 0)

    [/autoit]


    Ich hoffe das wars.

    mfg
    hauke96

  • Es gibt ja auch spezielle GUI Styles und resize settings. Ohne sein Script ist es aber sinnfrei da näher darauf einzugehen. Die GUI grundsätzlich im Vollbild zu erstellen ist jedenfalls kaum eine Lösung, die Controls müssen ebenfalls dynamisch anhand der Fenstergröße positioniert und ggf in der Größe angepasst werden. Um sowas aus dem Weg zugehen kann man die GUI auch von anfang an auf eine weitverbreitete und kompatible Auflösung fest setzen. eine maximale Fenstergeröße von 800x600 sollte jedenfalls auf allen heute verbreiteten Monitoren noch darstellbar sein. Alles darüber kann problematisch werden, da sollte man dann über dynamisch anpassende GUI's nachdenken.

  • Sagt mal gibt es eigentlich ne Möglichkeit dass sich beim Verändern der Größe des Hauptfensters (GUI) in der Gui befindliche Buttons mitverschieben??

    Also vereinfacht gesacht: GUI mit 320 * 320 mm angefertigt, genau in der Mitte nen OK Button platziert.

    Wenn ich das GUI Fenster jetzt auf 678*749 "aufziehe" soll der OK Button in der Mitte dieser neuen GUI wandern.

    Hoffe ist verständlich ?(

  • Hier ein Beispiel wie man einzelne controls entsprechend relativ fixieren kann. Grundsätzlich kann man aber auch mit der Option "guiresizemode" das Defaultverhalten für alle controls festsetzen/ändern.

    [autoit]


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

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

    $Form1 = GUICreate("Form1", 600, 425, -1, -1,$WS_SIZEBOX + $WS_MINIMIZEBOX + $WS_MAXIMIZEBOX )

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

    $Button1 = GUICtrlCreateButton("Button1", 250, 0, 100, 140)
    $Button2 = GUICtrlCreateButton("Button2", 250, 180, 100, 40)
    $Button3 = GUICtrlCreateButton("Button3", 250, 260, 100, 140)
    $Button4 = GUICtrlCreateButton("Button4", 20, 180, 100, 40)
    $Button5 = GUICtrlCreateButton("Button5", 480, 180, 100, 40)

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

    GUICtrlSetResizing($Button1, $GUI_DOCKHCENTER + $GUI_DOCKVCENTER)
    GUICtrlSetResizing($Button2, $GUI_DOCKHCENTER + $GUI_DOCKVCENTER + $GUI_DOCKSIZE)
    GUICtrlSetResizing($Button3, $GUI_DOCKHCENTER + $GUI_DOCKVCENTER)
    GUICtrlSetResizing($Button4, $GUI_DOCKLEFT + $GUI_DOCKWIDTH)
    GUICtrlSetResizing($Button5, $GUI_DOCKRIGHT + $GUI_DOCKHEIGHT)

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

    GUISetState(@SW_SHOW)

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

    While 1
    if GUIGetMsg() = $GUI_EVENT_CLOSE then Exit
    WEnd

    [/autoit]
  • Es gibt kein Script :P Ist noch Kopfsache.

    Aber im Thread Nr. 6 ist ein Beispiel. Nehmen wir an dass ist mein Programm.

    Das sieht schon sehr danach aus, bis auf paar Fragen:



    • Wenn ich das Fenster vergrößere, wird der mittlere Button irgendwie kleiner. Geht das irgendwie verhindern? Ich meine dass die Buttons dennoch eine fixe programmierte Größe haben und beim vergrößern der HauptGUI nur irgendwie eine Zentrierung stattfindet. Beispiel sind die Buttons links und rechts im oben genannten Thread. Die haben trotz vergrößern und verkleinern immer einen fix definierten Abstand zum Rand der HauptGUI, sollen aber die Größe nicht verändern



    • Das oben genannte Beispiel die zweite: man kann die GUI ganz zusammenziehen (verkleinern). Was kann man machen dass ich die GUI nicht komplett verkleinern kann sondern, sagen wir mal salopp, das verkleinern der GUI aufhört wenn die GUI eine Größe von 40x40 hat.

    Ich hoffe ihr versteht meine "AutoITProblematisch-Sprache" ;)

    und wie gesagt dass ganze Ding dreht sich momentan noch in meinem Kopf, es gibt kein Script..

  • Sag mal willst du uns auf den Arm nehmen? Wenn du es schon nicht fertig bringst selbst mal rumzuprobieren und dir deine eigene Testgui zu bauen, dann schau dir wenigstens den Quellcode an den man dir hier auf dem Silbertablett serviert hat. Ein !! Blick in die Hilfe !! zum verwendeten Befehl

    [autoit]

    GUICtrlSetResizing

    [/autoit]


    reicht völlig um Frage 1 zu beantworten. Man müsste noch nichtmal in die Hilfe schauen, denn Button2 in der GUI Mitte aus meinem Beispielscript macht genau das was du wolltest. Er bleibt in der Mitte und er verändert seine Größe nicht (im Gegensatz zu den anderen Buttons...).

    Was Frage 2 angeht: Lies die Hilfe zu folgenden Funktionen und teste selbst...

    [autoit]

    wingetpos
    winmove

    [/autoit]

    2 Mal editiert, zuletzt von misterspeed (24. April 2014 um 20:51)

  • Ja ich konnte gestern gar nicht schlafen. Liege nachts stundenlang wach und denk mir dabei immer wie ich die Nerds aus dem AutoIT Forum verarschen kann. Was geht den mit dir ab?

    Es hat Gründe warum ich hier keinen Quellcode veröffentliche. Einer davon wäre dass es von einem Smartphone ziemlich ungeschickt ist die kleinen Buttons zu drücken. Der zweite wäre dass das File zuhause am PC gespeichert ist, ich aber beruflich unterwegs bin.

    Und da ich google wie ein wahnsinniger, jedoch keine sinnvollen Antworten erhalte so habe ich hier einen Uraltthtead von mir selber ausgegraben. Da gings damals um ein anderes Problem.

    Und zu allerletzt. Komischerweise macht der Button in der Mitte genau NICHT das was ich will. Auf einem Testrechner den ich gestern von nem Kunden hatte ist beim auseinanderziehen der GUI der mittlere Button kleiner geworden. Ergo hat er seine Grösse nicht behalten. Lesen! Steht sogar schon geschrieben.

    So und nun muss ich leider. Neue sauereien ausdenken um auch andere hier im Forum zu verarschen.
    IRONIE AUS ^^

  • Eigentlich sollte ich ja nix mehr schreiben, da ich nicht glaube, dass es irgendwas ändert, aber da du nachwievor behauptest der zentrale Button würde seine Größe ändern hier der Gegenbeweis:


    [autoit]


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

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

    $Form1 = GUICreate("Form1", 600, 425, -1, -1,$WS_SIZEBOX + $WS_MINIMIZEBOX + $WS_MAXIMIZEBOX )

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

    Global $Button[6]

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

    $Button[1] = GUICtrlCreateButton("Button1", 250, 0, 100, 140)
    $Button[2] = GUICtrlCreateButton("Button2", 250, 180, 100, 40)
    $Button[3] = GUICtrlCreateButton("Button3", 250, 260, 100, 140)
    $Button[4] = GUICtrlCreateButton("Button4", 20, 180, 100, 40)
    $Button[5] = GUICtrlCreateButton("Button5", 480, 180, 100, 40)

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

    GUICtrlSetResizing($Button[1], $GUI_DOCKHCENTER + $GUI_DOCKVCENTER)
    GUICtrlSetResizing($Button[2], $GUI_DOCKHCENTER + $GUI_DOCKVCENTER + $GUI_DOCKSIZE)
    GUICtrlSetResizing($Button[3], $GUI_DOCKHCENTER + $GUI_DOCKVCENTER)
    GUICtrlSetResizing($Button[4], $GUI_DOCKLEFT + $GUI_DOCKWIDTH)
    GUICtrlSetResizing($Button[5], $GUI_DOCKRIGHT + $GUI_DOCKHEIGHT)

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

    GUISetState(@SW_SHOW)

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

    $timer = TimerInit()
    While 1
    if GUIGetMsg() = $GUI_EVENT_CLOSE then Exit
    if TimerDiff($timer) > 1000 Then
    For $i = 1 to UBound($Button)-1
    $aPos = ControlGetPos($Form1,"",$Button[$i])
    GUICtrlSetData($Button[$i],$aPos[2] & "x" & $aPos[3])
    Next
    $timer = TimerInit()
    EndIf
    WEnd

    [/autoit]

    Du magst vielleicht einen anderen Eindruck gehabt haben, aber das war dann wenn überhaupt nur eine optische Täuschung bedingt durch die VERGRÖSSERUNG der oberen und unteren Buttons. Wie dem auch sei lies die Dokumentation in der Hilfe und teste selbst, das bringt dir mehr als "wahnsinnig" rumzugooglen und hier im Forum zu demonstrieren, dass du nicht nur keine Ahnung hast, sondern auch noch postest bevor du dich selbst ausreichend mit den Antworten beschäftigt hast.

    In diesem Sinne schließe ich mit einem Zitat, das du dir selbst am ehesten zu Herzen nehmen solltest:

    Lesen! Steht sogar schon geschrieben.

    Einmal editiert, zuletzt von misterspeed (25. April 2014 um 10:10)

  • Nochmal: Ich bin die ganze Woche beruflich unterwegs und will mir das am Wochenende zuhause in aller Ruhe zusammenbasteln. Wollte mir hier Infos einholen damit ich nicht am Wochenende "tüfteln" muss und gleich beginnen kann.

    Trotz aller Differenzen nochmals DANKE an alle!

  • Um da etwas den Wind aus den Segeln zu nehmen:
    Das Problem ist, dass wir dir ohne ein Script nur Vermutungen oder allgemeine Lösungswege liefern können.
    Ich denke nicht, dass die anderen das jetzt speziell böse gemeint haben, aber ohne einen Ansatz wie DU programmierst zu sehen, können wir dir nur begrenzt helfen.

    Übrigends sind auch am Wochenende viele helfende Hände online (würde sogar sagen MEHR als unter der Woche). Du müsstest dann also bestimmt auch nicht alleine tüfteln wenn du Probleme hast ;)

    Bild1: Ich beim debuggen

  • Was kann man machen dass ich die GUI nicht komplett verkleinern kann sondern, sagen wir mal salopp, das verkleinern der GUI aufhört wenn die GUI eine Größe von 40x40 hat?

    Mir ist klar dass es Befehle gibt mit denen man die Größe des Fensters abfragen kann. Aber was dann?

    • Offizieller Beitrag

    Hier mal ein Beispiel:

    Spoiler anzeigen
    [autoit]


    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    Opt('GUIOnEventMode', 1)

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

    Global $hGUI = GUICreate('Test', 600, 600, -1, -1, BitOR($WS_MINIMIZEBOX, $WS_CAPTION, $WS_POPUP, $WS_SYSMENU, $WS_SIZEBOX))
    GUISetOnEvent($GUI_EVENT_CLOSE, '_End')

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

    GUISetState()
    GUIRegisterMsg($WM_GETMINMAXINFO, "MY_WM_GETMINMAXINFO")

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

    While True
    Sleep(100)
    WEnd

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

    Func _End()
    Exit
    EndFunc ;==>_End

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

    Func MY_WM_GETMINMAXINFO($hWnd, $msg, $wParam, $lParam)
    If $hWnd = $hGUI Then
    Local $minmaxinfo = DllStructCreate("int;int;int;int;int;int;int;int;int;int", $lParam)
    DllStructSetData($minmaxinfo, 7, 200) ; min X
    DllStructSetData($minmaxinfo, 8, 200) ; min Y
    DllStructSetData($minmaxinfo, 9, 800) ; max X
    DllStructSetData($minmaxinfo, 10, 800) ; max Y
    EndIf
    EndFunc ;==>MY_WM_GETMINMAXINFO

    [/autoit]