GUI wie Programmfenster ausführen

  • Hi, ich habe letztes Jahrt ein Programm geschrieben, das mich bei meinen Fahrzeugen an nötige Wartungen erinnert, und in dem ich alle Reparaturen für ein späteres Wartungsprotokoll erfassen kann. Jetzt möchte ich da ein paar Funktionen ergänzen und die ganze optik etwas überarbeiten.

    Gibt es eine Möglichkeit, eine GUI wie ein Programmfenster auszuführen, also Bildschirmfüllend über den Maximieren-Button? Die GUI´s, die ich bis jetzt immer erstellt habe, sind nur Fenster in bestimmten Größen und der Button zum maximieren (der mittlere) ist immer Ausgegraut.

    Ich hoffe, ihr versteht was ich meine und könnt mit weiter helfen :D

    Einmal editiert, zuletzt von Mistil (27. Juni 2016 um 11:34)

    • Offizieller Beitrag

    Schau dir die Hilfe zu GUICreate an, speziell den Teil, wo die Styles erklärt werden ;)
    Ich bin sicher das dort steht, was du suchst.
    PS: Den gesuchten Style könnte ich dir jetzt vorkauen, aber da lernst du nichts draus. Hilfe lesen bildet.

  • Also das ging jetzt mal echt schnell und es ist mir echt peinlich, dass ich das nicht gesehen habe.

    Du meinst $WS_MAXIMIZEBOX + $WS_MINIMIZEBOX, richtig? Ich hatte irgendwie etwas "komplizierteres" gesucht 8|

    Vielen Dank, dass du mich da nochmal mit nachdruck drauf gestoßen hast.

  • Wenn du noch $WS_SIZEBOX dazunimmst hast du auch die Pfeile am Rand zum ändern der Größe.
    Du solltest dann aber auch bei den Controls
    GUICtrlSetResizing ( controlID, resizing )
    passend setzen, damit dort nur das passiert, was du willst.
    Ich berechne meist sogar alle Controlpositionen anhand der Größe und Höhe der Gui, sodass ich bei dem Resize-Event eine Funktion aufrufe, die dann die Controls passend setzt. Ist recht viel Overhead, dafür hat man die absolute Kontrolle :love:

    Beispiel:

    Edit: Selbst produzierten Bug beheben :D

  • GuiSetResizing mit den gewünschten werten, mehr wird (zumindest für dieses Beispiel) nicht benötigt:

  • Vielen Dank an alle, es hat super funktioniert. Ist zwar etwas umständlich, immer wieder alle Controls neu an zu passen (muss ich ja für alles ein Handle vergeben) aber das passt schon. GuiSetResizing geht leider nicht, weil sonst Linien in der gui nicht nur Verlängert, sondern auch in die breite gezogen werden.

    Allerdings bin ich auf noch ein weiteres Problem gestoßen. da es bestimmt ähnlich leicht gelöst werden kann und zu dem gleichen Projekt gehört, schreibe ich das hier mit rein.

    Ich muss von einem Bild (noch nicht in eine GUI eingebunden) die Breite und Höhe bestimmen. Das habe ich mit gdiPlus versucht, aber leider schaffe ich es nicht das Bild mittels _GDIPlus_ImageLoadFromFile zu laden. Ich bekomme immer 0 zurück.

    AutoIt
    #include <GDIPlus.au3>
    #include <array.au3>
    
    
    Global $img=@ScriptDir & "\HMB.bmp"
    _ArrayDisplay(_GDIPlus_ImageGetDimension(_GDIPlus_ImageLoadFromFile($img)))
    MsgBox(0, "", _GDIPlus_ImageLoadFromFile($img))
    Exit

    Ich habe echt keine Ahnung, wo der Fehler liegt. Gibt es evtl. auch eine andere Möglichkeit?

  • Vielen Dank an alle, es hat super funktioniert. Ist zwar etwas umständlich, immer wieder alle Controls neu an zu passen (muss ich ja für alles ein Handle vergeben) aber das passt schon. GuiSetResizing geht leider nicht, weil sonst Linien in der gui nicht nur Verlängert, sondern auch in die breite gezogen werden.

    Allerdings bin ich auf noch ein weiteres Problem gestoßen. da es bestimmt ähnlich leicht gelöst werden kann und zu dem gleichen Projekt gehört, schreibe ich das hier mit rein.

    Ich muss von einem Bild (noch nicht in eine GUI eingebunden) die Breite und Höhe bestimmen. Das habe ich mit gdiPlus versucht, aber leider schaffe ich es nicht das Bild mittels _GDIPlus_ImageLoadFromFile zu laden. Ich bekomme immer 0 zurück.

    AutoIt
    #include <GDIPlus.au3>
    #include <array.au3>
    
    
    Global $img=@ScriptDir & "\HMB.bmp"
    _ArrayDisplay(_GDIPlus_ImageGetDimension(_GDIPlus_ImageLoadFromFile($img)))
    MsgBox(0, "", _GDIPlus_ImageLoadFromFile($img))
    Exit

    Ich habe echt keine Ahnung, wo der Fehler liegt. Gibt es evtl. auch eine andere Möglichkeit?

    Hallo Mistil,

    du hast vergessen die GDI+ Library zu initialisieren ;)

  • It works, It works :part:

    Dankeschön. Das ist ein Tipp, der sich in der Hilfe bei den GDI+ Funktionen auch gut machen würde :D Es steht zwar im Beispielcode dabei, aber auf den ersten Blick ist ja nicht zu sehen, dass es unbedingt nötig ist.

    Was mich jetzt noch interessieren würde ist, wozu dient das Initialisieren?

    Übrigens, ist es möglich, den von einer Variable (oder besser noch von einem Array) belegten Speicher während der Laufzeit an zu zeigen?

    • Offizieller Beitrag

    Was mich jetzt noch interessieren würde ist, wozu dient das Initialisieren?

    Dabei wird die GDI+ Dll geöffnet und das 'Handle' in einer Globalen Variablen hinterlegt. Auf diese Variable greifen alle Funktionen der UDF zu um nicht jedes mal einen neuen Dll-Call zu machen.

  • Mist. Hatte Dockwidth vergessen. Geht also.

    So passt es: