Fenster Größe veränderbar - Minimum nicht unterschreiten

Statement zur DSGVO im Forum

Alles zur DSGVO und zur Umsetzung im Forum hier: Statement zur DSGVO (letztes Update: 30.05.2018)
  • Ich habe ein Formulareingabefenster, und möchte eine Größenänderung durch den User zulassen.

    Minimale Werte für die Fenstergröße sind vorgegeben.

    Die Größe des Fensters wird auch eingehalten. Wenn ich jedoch den rechten Rand/ die rechte untere Ecke zum Ziehen benutze, bleibt der Fensterrand am Minimum stehen, aber die Controls lassen sich beim weiter ziehen verkleinern, trotz Dock am rechten Fensterrand.

    Hat jemand einen Tipp, wie das unterbunden werden kann?

  • Du musst WM_GETMINMAXINFO dafür verwenden, dann kannst du es auch nicht kleiner ziehen:

  • Du musst WM_GETMINMAXINFO dafür verwenden, dann kannst du es auch nicht kleiner ziehen:

    Danke, das wars.


    Aber die Funktion wird ja nur aufgerufen, wenn für das registrierte Fenster die Nachricht auftritt.

    So reicht es völlig:

    Code
    1. Func _WM_GETMINMAXINFO($hWnd, $iMsg, $wParam, $lParam)
    2. $tInfo = DllStructCreate("int;int;int;int;int;int;int;int;int;int", $lParam)
    3. DllStructSetData($tInfo, 7, $aMinSize[0] + 2 * 8)
    4. DllStructSetData($tInfo, 8, $aMinSize[1] + 2 * 19)
    5. Return $GUI_RUNDEFMSG
    6. EndFunc
  • Aber die Funktion wird ja nur aufgerufen, wenn für das registrierte Fenster die Nachricht auftritt.

    AutoIt kann (meines Wissens nach) nicht die GUIs der Nachrichten bei der Registration unterscheiden.

    Wenn du da kein Switch $hWnd hast, dann werden alle anderen Fenster diese Größe nicht unterschreiten können.


    Deshalb existiert der $hWnd Parameter ja, der sagt dir welches Fenster die Nachricht bekommen hat.

    Wenn man für jedes Fenster einzeln Nachrichten registrieren könnte wäre das ziemlich schick, funktioniert aber glaube ich nicht.


    Hier sind beide Fenster begrenzt:


    hier nur eins:

  • Das funktioniert schon, lediglich GUIRegisterMsg kann das nicht. Man kann das erreichen, indem man die WndProc des Fensters mit einer eigenen ersetzt. Das geht mit SetWindowLong aus der Win32-API. Das ist auch das Mittel der Wahl in UDFs, weil man es beliebig oft verwenden kann, ohne dass es Konflikte gibt. GUIRegisterMsg lässt ja nur einen Handler pro Nachricht zu.