Delphi5 vs. HD-Monitor

    Delphi5 vs. HD-Monitor

    Hallo zusammen,

    habe mich soeben neu angemeldet, weil ich ein für mich im Moment nicht lösbares Problem hab. (Ich hoffe, ich mache hier im Forum nichts falsch!)

    Es geht um Delphi5 - von dem ich mich eben nicht trennen kann - und um eine Anwendung, die in der BS-Auflösung 1680x1050 läuft. Wird eigentlich oft
    verwendet und sollte so der Anwendung eine breite Basis geben (Multi-Auflösung bei einem komplizierten, fotoähnlichem BS-Aufbau wird viel zu aufwendig.)

    Jetzt bin ich bei Tests auf einen HD-Monitor gestoßen (1920x1080) und meinte, meine Anwendung sollte dort laufen, weil ich in form1.OnCreate left:=0;top:=0;
    width:=1680; und height:=1050; explizit setze. Es müsste bei 1920x1080 die ganze Form zu sehen sein - is aber nich: Das Hauptfenster ist viel zu groß und reicht rechts und unten über
    den Monitor hinaus. Eine Test-Version ergab, dass Delphi hier die BS-Auflösung über screen.width und screen.height mit 1536x864 ermittelt - das ist zwar das gleiche
    Seitenverhältnis, aber da bin ich jetzt völlig ratlos.

    Auch screen.monitor[0].width usw. brachten kein anderes Ergebnis. Ich meine, mir is schon klar, dass Delhp 5 "ein bisschen älter" ist als die HD-Auflösung. Aber wie kann
    screen.width 1536 liefern, sodaß meine Hauptform für den Bildschirm zu groß wird, obwohl das Betriebssystem (Win 7) tatsächlich auf 1920x1080 eingestellt ist?
    [dpi der Hauptform is auf 96 (sowohl in Form1 als auch im Win7 des Zielrechners), aber es geht hier ja nicht vordergründig um die Schrift...]

    Habt ihr eine Idee, woran des liegen könnte bzw. wie man Delphi5 dazu bewegen könnte, die 1920x1080 auch tatsächlich zu erkennen?

    Vielen Dank im Voraus!

    Gruß
    Detlef
    Ich habe hier kein Delphi 5 und kann daher nicht nachsehen, wie die Bildschirmauflösung dort ermittelt wird. Was kommt denn heraus, wenn Du das mal direkt über die Windows-API machst?

    Delphi-Code

    1. var
    2. X, Y: integer;
    3. begin
    4. X := GetSystemMetrics(SM_CXSCREEN);
    5. Y := GetSystemMetrics(SM_CYSCREEN);
    6. ShowMessage(Format('Breite: %d, Höhe: %d', [X, Y]));
    7. end;

    10 Minuten Nachdenken ersparen oftmals 10 Stunden Fehlersuche.
    Ich glaube hier ist es ganz gut erklärt stackoverflow.com/questions/18…indows-8-tablet-is-set-to

    Definition on Full HD is debatable.
    Industry has adopted the term Full HD as the consumer-friendly marketing term to mean the device is a safe purchase because it can display at least one of the available HD resolutions.
    Your device supports an aspect ratio of 16:9 which is the international standard for HD.
    The two most publicly known full HD resolutions are :
    • 1280 x 720 (720p)
    • 1920 x 1080 (1080p)
    The fact that your device says that it is full HD simply means that the display of the device at a minimum supports a resolution of 720p, up to 1080p.
    Given that this is a tablet it should become apparent that it's native resolution is 720p HD. The fact that you can force 1080p just means exactly that, a display marked as Full HD which is able to display 1080p. Does not mean 1080p is it's native resolution.
    To answer your question, Delphi neither Windows is at fault.
    Vielen Dank für die schnellen Antworten!

    @baumina: Klar, dass "Full HD" nur eine Möglichkeit widergibt und von 720p bis 1080p "Full HD" alles Mögliche sein kann. Aber sagt Win7 "1920x1080", dann sollte es auch so sein. Aber der Link ist sehr gut! Hab zwar schon viel gesucht, aber diese Tipps nicht gefunden. Werde ich mir nochmal in Ruhe reinziehen.
    @DeddyH: Auch sehr gute Idee: Diese API's hatte ich im Zusammenhang mit meinem Problem gar nicht auf dem Schirm. Wenn die auch 1536x864 bringen, muss ich mich bei meinem geliebten alten Delphi5 entschuldigen... Wenn jedoch nicht (also 1920x1080 gemeldet wird), dann frag ich mich immer noch, warum eine 1680x1050 - Form auf einem 1920x1080 - Monitor nicht vollständig zu sehen ist....

    Blöd nur, dass der HD-Monitor bei einem Bekannten steht, der jetzt erstmal unterwegs ist. Bis zur nächsten Testmöglichkeit wird etwas Zeit vergehen, ich kann ja nicht extra zum Testen einen kaufen ... ;) Naja, bis zu einer möglichen Lösung hab ich unter meinen HW-Vors. "HD" erstmal (und im Programm als Fehlermeldung) ausgeschlossen.

    Nochmals vielen Dank!
    Gruß
    Detlef
    Versuche bitte auch mal folgendes:
    Form im Vollbild öffnen und dann width und Height das Form auslesen.

    DL
    Es gibt Wissenschaftler, die behaupten, dass Logik "universell", also überall gleich, sei...
    Ich treffe täglich Menschen, die mit "ihrer" Logik das Gegenteil beweisen.
    Naja, bei genauerem hinguggen in mein Link war dem TE seine Lösung doch nur eine DPI-Geschichte.

    Conclusion
    I just wanted to highlight the cause of my problem since it is kind of hidden in the comments.
    By default Windows 8 on my tablet is using 150% DPI. 1080px are 150% of 720px. So 720px are usable by applications. Decreasing the DPI percentage to 100% results in the expected 1080px resolution.
    Kann ich auch nicht nachvollziehen :

    Delphi-Code

    1. procedure TForm1.btnAufloesungClick(Sender: TObject);
    2. begin
    3. Caption := IntToStr(Screen.Monitors[0].Width) + ' * ' + IntToStr(Screen.Monitors[0].Height);
    4. end;

    Zeigt unter XP 1920 * 1080 an
    Glückauf

    Herr, wirf Hirn vom Himmel

    Ein Leben ohne Möpse ist möglich, aber sinnlos ( Loriot )
    Der beste Platz für Politiker ist das Wahlplakat. Dort ist er tragbar, geräuschlos und leicht zu entfernen ( Loriot )

    Es gibt Leute, die fühlen sich überall gedemütigt, wo sie nicht frech sein dürfen ( Otto Weiss )
    Sreen.width liefert das gleiche, wie screen.monitor[0].width (height analog).
    @DragonsLear: Die Form war im Vollbildmodus geöffnet und hat mit screen.width und screen.height diese 1536x864 geliefert.
    @guinnes: Jetzt wäre die Frage, ob das auch unter Win7 (+ HD-Monitor + Delphi5) so ist. Kannst Du das testen?

    Ich hab schon überlegt, ob unter Win7 (eben wegen der neuen Entwicklungen Richtung HD, ganz dolle wird's ja mit 4K usw.) der screen.canvas (zum Zeichnen der Formen) evtl. anders skaliert sein könnte??
    Oder kann es sein, dass sich unter Win7 ein Monitor mit physikalischen(z.B. 1536x864) und logischen(z.B. 1920x1080) Pixeln am System anmeldet? Und screen.width/screen.height (bzw. auch die von DeddyH genannte API-Funktion) machen ja auch nichts anderes, als im System nachzuschauen, um dann womöglich "lediglich" die physikalischen Pixel zu melden? Vielleicht ist es auch nur der konkrete Monitor, der aufgrund seiner Technik dem Win7-System was vorgauckelt, um dann die HD-Umsetzung rein elektonisch zu realisieren?

    Aber gut: Als Proggi kann ich es auch nicht jedem Transistor recht machen... ;-))

    Gruß
    Detlef

    PS: Letztendlich geht es ja auch nicht um das Auslesen der Auflösung, sondern um die Frage, warum eine auf 1680x1050 gesetzte Form auf dem vom Sytem als 1920x1080 ausgewiesenen Monitor nicht vollständig sichtbar ist.
    Interessante Möglichkeit (hier gefunden):
    I assume you have set 1920x 1080 screen resolution. Also in your display settings there is set 125%. which causes your 1536x 864 resolution.

    Könnte es das sein?
    10 Minuten Nachdenken ersparen oftmals 10 Stunden Fehlersuche.

    Resi50321 schrieb:

    @guinnes: Jetzt wäre die Frage, ob das auch unter Win7 (+ HD-Monitor + Delphi5) so ist. Kannst Du das testen?

    Kann ich leider nicht. Ich habe zwar Windows 7 auf der Arbeit, aber nur einen 1680 * 1050 Monitor
    Glückauf

    Herr, wirf Hirn vom Himmel

    Ein Leben ohne Möpse ist möglich, aber sinnlos ( Loriot )
    Der beste Platz für Politiker ist das Wahlplakat. Dort ist er tragbar, geräuschlos und leicht zu entfernen ( Loriot )

    Es gibt Leute, die fühlen sich überall gedemütigt, wo sie nicht frech sein dürfen ( Otto Weiss )
    Genau das muss es sein !! Man, bin ich blöd. Aber weil ich diese System-Einstellung selbst nie benutze, hatte ich deren Folgen auch nicht bedacht. Eigentlich 'ne gute Lehre, bei der nächsten Konzeption mal an ein paar Randparameter mehr zu denken...
    @guinnes: Ok, trotzdem danke.
    Also: Allen vielen, vielen Dank! Super!
    Es stellt sich mir nun die Frage: Gibt es denn ein API-Funktion mithilfe derer man diese Einstellung auslesen und setzen bzw. zurücksetzen kann?
    Oder steht der Kram irgendwo in der Registry?

    Gruß
    Detlef
    Naja, wenn sich die PixelsPerInch der Formulare am Zielrechner zum Beginn der Laufzeit verändern sollten, könnte man sich deren Festlegung zur Designzeit am Quellrechner eigentlich sparen... Keine Ahnung, was der Delphi5-Compiler da seiner exe mit auf den Weg gibt, aber diese Systemeinstellung kann ja nur irgenwo in der Registry stehen.