Mehrere Bildschirme und CenterPos
Moderator: Moderatoren
-
- Rekursionen-Architekt
- Beiträge: 128
- Registriert: Mi, 26. Okt 2005 18:41
- Wohnort: Berlin
- Kontaktdaten:
Mehrere Bildschirme und CenterPos
Wenn merere Bildschrime an einer Grafikkarte angeschlossen sind, entsteht das Problem, dass sich mit Xbase-Bordmitteln ein Fenster nicht mehr so richtig zentrieren lässt. Als Grundlage für die Berechnung der Mittenposition nimmt Xbase++ stets wohl immer den ersten Bildschirm, auch wenn man das "Root-Window" der Anwendung auf dem 2.ten oder 3.ten Bildschirm positioniert ist. So entsteht dann der Effekt, dass man darauf wartet, dass das Programm endlich mal weitermacht, dann schlieslich mit Ctrl-Alt-Del das Programm abbricht, weil man nicht merkt dass zwei Bildschirme und einundhalb Meter weiter links ein kleiner Dialog aufgepoppt ist und auf Eingaben wartet. Hat da schon mal jemand eine Lösung gefunden (ohne dass man alle Dialoge neu anfassen muss) oder ist das Problem bisher nicht aufgetreten.
Grüße
Olaf870
Grüße
Olaf870
- Lewi
- 1000 working lines a day
- Beiträge: 830
- Registriert: Di, 07. Feb 2006 14:10
- Wohnort: Hamburg
- Danksagung erhalten: 2 Mal
Re: Mehrere Bildschirme und CenterPos
Moin Olaf,
dieses Problem kenne ich.
Ich habe meine Dialog-Klasse um 2 Methoden erweitert, die beim Schliessen eines Dialoges die Position des Fensters abspeichert (Ini-Datei, mit Dialog-Klassennahmen, xy-Position, Desktop-Größe) und beim nächsten Aufruf die letzte Position für die Darstellung heranzieht.
Diese Datei wird in einem User-Verzeichnis abgelegt. Falls der User an einem anderen Arbeitsplatz sitzt, an dem keine 2 Bildschirme vorhanden sind und die Koordinaten nicht zur Desktop-Größe passen, wird der Dialog dann wieder zentriert.
Viele Grüße
Olaf
dieses Problem kenne ich.
Ich habe meine Dialog-Klasse um 2 Methoden erweitert, die beim Schliessen eines Dialoges die Position des Fensters abspeichert (Ini-Datei, mit Dialog-Klassennahmen, xy-Position, Desktop-Größe) und beim nächsten Aufruf die letzte Position für die Darstellung heranzieht.
Diese Datei wird in einem User-Verzeichnis abgelegt. Falls der User an einem anderen Arbeitsplatz sitzt, an dem keine 2 Bildschirme vorhanden sind und die Koordinaten nicht zur Desktop-Größe passen, wird der Dialog dann wieder zentriert.
Viele Grüße
Olaf
- Herbert
- Der Entwickler von "Deep Thought"
- Beiträge: 1991
- Registriert: Do, 14. Aug 2008 0:22
- Wohnort: Gmunden am Traunsee, Österreich
- Danksagung erhalten: 3 Mal
- Kontaktdaten:
Re: Mehrere Bildschirme und CenterPos
Habe zu diesem Thema eine Frage:
Wenn ich mehrere Bildschirme habe, kann der Hauptbildschirm mit der Koordinate 0,0 links unten irgendeiner dieser Bildschirme sein. Ein Bildschirm links davon liefert mir negative X-Koordinaten, rechts daveon entsprechend grosse X-Koordinaten.
Gibt es eine Möglichkeit, den sichtbaren Bereich abfragen zu können?
Wenn ich mehrere Bildschirme habe, kann der Hauptbildschirm mit der Koordinate 0,0 links unten irgendeiner dieser Bildschirme sein. Ein Bildschirm links davon liefert mir negative X-Koordinaten, rechts daveon entsprechend grosse X-Koordinaten.
Gibt es eine Möglichkeit, den sichtbaren Bereich abfragen zu können?
Grüsse Herbert
Immer in Bewegung...
Immer in Bewegung...
- Jan
- Marvin
- Beiträge: 14658
- Registriert: Fr, 23. Sep 2005 18:23
- Wohnort: 49328 Melle
- Hat sich bedankt: 21 Mal
- Danksagung erhalten: 88 Mal
- Kontaktdaten:
Re: Mehrere Bildschirme und CenterPos
SetAppWindow():currentSize()
Ich weiß aber nicht, ob das auf beide Bildschirme geht oder nur den aktuellen.
Jan
Ich weiß aber nicht, ob das auf beide Bildschirme geht oder nur den aktuellen.
Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
- Tom
- Der Entwickler von "Deep Thought"
- Beiträge: 9368
- Registriert: Do, 22. Sep 2005 23:11
- Wohnort: Berlin
- Hat sich bedankt: 102 Mal
- Danksagung erhalten: 361 Mal
- Kontaktdaten:
Re: Mehrere Bildschirme und CenterPos
liefert die Größe des AppWindows zurück. Wenn schon, dann AppDeskTop():CurrentSize, aber auch das bringt nix.SetAppWindow():currentSize()
Mittel der Wahl ist die API-Funktion SystemParametersInfoA. Mit dem Parameter SPI_GETWORKAREA (48) beispielsweise liefert sie (in einem per Referenz übergebenen Puffer) die nutzbare Größe (bzw. die Koordinaten) des Bildschirms oder aller Bildschirme. Allerdings muss man die Puffervariable auseinanderfrickeln, um die Koordinaten zu erhalten. Die Stellen 1 bis 4 liefern links oben, 5 bis 8 rechts oben, 9 bis 12 links unten, 13 bis 16 rechts unten. Auf die muss man dann Bin2U() anwenden, um numerische Werte zu erhalten.
Herzlich,
Tom
Tom
- Jan
- Marvin
- Beiträge: 14658
- Registriert: Fr, 23. Sep 2005 18:23
- Wohnort: 49328 Melle
- Hat sich bedankt: 21 Mal
- Danksagung erhalten: 88 Mal
- Kontaktdaten:
Re: Mehrere Bildschirme und CenterPos
Tom,
in einem hast Du Recht: SetAppWindow() ist natürlich falsch. Da waren die Finger zu schnell, und haben ein Set zu viel getippt.
Aber auf meinem Rechner gibt AppDeskTop():currentSize() exakt die Bildschirmgröße wieder. Da brauch ich keinerlei API-Verrenkungen zu machen.
Jan
in einem hast Du Recht: SetAppWindow() ist natürlich falsch. Da waren die Finger zu schnell, und haben ein Set zu viel getippt.
Aber auf meinem Rechner gibt AppDeskTop():currentSize() exakt die Bildschirmgröße wieder. Da brauch ich keinerlei API-Verrenkungen zu machen.
Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
- Tom
- Der Entwickler von "Deep Thought"
- Beiträge: 9368
- Registriert: Do, 22. Sep 2005 23:11
- Wohnort: Berlin
- Hat sich bedankt: 102 Mal
- Danksagung erhalten: 361 Mal
- Kontaktdaten:
Re: Mehrere Bildschirme und CenterPos
Die genannte API-Funktion liefert - je nach Parameter - unterschiedliche Informationen, und in der gezeigten Variante den nutzbaren Bereich (also ohne Taskbar usw.). Das ist keine "Verrenkung", sondern eine ziemlich wichtige Info, wenn man eben nicht die verfügbare Bildschirmgröße, sondern den Arbeitsbereich zu füllen versucht. Wenn Du eine Anwendung bauen willst, die immer den Arbeitsbereich füllen soll, scheiterst Du mit AppDeskTop():CurrentSize().
Herzlich,
Tom
Tom
- brandelh
- Foren-Moderator
- Beiträge: 15697
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 66 Mal
- Danksagung erhalten: 33 Mal
- Kontaktdaten:
Re: Mehrere Bildschirme und CenterPos
Hi,
ich habe nur einen Monitor angeschlossen, daher die Frage (ich kann es nicht selbst probieren).
Angenommen ich habe 2 Monitore mit 1280x1024, liefert dann AppDestop() 2560x1024 ?
Und was passiert, wenn beide Monitor unterschiedlich groß sind, bzw. einer quer und der andere 90° verdreht ist ?
ich habe nur einen Monitor angeschlossen, daher die Frage (ich kann es nicht selbst probieren).
Angenommen ich habe 2 Monitore mit 1280x1024, liefert dann AppDestop() 2560x1024 ?
Und was passiert, wenn beide Monitor unterschiedlich groß sind, bzw. einer quer und der andere 90° verdreht ist ?
Gruß
Hubert
Hubert
- Martin Altmann
- Foren-Administrator
- Beiträge: 16517
- Registriert: Fr, 23. Sep 2005 4:58
- Wohnort: Berlin
- Hat sich bedankt: 111 Mal
- Danksagung erhalten: 48 Mal
- Kontaktdaten:
Re: Mehrere Bildschirme und CenterPos
Moin,
AppDesktop geht immer nur auf den ersten Monitor!
Genau die von Dir gewünschte Konstellation habe ich hier im Büro. Es wird immer nur 1280x1024 angezeigt.
Viele Grüße,
Martin
AppDesktop geht immer nur auf den ersten Monitor!
Genau die von Dir gewünschte Konstellation habe ich hier im Büro. Es wird immer nur 1280x1024 angezeigt.
Viele Grüße,
Martin
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/
Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
- Tom
- Der Entwickler von "Deep Thought"
- Beiträge: 9368
- Registriert: Do, 22. Sep 2005 23:11
- Wohnort: Berlin
- Hat sich bedankt: 102 Mal
- Danksagung erhalten: 361 Mal
- Kontaktdaten:
Re: Mehrere Bildschirme und CenterPos
So isses. SystemParametersInfoA liefert mit den richtigen Parametern aber alle gewünschten Infos.AppDesktop geht immer nur auf den ersten Monitor!
Herzlich,
Tom
Tom
- Herbert
- Der Entwickler von "Deep Thought"
- Beiträge: 1991
- Registriert: Do, 14. Aug 2008 0:22
- Wohnort: Gmunden am Traunsee, Österreich
- Danksagung erhalten: 3 Mal
- Kontaktdaten:
Re: Mehrere Bildschirme und CenterPos
Danke Tom, werde mal "U2Bin-len"
Und an die anderen Herren: Glaubt ihr mir nicht, wenn ich schreibe, dass die "linke"seite des 1. Monitors negative Werte liefert und die rechte entsprechend Höhere?
Von daher kriegt man auch keine Infos über eventuelle Unterschiede in der Auflösung.
Und an die anderen Herren: Glaubt ihr mir nicht, wenn ich schreibe, dass die "linke"seite des 1. Monitors negative Werte liefert und die rechte entsprechend Höhere?
Von daher kriegt man auch keine Infos über eventuelle Unterschiede in der Auflösung.
Grüsse Herbert
Immer in Bewegung...
Immer in Bewegung...
- Martin Altmann
- Foren-Administrator
- Beiträge: 16517
- Registriert: Fr, 23. Sep 2005 4:58
- Wohnort: Berlin
- Hat sich bedankt: 111 Mal
- Danksagung erhalten: 48 Mal
- Kontaktdaten:
Re: Mehrere Bildschirme und CenterPos
Herbert,
was heißt nicht glauben?
Hubert wollte wissen, wie das Ergebnis von AppDesktop():CurentSize() ist, wenn man zwei Bildschirme hat, die unterschiedlich ausgerichtet sind.
Den Gefallen habe ich ihm getan und seine Frage beantwortet - da ist kein Wert negativ, warum auch.
Du hast ja nach was anderem gefragt.
Viele Grüße,
Martin
was heißt nicht glauben?
Hubert wollte wissen, wie das Ergebnis von AppDesktop():CurentSize() ist, wenn man zwei Bildschirme hat, die unterschiedlich ausgerichtet sind.
Den Gefallen habe ich ihm getan und seine Frage beantwortet - da ist kein Wert negativ, warum auch.
Du hast ja nach was anderem gefragt.
Viele Grüße,
Martin
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/
Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
- brandelh
- Foren-Moderator
- Beiträge: 15697
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 66 Mal
- Danksagung erhalten: 33 Mal
- Kontaktdaten:
Re: Mehrere Bildschirme und CenterPos
Hi,
wenn ich ein Fenster unsichtbar aufbauen will, kann ich das entweder HIDDEN tun, oder ich lasse es an Position -1000, -1000 aufbauen.
Ein kurzes setPos() und es ist sofort da ! Negative Werte können also auch nützlich sein
wenn ich ein Fenster unsichtbar aufbauen will, kann ich das entweder HIDDEN tun, oder ich lasse es an Position -1000, -1000 aufbauen.
Ein kurzes setPos() und es ist sofort da ! Negative Werte können also auch nützlich sein
Gruß
Hubert
Hubert
- Tom
- Der Entwickler von "Deep Thought"
- Beiträge: 9368
- Registriert: Do, 22. Sep 2005 23:11
- Wohnort: Berlin
- Hat sich bedankt: 102 Mal
- Danksagung erhalten: 361 Mal
- Kontaktdaten:
Re: Mehrere Bildschirme und CenterPos
Hallo, Hubert.
Zustimmung. Ich nutze ein Bildbearbeitungscontrol (ActiveX), das leider immer - und auch nicht abschaltbar - eine Toolbar anzeigt. Immerhin aber kann man sie positionieren (nur eben nicht verstecken). Also landet sie einfach im "negativen Bereich", feddisch.
Zustimmung. Ich nutze ein Bildbearbeitungscontrol (ActiveX), das leider immer - und auch nicht abschaltbar - eine Toolbar anzeigt. Immerhin aber kann man sie positionieren (nur eben nicht verstecken). Also landet sie einfach im "negativen Bereich", feddisch.
Herzlich,
Tom
Tom
- Martin Altmann
- Foren-Administrator
- Beiträge: 16517
- Registriert: Fr, 23. Sep 2005 4:58
- Wohnort: Berlin
- Hat sich bedankt: 111 Mal
- Danksagung erhalten: 48 Mal
- Kontaktdaten:
Re: Mehrere Bildschirme und CenterPos
Yupp.
Aber die Größe des Desktops wird nicht negativ sein
Viele Grüße,
Martin
Aber die Größe des Desktops wird nicht negativ sein
Viele Grüße,
Martin
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/
Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
- brandelh
- Foren-Moderator
- Beiträge: 15697
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 66 Mal
- Danksagung erhalten: 33 Mal
- Kontaktdaten:
Re: Mehrere Bildschirme und CenterPos
Hallo Martin,
noch nicht, aber wenn der erste Monitor mehr als die 2 Milliarden positiven Punkte bei einer LONG benötigt, hat Xbase ein Problem ...
noch nicht, aber wenn der erste Monitor mehr als die 2 Milliarden positiven Punkte bei einer LONG benötigt, hat Xbase ein Problem ...
Gruß
Hubert
Hubert
- Herbert
- Der Entwickler von "Deep Thought"
- Beiträge: 1991
- Registriert: Do, 14. Aug 2008 0:22
- Wohnort: Gmunden am Traunsee, Österreich
- Danksagung erhalten: 3 Mal
- Kontaktdaten:
Re: Mehrere Bildschirme und CenterPos
Die Grösse nicht, aber die Koordinaten. Ein 2. Bildschirm links des Hauptbildschirms hat negative Positionen! Also aufgepasst mit Pseudofenstern im negativen Bereich.Martin Altmann hat geschrieben:Yupp.
Aber die Größe des Desktops wird nicht negativ sein
Grüsse Herbert
Immer in Bewegung...
Immer in Bewegung...