Änderung der Bildschirmauflösung aus dem Programm
Moderator: Moderatoren
Änderung der Bildschirmauflösung aus dem Programm
HI!
Meine Kunden haben oft für meine ein Programm eine viel zu große Bildschirmauflösung, so dass meine Masken irgendwo links in der Ecke hängen und sich die Hinweisfenster wild auf dem Bildschirm verteilen. Ich kann zwar auf diesen Umstand aufmerksam machen, indem ich die aktuell benutze Bildschirmauflösung mit
aSizeDesktop := AppDesktop():currentSize() und
store aSizeDesktop[1] to xbild
Store aSizeDesktop[2] to ybild
auslese und anzeigen. Aber könnte ich auch aus der Programmierung heraus die eingestellte Bildschirmauflösung beim Kunden (wenn auch nur vorübergehend) ändern bzw. anpassen? Wenn ja, wie?
MfG
Werner
Meine Kunden haben oft für meine ein Programm eine viel zu große Bildschirmauflösung, so dass meine Masken irgendwo links in der Ecke hängen und sich die Hinweisfenster wild auf dem Bildschirm verteilen. Ich kann zwar auf diesen Umstand aufmerksam machen, indem ich die aktuell benutze Bildschirmauflösung mit
aSizeDesktop := AppDesktop():currentSize() und
store aSizeDesktop[1] to xbild
Store aSizeDesktop[2] to ybild
auslese und anzeigen. Aber könnte ich auch aus der Programmierung heraus die eingestellte Bildschirmauflösung beim Kunden (wenn auch nur vorübergehend) ändern bzw. anpassen? Wenn ja, wie?
MfG
Werner
-
- Der Entwickler von "Deep Thought"
- Beiträge: 2824
- Registriert: Fr, 08. Feb 2008 21:29
- Hat sich bedankt: 95 Mal
- Danksagung erhalten: 13 Mal
Re: Änderung der Bildschirmauflösung aus dem Programm
Hallo, Werner -
das würde ich nicht machen, da Dein Programm ja wahrscheinlich parallel mit anderen Programmen läuft, und die dann besch...eiden aussehen. Z.B. Firefox passt sich an Änderungen der Auflösung an, und damit bringst Du dann einiges auf dem PC Deines Kunden durcheinander - und das würde ich als Softwarehersteller nie tun. Ausserdem geht eine niedrigere Auflösung gerade bei heutigen Monitoren mit einer Verschlechterung der Anzeigequalität einher.
Du kannst doch bei Erstellen des Programmfensters eine Position angeben, wo das Fenster hin soll (aPos), warum nutzt Du das nicht? Und auch für die Hinweisfenster gilt das gleiche (ich setze diese so, dass sie immer im eigentlichen Programmfenster angezeigt werden).
das würde ich nicht machen, da Dein Programm ja wahrscheinlich parallel mit anderen Programmen läuft, und die dann besch...eiden aussehen. Z.B. Firefox passt sich an Änderungen der Auflösung an, und damit bringst Du dann einiges auf dem PC Deines Kunden durcheinander - und das würde ich als Softwarehersteller nie tun. Ausserdem geht eine niedrigere Auflösung gerade bei heutigen Monitoren mit einer Verschlechterung der Anzeigequalität einher.
Du kannst doch bei Erstellen des Programmfensters eine Position angeben, wo das Fenster hin soll (aPos), warum nutzt Du das nicht? Und auch für die Hinweisfenster gilt das gleiche (ich setze diese so, dass sie immer im eigentlichen Programmfenster angezeigt werden).
Liebe Grüsse aus der Eifel,
Georg S. Lorrig
Redakteur der Wiki des Deutschprachigen Xbase-Entwickler e.V.
Georg S. Lorrig
Redakteur der Wiki des Deutschprachigen Xbase-Entwickler e.V.
- brandelh
- Foren-Moderator
- Beiträge: 15695
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 65 Mal
- Danksagung erhalten: 33 Mal
- Kontaktdaten:
Re: Änderung der Bildschirmauflösung aus dem Programm
Das ging mal unter DOS, aber unter Windows ?Werner hat geschrieben:Aber könnte ich auch aus der Programmierung heraus die eingestellte Bildschirmauflösung beim Kunden (wenn auch nur vorübergehend) ändern bzw. anpassen? Wenn ja, wie?
MfG
Werner
Wenn mir ein Programm meine auf den Monitor optimierte Auflösung ändern würde, würde ich mich sehr ärgern.
Du kannst dein Programm zentrieren, dann ist es immer in der Mitte ... ob das der Anwender will ist eine andere Frage.
Gruß
Hubert
Hubert
- Martin Altmann
- Foren-Administrator
- Beiträge: 16508
- Registriert: Fr, 23. Sep 2005 4:58
- Wohnort: Berlin
- Hat sich bedankt: 111 Mal
- Danksagung erhalten: 48 Mal
- Kontaktdaten:
Re: Änderung der Bildschirmauflösung aus dem Programm
Moin,
es geht ihm wohl weniger um sein Programm, als um die dort geöffneten Dialoge. Die kann (und sollte) er ruhig immer innerhalb seiner Anwendung zentrieren.
Viele Grüße,
Martin
es geht ihm wohl weniger um sein Programm, als um die dort geöffneten Dialoge. Die kann (und sollte) er ruhig immer innerhalb seiner Anwendung zentrieren.
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.
- Manfred
- Foren-Administrator
- Beiträge: 21186
- Registriert: Di, 29. Nov 2005 16:58
- Wohnort: Kreis Wesel
- Hat sich bedankt: 210 Mal
- Danksagung erhalten: 67 Mal
Re: Änderung der Bildschirmauflösung aus dem Programm
auh ja, das sehe ich auch so. Ich kann ein Liedchen davon singen, wenn der Entwickler ohne Ende Fenster öffnet und die Kreuz und quer auf den Bildschirmen verteilt......
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
- Jan
- Marvin
- Beiträge: 14651
- Registriert: Fr, 23. Sep 2005 18:23
- Wohnort: 49328 Melle
- Hat sich bedankt: 21 Mal
- Danksagung erhalten: 88 Mal
- Kontaktdaten:
Re: Änderung der Bildschirmauflösung aus dem Programm
Ich würde die Auflösung eines Bidlschirmes beim Kunden niemals automatisch ändern! Das bring seinen gesamten Desktop durcheinander, der dann ja nicht mehr passt. Mordandrohungen werden Dir gewiss sein!
Ich würde die beiden Vorschläge aufgreifen, die heri gemacht worden sind: Entweder Du gibst eine Position für Dein Programm an, wo das augenfällig startet, und öfffnest zusätzliche Fenster entweder direkt über Deinem Hauptprogramm, oder zumindest dicht daneben. Oder Du passt die Größe Deines Programmes inkl. all der enthaltenen Bestandteile an die Auflösung des Monitors an (schau mal unter http://xbaseforum.de/viewtopic.php?f=16&t=8009 nach).
Jan
Ich würde die beiden Vorschläge aufgreifen, die heri gemacht worden sind: Entweder Du gibst eine Position für Dein Programm an, wo das augenfällig startet, und öfffnest zusätzliche Fenster entweder direkt über Deinem Hauptprogramm, oder zumindest dicht daneben. Oder Du passt die Größe Deines Programmes inkl. all der enthaltenen Bestandteile an die Auflösung des Monitors an (schau mal unter http://xbaseforum.de/viewtopic.php?f=16&t=8009 nach).
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.
- brandelh
- Foren-Moderator
- Beiträge: 15695
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 65 Mal
- Danksagung erhalten: 33 Mal
- Kontaktdaten:
Re: Änderung der Bildschirmauflösung aus dem Programm
Ein Problem der normalen MSGBOX() ist, dass man ihr kein eigenes Fenster als Parent vorgeben kann (auf das dann zentriert wird).
Die ConfirmBox() kann das. Auch kann man hier den Ton auswählen und festlegen ob APPMODAL, SYSMODAL oder verschiebbar angezeigt wird.
Diese Funktion nutze :
Die ConfirmBox() kann das. Auch kann man hier den Ton auswählen und festlegen ob APPMODAL, SYSMODAL oder verschiebbar angezeigt wird.
Diese Funktion nutze :
Code: Alles auswählen
*-------------------------------------------------------------
Function MyMsgBox(uText,cTitel,oOwner,nStyle)
local cText,x,xMax
DEFAULT nStyle TO XBPMB_WARNING + XBPMB_MOVEABLE
// XBPMB_QUESTION Fragezeichen
// XBPMB_WARNING Warnung -> Standard MSGBOX()
// XBPMB_INFORMATION Information
// XBPMB_CRITICAL Kritische Situation
// XBPMB_APPMODAL Confirmbox ist modal in Bezug auf die Xbase++ Anwendung
// XBPMB_SYSMODAL Confirmbox ist systemweit modal
// XBPMB_MOVEABLE Confirmbox kann verschoben werden
do case
case valtype(uText) = "A" // reiner Text oder nur debugging
cText := Var2Char(uText[1])
xMax := len(uText)
for x := 2 to xMax
cText += chr(13) + Var2Char(uText[x])
next
case valtype(uText) = "C"
cText := uText
case valtype(uText) = "N"
cText := ntrim(uText)
case valtype(uText) = "D"
cText := ctod(uText)
otherwise
cText := "Parameterfehler bei MyMsgBox: "+valtype(uText)+;
" statt C, N, D oder A"+chr(13)+;
"Bitte diesen Fehler melden."
endcase
ConfirmBox(oOwner,cText,cTitel,XBPMB_OK,nStyle)
return NIL
*-------------------------------------------------------------
Gruß
Hubert
Hubert
- Tom
- Der Entwickler von "Deep Thought"
- Beiträge: 9356
- Registriert: Do, 22. Sep 2005 23:11
- Wohnort: Berlin
- Hat sich bedankt: 101 Mal
- Danksagung erhalten: 361 Mal
- Kontaktdaten:
Re: Änderung der Bildschirmauflösung aus dem Programm
Grundsätzlich sollte man alle Dialoge zentrieren. Das kann über eine einfache PP-Direktive erfolgen.
Die schönste Lösung bei unterschiedlichen Auflösungen besteht darin, die gesamte Applikation entsprechend zu skalieren. Wenn man beispielsweise alle Dialoge auf (maximal) 1024x768 (VGA) layoutet hat, kann man auf Basis der vorliegenden Auflösung ermitteln, um wie viel höher diese ist. Hat man z.B. 1900 x 1080 (Full HD), hat man in X-Richtung eine Vergrößerung um den Faktor 1,41 und in Y-Richtung um 1,86. Man kann den kleineren Faktor wählen, um alle Darstellungen entsprechend zu vergrößern. Diesen beim Programmstart errechneten Faktor wählt man bei allen (!) Größen- und Positionsangaben als Multiplikator, außerdem bei allen Fonts, macht also beispielsweise aus "10.Arial" "14.Arial". Dafür benötigt man eine Handvoll Funktionen, noch einfach geht es, wenn man sich Klassen baut, in denen dann der Faktor automatisch in Methoden wie Create(), SetPos(), SetSize() usw. gewählt wird. Ist ein bisschen Arbeit, aber das Ergebnis ist's wert.
Die schönste Lösung bei unterschiedlichen Auflösungen besteht darin, die gesamte Applikation entsprechend zu skalieren. Wenn man beispielsweise alle Dialoge auf (maximal) 1024x768 (VGA) layoutet hat, kann man auf Basis der vorliegenden Auflösung ermitteln, um wie viel höher diese ist. Hat man z.B. 1900 x 1080 (Full HD), hat man in X-Richtung eine Vergrößerung um den Faktor 1,41 und in Y-Richtung um 1,86. Man kann den kleineren Faktor wählen, um alle Darstellungen entsprechend zu vergrößern. Diesen beim Programmstart errechneten Faktor wählt man bei allen (!) Größen- und Positionsangaben als Multiplikator, außerdem bei allen Fonts, macht also beispielsweise aus "10.Arial" "14.Arial". Dafür benötigt man eine Handvoll Funktionen, noch einfach geht es, wenn man sich Klassen baut, in denen dann der Faktor automatisch in Methoden wie Create(), SetPos(), SetSize() usw. gewählt wird. Ist ein bisschen Arbeit, aber das Ergebnis ist's wert.
Herzlich,
Tom
Tom