Änderung der Bildschirmauflösung aus dem Programm

Konzeptionelles, Technisches, Termine, Fragen zum Hersteller usw.

Moderator: Moderatoren

Antworten
Werner
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 120
Registriert: Sa, 18. Mär 2006 16:08

Änderung der Bildschirmauflösung aus dem Programm

Beitrag von Werner »

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
georg
Der Entwickler von "Deep Thought"
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

Beitrag von georg »

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).
Liebe Grüsse aus der Eifel,

Georg S. Lorrig
Redakteur der Wiki des Deutschprachigen Xbase-Entwickler e.V.
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12906
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 45 Mal

Re: Änderung der Bildschirmauflösung aus dem Programm

Beitrag von AUGE_OHR »

Werner hat geschrieben:Wenn ja, wie?
genau dafür ist DPI-aware gedacht.
gruss by OHR
Jimmy
Benutzeravatar
brandelh
Foren-Moderator
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

Beitrag von brandelh »

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
Das ging mal unter DOS, aber unter Windows ?

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
Benutzeravatar
Martin Altmann
Foren-Administrator
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

Beitrag von Martin Altmann »

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
:grommit:
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.
Benutzeravatar
Manfred
Foren-Administrator
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

Beitrag von Manfred »

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!!
Benutzeravatar
Jan
Marvin
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

Beitrag von Jan »

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
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
brandelh
Foren-Moderator
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

Beitrag von brandelh »

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 :

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
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
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

Beitrag von Tom »

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.
Herzlich,
Tom
Antworten