Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Anzahl Monitore ermitteln (Anwendung verschwindet bzw. nicht (https://www.delphipraxis.net/100671-anzahl-monitore-ermitteln-anwendung-verschwindet-bzw-nicht.html)

PaulJr 2. Okt 2007 10:27


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.

Bernhard Geyer 2. Okt 2007 10:32

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.

Flocke 2. Okt 2007 10:33

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 :?

Muetze1 2. Okt 2007 10:33

Re: Anzahl Monitore ermitteln (Anwendung verschwindet bzw. n
 
Schau dir mal Delphi-Referenz durchsuchenTScreen an und dort dann Delphi-Referenz durchsuchenTScreen.MonitorCount und [oh]TScreen.Monitor[][/oh]. Die globale Instanz Screen gibt dir Zugriff auf die Klasse (also nicht selbst instanziieren).

Und zu dem Formproblem: Delphi-Referenz durchsuchenTForm.Position und Delphi-Referenz durchsuchenTForm.DefaultMonitor

Ansonsten für die Überschneidungen: MSDN-Library durchsuchenIntersectRect()

OregonGhost 2. Okt 2007 10:48

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:

peschai 2. Okt 2007 10:56

Re: Anzahl Monitore ermitteln (Anwendung verschwindet bzw. n
 
Hallo
Einfacher Vorschlag:
Delphi-Quellcode:
if (MyMainForm.Left>Screen.Width) then
  begin
    MyMainForm.Left := 100;
  end;

PaulJr 2. Okt 2007 11:00

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.

Dezipaitor 2. Okt 2007 11:24

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.

OregonGhost 2. Okt 2007 11:37

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:

Dezipaitor 2. Okt 2007 11:53

Re: Anzahl Monitore ermitteln (Anwendung verschwindet bzw. n
 
Zitat:

Zitat von OregonGhost
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.

Das geht jedoch nicht unbedingt intuitiv.
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.

OregonGhost 2. Okt 2007 12:00

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*).

kalmi01 2. Okt 2007 12:00

Re: Anzahl Monitore ermitteln (Anwendung verschwindet bzw. n
 
Zitat:

Zitat von OregonGhost
Abhilfe: Rechtsklick auf den Taskbareintrag, Verschieben, und dann das Fenster mit der Tastatur wieder ins Bild ziehen

Ich habe für sowas die Tastenkombination Strg+F1 in meinen Prog's, weil häufig auf mal mehr- und mal auf ein-Monitor benutzt werden.
Gewöhnten sich die Anwender echt schnell drann :-)

Dezipaitor 2. Okt 2007 12:03

Re: Anzahl Monitore ermitteln (Anwendung verschwindet bzw. n
 
Zitat:

Zitat von kalmi01
Zitat:

Zitat von OregonGhost
Abhilfe: Rechtsklick auf den Taskbareintrag, Verschieben, und dann das Fenster mit der Tastatur wieder ins Bild ziehen

Ich habe für sowas die Tastenkombination Strg+F1 in meinen Prog's, weil häufig auf mal mehr- und mal auf ein-Monitor benutzt werden.
Gewöhnten sich die Anwender echt schnell drann :-)

Uhh, Strg+F1 ist eigentlich für kontextsensitive Hilfe in Editoren - ala Delphi. Aber wenns funktioniert :D.

PaulJr 2. Okt 2007 12:31

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.

OregonGhost 2. Okt 2007 12:34

Re: Anzahl Monitore ermitteln (Anwendung verschwindet bzw. n
 
Zitat:

(if FMain1.Left > Screen.Width then).
Für den Fall, dass du meinen Hinweis nicht nur hier ausgelassen, sondern übersehen hast: Du solltest dann vielleicht auch abprüfen, ob Left + Width < 0 ist. Und auch vertikal kann das Fenster außerhalb des Bereichs liegen.

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.

PaulJr 2. Okt 2007 12:37

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