![]() |
Anzahl Monitore ermitteln (Anwendung verschwindet bzw. nicht
Anzahl Monitore ermitteln (Anwendung verschwindet bzw. nicht Sichtbar)
__________________________________________________ _______________________ Hallo Programmierer… :???: Gleich habe ich zwei Probleme die, wie ich meine, zusammengehören… Es handelt sich um eine ganz einfache Anwendung, die ganz normal unter Windows XP läuft. Manche Benutzer, die diese Anwendung bedienen, benutzen dazu 2 Monitore. Da es verschieden Konstellationen für Benutzung von mehreren Monitoren gibt ist das für meine Anwendung nicht von Interesse. Meine Anwendung SPEICHERT, beim Schlissen, die letzte Position des Formulars auf dem Bildschirm. So weit so gut… Was allerdings sehr ärgerlich ist, ist die Tatsache, dass, wenn ein Benutzer mit zwei Monitoren die Anwendung schlisst und das Programm war zuletzt nur auf dem zweitem Monitor sichtbar, passiert folgendes: Sobald er jetzt NUR mit einem Monitor die Anwendung startet, hat er keine Chance die Anwendung zu sehen… :shock: Leider weiß ich nicht wie ich diesen Fehler beseitigen sollte…, ich meine aber, dass man zwei Sachen dazu braucht: 1.) Die Anzahl der aktuellen aktiven Monitore ermitteln. 2.) Die Anzeige nur auf einem Monitor erzwingen Für Hinweise (vor allem Delphi-Source- Hinweise) wäre ich sehr DANKBAR Paul Jr. |
Re: Anzahl Monitore ermitteln (Anwendung verschwindet bzw. n
Schau dir mal die TScreen-Klasse an. Dort kannst du die Monitore abfragen.
Wenn es das Hauptfenster ist: Windows merkt sich (jedenfalls bis XP) die letzte Position dieses Hauptfensters. |
Re: Anzahl Monitore ermitteln (Anwendung verschwindet bzw. n
1. Ist relativ simpel: Screen.MonitorCount
2. Damit und mit Screen.Monitors[i].WorkAreaRect (Die Arbeitsbereiche der einzelnen Monitore) kannst du überprüfen, ob dein Fenster überhaupt/teilweise/vollständig sichtbar ist. // Zu spät :? |
Re: Anzahl Monitore ermitteln (Anwendung verschwindet bzw. n
Schau dir mal
![]() ![]() Und zu dem Formproblem: ![]() ![]() Ansonsten für die Überschneidungen: ![]() |
Re: Anzahl Monitore ermitteln (Anwendung verschwindet bzw. n
Wenn ein Anwender mit zwei Monitoren eine Anwendung auf den zweiten Monitor verschiebt und dann den zweiten Monitor abschaltet und die Anwendung nicht auf dem primären Monitor sieht, ist er genau genommen selbst schuld. Bei einer korrekt programmierten Anwendung ist die Abhilfe: Rechtsklick auf den Taskbareintrag, Verschieben, und dann das Fenster mit der Tastatur wieder ins Bild ziehen. Das nur mal am Rande, falls du so einer Situation in freier Wildbahn gegenüber stehst, und als Antwort auf die Behauptung, der Benutzer hätte keine Chance, das Fenster zu sehen.
Aber: Löblich, dass du dich um solche Dinge kümmerst. Es ist natürlich immer eine Hilfe für den Benutzer, besonders wenn er unterschiedliche Auflösungen einsetzt, wenn ein Programm selbst dafür sorgt, immer sichtbar zu sein. :thumb: |
Re: Anzahl Monitore ermitteln (Anwendung verschwindet bzw. n
Hallo
Einfacher Vorschlag:
Delphi-Quellcode:
if (MyMainForm.Left>Screen.Width) then
begin MyMainForm.Left := 100; end; |
Re: Anzahl Monitore ermitteln (Anwendung verschwindet bzw. n
Hallo Programmierer :-D
DANKE , DANKE, DANKE !!! für ALLE Antworten! Damit komme ich schon zu Recht. Sieht recht einfach aus… :idea: Viele Grüße und weiter viel Erfolg wünscht Euch Paul Jr. _____________________________________________ Hallo OregonGhost, Natürlich im Prinzip hast Du Recht. Leider habe ich mich etwas zu sparsam ausgedrückt. Der Anwender nimmt z.B. seinen Rechner nach Hause und dort hat er NUR ein Monitor zu Verfügung. Und ganz allgemein: Für mich ist ein Anwender in 99,9% allen Fällen NIE Schuld… Allerdings in dem, durch Dich beschriebenem Fall ist er nicht Schuld sondern Blöd… :wall: Viele Grüße Paul Jr. |
Re: Anzahl Monitore ermitteln (Anwendung verschwindet bzw. n
Hehe, und wenn der Anwender dann wieder zur Arbeit geht und das Programm öffnet, startet es auf dem Primärmonitor. Und der Anwender ärgert sich darüber.
Man könnte für den Fall, dass es keinen zweiten Monitor gibt, die Anwendung verschieben und eine Nachricht anzeigen. Jedoch wird diese Nachricht nur von 20% der Menschen gelesen und von 40% auch verstanden. Die beste und aufwendigste Lösung wäre hier, dass man sich für verschiedene Anzahl von Monitoren die Position einzeln merkt. Je nachdem wieviele Monitore derzeit aktiv sind, wird die Anwendung eben auf die gespeicherte Position gesetzt. |
Re: Anzahl Monitore ermitteln (Anwendung verschwindet bzw. n
Zu peschais Vorschlag: Unbedingt daran denken, dass die linke obere Ecke des primären Monitors immer (0, 0) ist. Ein zweiter Monitor kann also auch negative Koordinaten haben. Im Endeffekt ist es vermutlich das "sicherste", für den Fall, dass das Fenster nicht sichtbar ist, es auf den primären Monitor zu verschieben.
Was nun das Schuldsein angeht, wie gesagt, auch wenn das Fenster außerhalb des Bildschirms ist, kann man es ja per Systemmenü wieder heranholen und dann stellt sich eben die Frage, ob man jeden erdenklichen Fall, der auftreten kann, auch abfangen muss. Die gegebenenfalls anzuzeigende Nachricht betreffend, wie schon bemerkt, sind Nachrichten immer schlecht, wenn sie nicht absolut notwendig sind. Vermutlich ist eine einfache Prüfung, ob das Hauptfenster wenigstens teilweise sichtbar ist, und gegebenenfalls Verschieben auf den primären Monitor, die beste Lösung, wenn man nicht zu viel Aufwand treiben will. Wenn du sowas wie Positionen-Speichern für jede Auflösung und jede Monitorkombination implementierst, dann ist das erstens ein Feature, was nur einer verschwindend geringen Nutzerzahl zu gute kommt, und zweitens kannst du es dann ja als Komponente in der DP zur Verfügung stellen :mrgreen: |
Re: Anzahl Monitore ermitteln (Anwendung verschwindet bzw. n
Zitat:
Dazu muss man in der Taskleiste die rechte Maustaste auf die Anwendung klicken und "Verschieben" anklicken. Dann muss man eine Cursortaste drücken, um mit der Maus das Fenster verschieben zu können, ohne auf die Titelleiste klicken zu müssen. |
Re: Anzahl Monitore ermitteln (Anwendung verschwindet bzw. n
Ohne Zweifel ist das nicht wirklich intuitiv. Leider nicht zu ändern. Trotzdem ist es eine Möglichkeit, das Fenster wiederzubekommen.
Aber das heißt ja wie gesagt nicht, dass man es dem Benutzer nicht auch noch viel einfacher machen kann :) Dabei muss man aber sehr vorsichtig sein, denn ein Fehler an dieser Stelle führt wieder zum ursprünglichen Problem bei bestimmten Konstellationen. Edit: Nanu, gar kein roter Kasten. War wohl einigermaßen gleichzeitig. Ist auch ne Möglichkeit, das seinen Benutzern einfach zur Verfügung zu stellen (nur nicht vergessen, das dann auch zu erwähnen *g*). |
Re: Anzahl Monitore ermitteln (Anwendung verschwindet bzw. n
Zitat:
Gewöhnten sich die Anwender echt schnell drann :-) |
Re: Anzahl Monitore ermitteln (Anwendung verschwindet bzw. n
Zitat:
|
Re: Anzahl Monitore ermitteln (Anwendung verschwindet bzw. n
Hallo Programmierer, :???:
nun, die Lösung die ich schon, aufgrund der freundlichen Hinweise die ich hier bekommen habe, angestrebt habe ist recht einfach… 1.) Bei Schließen des Formulars merke ich mir die Anzahl der zuletzt verwendeten Monitore. 2.) Bei Öffnen des Formulars untersuche ich die Anzahl der Monitore und falls diese kleiner ist, als die zuletzt verwendete verschiebe ich gnadenlos meine Anwendung auf der ersten Monitor (if FMain1.Left > Screen.Width then). Eine Tastenkombination würde hier versagen, da meine kleine Anwendung besteht aus ca. 200 Formulare (von denen viele, je nach Einstellung, beim Start des Programms geöffnet werden) und darüber hinaus müsste die Anwendung (bzw. HauptForm) für eine Tastenkombination aktiv sein. Klickt ein ungeduldiger Anwender auf etwas anderes (z.B. Desktop-Icon), dann ist mit der Tastenkombination vorbei. Die Praxis wird zeigen, ob es ausreicht… Falls nicht, dann sage ich hier Bescheid :idea: Viele Grüße Paul Jr. |
Re: Anzahl Monitore ermitteln (Anwendung verschwindet bzw. n
Zitat:
Außerdem würde ich diese Prüfung wenn dann immer machen, denn der Benutzer könnte ja auch einfach eine ganz andere Auflösung haben. |
Re: Anzahl Monitore ermitteln (Anwendung verschwindet bzw. n
Hallo OregonGhost :-D
Nein, Dein Hinweis habe ich nicht übersehen... Hat mir sehr geholfen... Danke noch einmal... :???: Viele Grüße Paul Jr. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:41 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz