Ereignisbehandlung bei Änderung der Anzahl der Monitore



  • Hallo zusammen,

    folgende Situation:
    nehmen wir an, ich habe 2 Monitore angeschlossen. Auf dem Hauptbildschirm wird meine MainForm dargestellt und ein weiteres Fenster schiebe ich auf den 2.Monitor maximiert und mit einem BorderStyle None. Das Problem, wenn jetzt der Bildschirm auf dem das 2. Fenster dargestellt wird, abgezogen wird, wird das Fenster auf dem Hauptbildschirm dargestellt. Natürlich maximiert und ohne Titelleiste. Das ist für den Benutzer natürlich doof, weil er so nix mehr steuern kann (abgesehn mit alt+f4 das Fenster schließen).

    Gibt es ein Ereignis oder sonst ne Möglichkeit auf die Änderung der Monitoranzahl zu reagieren? Klar könnte man das sicherlich über nen Timer lösen, der das ständig prüft, das find ich aber unschön und kostet ja auch zu viel.
    Ausprobiert hatte ich bisher über die Ereignisse OnPaint und OnResize ne Funktion aufzurufen, die entsprechend prüft auf welchem Monitor die Form gerade dargestellt wird und falls es auf dem Hauptmonitor ist, entsprechend zu reagieren. Nur funktioniert das leider nicht immer, da diese Ereginisse anscheinend nicht immer ausgelöst werden, wenn der Monitor abgezogen wird und das Fenster dadurch von Windows verschoben wird.



  • WM_DISPLAYCHANGE und EnumDisplayMonitors sollten dich zum Ziel fuehren.

    Edit: Ich habe von VCL/Delphi/Embarcadero rotz keine ahnung, aber es wuerde mich stark wundern, wenn es dafuer kein native event geben wuerde...



  • Danke, schau ich mir gleich mal an 🙂



  • @drummi siehe mein edit.



  • Von dem "Rotz" möchte ich in Zukunft auch gerne weg, Emba haut da immer Sachen raus, bei denen man stundenlang nach komischen fehlern suchen kann und dabei wars nur nen compiler bug o.ä.... aber dazu muss ich mir erst mal weiter vs studio und qt oder wx angucken.

    Aber vielleicht kennt jmd ja, der da besser drin steckt, nen Event dafür in der VCL ? ich hab bisher nix passendes gefunden 😕

    EDIT: die WM_DISPLAYCHANGE Message scheint ja immer bei ner Auflösungsänderung aufzutreten. Da gibts glaub ich tatsächlich nen Event für in der VCL. Hätte nur nicht daran gedacht, da sich ja eigtl nicht die Auflösung eines Bildschirms ändert, sondern nen ganzer Bildschirm wegfällt. Aber ich probiers mal



  • Du wirst in der IT immer fluchen... Wir hab schon sooo viele Bugs in Qt gefunden/fixen müssen. Und über Compiler Bugs in VS sind wir auch schon gestolpert, so extrem selten sind die gar nicht mehr.


Anmelden zum Antworten