Problem mit ControlGetPos + WinMove

  • Hallo.

    Ich habe ein Problem, das entfernt Ähnlichkeit mit WinMove zerstört Label von BugFix hat, zumindest kommen beide betreffende Funktionen vor.

    Die Breite eines Labels soll ermittelt werden (ControlGetPos), dann soll die Breite der GUI auf die Breite des Labels gesetzt werden (WinMove). Seltsamerweise wird dabei die Label-Größe verändert und die GUI immer kleiner und kleiner.

    Hat jemand eine Erklärung dafür?

    Demo hier und im Anhang.

    Bernd.

  • GUICtrlCreateLabel ...
    "Default resizing is $GUI_DOCKAUTO size and position will occur."

    Label-Größe ändert sich mit Fenstergröße.

    Versuch mal:
    GUICtrlSetResizing($idLabel_Main, $GUI_DOCKSIZE)

    Paul

  • Zum Fenster gehört auch der Rahmen, die Titelleiste,... Wenn du also das Fenster auf die Labelgröße setzt, wird das Label angepasst, damit es trotzdem weiterhin in das Fenster passt.

    Du kannst das resizen des labels deaktivieren, wie paul_p_meier bereits vorgeschlagen hat, dabei wird aber dann ein Teil des labels abgeschnitten.

    Deshalb würde ich empfehlen, dass du der Fenstergröße den Clientbereich des Fensters abziehst und den unterschied dann beim resizen des Fensters mit einberechnest (Ich weiß den Befehl fürs abfragen des Clientbereichs grad nicht auswendig, sollte in der WinAPi sein...).

    MfG Kanashius

  • WinGetClientSize oder _WinAPI_GetEffectiveClientRect (ungeprüft ;))

    86598-musashi-c64-png

    "Am Anfang wurde das Universum erschaffen. Das machte viele Leute sehr wütend und wurde allenthalben als Schritt in die falsche Richtung angesehen."

  • Ich weiß den Befehl fürs abfragen des Clientbereichs grad nicht auswendig, sollte in der WinAPi sein...

    Da sollte doch das native WinGetClientSize genügen,. Ich kann bei der Breite keine Differenz zu der Breite von WinGetPos feststellen, so daß ich zu folgendener Lösung komme:

    mfg (auto)Bert

  • Echt genial! :thumbup:

    Zuerst noch eine Kleinigkeit: autoBert in Zeile 56 hast du + und - vertauscht. :D

    Voll dickes Lob an alle! Ziel erreicht: Ein Erklärung gefunden, für das beschriebene Verhalten von GUI und Label, und eine Lösung dazu =:thumbup::thumbup:

    Wow, das hatte ich schon seit ewiger Zeit nicht mehr: Eine Lösung, bei der man einfach einen Schalter setzt, und fertig. 8|

    Die Frage war, ob jemand eine Erklärung hat. Das wurde schon in der ersten Antwort gepostet, von paul_p_meier: Standardeinstellung $GUI_DOCKAUTO.

    Auch die anderen Infos sind sehr hilfreich!

    Hier die echte Aufgabenstellung in Worten.

    - Controls werden im Fenster verschoben und in der Größe verändert.

    - Dann wird die Breite der GUI an die des breitesten Labels angepasst.

    - Dabei soll sich kein Control in Größe oder Position ändern - alle sollen bleiben wie und wo sie sind!

    Ziel erreicht: Die passende Einstellung ist "$GUI_DOCKALL"! :party:

    Funktion GUICtrlSetResizing

    $GUI_DOCKALL802(2+32+256+512) das Control verschiebt sich durch die Größenänderung nicht.

    Gibt es eine generelle Einstellung, z. B. für die GUI, damit ich GUICtrlSetResizing nicht für jedes Control einzeln ausführen muss?

    Bernd.

    Wenn jemand sagt: "Das geht nicht!" Denke daran: Das sind seine Grenzen, nicht deine.