myCSharp.de - DIE C# und .NET Community
Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 
 | Suche | FAQ

» Hauptmenü
myCSharp.de
» Startseite
» Forum
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Suche
» Regeln
» Wie poste ich richtig?
» Forum-FAQ

Mitglieder
» Liste / Suche
» Wer ist wo online?

Ressourcen
» openbook: Visual C#
» openbook: OO
» Microsoft Docs

Team
» Kontakt
» Übersicht
» Wir über uns

» myCSharp.de Diskussionsforum
Du befindest Dich hier: Community-Index » Diskussionsforum » Entwicklung » GUI: Windows-Forms » DPI Scaling Multi Resolutions and DPI Settings
Letzter Beitrag | Erster ungelesener Beitrag Druckvorschau | Thema zu Favoriten hinzufügen

Antwort erstellen
Zum Ende der Seite springen  

DPI Scaling Multi Resolutions and DPI Settings

 
Autor
Beitrag « Vorheriges Thema | Nächstes Thema »
Chevy77 Chevy77 ist männlich
myCSharp.de-Mitglied

Dabei seit: 18.07.2018
Beiträge: 36
Entwicklungsumgebung: VS 2017


Chevy77 ist offline

DPI Scaling Multi Resolutions and DPI Settings

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hi,

ich habe DPI Aware erfolgreich getestet. Melde ich mich in Win10 nur mit einem Monitor an, startet die Winforms App wie gewollt:

Auf 1k/100% scaling mit 96dpi
Auf 4k/300% scaling mit 288dpi

Soweit so cool.

Jetzt will ich die App so haben, dass sie auf dem Monitor auf dem sie startet richtig skaliert.

Ist mein Hauptbildschirm der 4k Monitor, dann startet die App auf dem 4k Monitor richtig mit 288dpi. Start ich die App aber auf dem 1k Monitor, benutzt sie leider auch 288dpi, was falsch ist.

Die Form.Scale(...) Methode hab ich nach InitializeComponent() getestet, funktioniert aber nicht wie gewollt.

Was muss ich tun, damit die App auf dem 1k Monitor mit 96dpi startet?
26.07.2019 14:47 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Spook Spook ist männlich
myCSharp.de-Mitglied

Dabei seit: 28.10.2008
Beiträge: 201
Entwicklungsumgebung: VS2015 Professional
Herkunft: Esslingen a.N.


Spook ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hallo Chevy77,

dies sollte mit Hilfe folgender Einstellungen funktionieren:

 Setting the default DPI awareness for a process

Unsere Anwendung wechselt automatisch die Skalierung je nach Monitor, auch im laufenden Betrieb, wenn man sie zwischen den Monitoren verschiebt, sobald du

XML-Code:
<dpiAwareness>PerMonitor</dpiAwareness>

festlegst.


Grüße
spooky
29.07.2019 08:15 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Chevy77 Chevy77 ist männlich
myCSharp.de-Mitglied

Dabei seit: 18.07.2018
Beiträge: 36
Entwicklungsumgebung: VS 2017

Themenstarter Thema begonnen von Chevy77

Chevy77 ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Ich habe das in der App Config, es skaliert auch zum App Launch, aber nicht "on the fly" zB beim Fenster auf einen anderen Monitor ziehen.

XML-Code:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <startup>
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.8" />
    </startup>
   <System.Windows.Forms.ApplicationConfigurationSection>
      <add key="DpiAwareness" value="PerMonitorV2" />
   </System.Windows.Forms.ApplicationConfigurationSection>
</configuration>

Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Chevy77 am 29.07.2019 09:01.

29.07.2019 09:01 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Spook Spook ist männlich
myCSharp.de-Mitglied

Dabei seit: 28.10.2008
Beiträge: 201
Entwicklungsumgebung: VS2015 Professional
Herkunft: Esslingen a.N.


Spook ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Bei mir sieht der Eintrag wie folgt aus:

XML-Code:
  <application xmlns="urn:schemas-microsoft-com:asm.v3">
    <windowsSettings>
      <dpiAwareness xmlns="http://schemas.microsoft.com/SMI/2016/WindowsSettings">PerMonitor</dpiAwareness>
      <dpiAware xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">true</dpiAware>
    </windowsSettings>
  </application>

Versuche es mal damit.
29.07.2019 09:17 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Chevy77 Chevy77 ist männlich
myCSharp.de-Mitglied

Dabei seit: 18.07.2018
Beiträge: 36
Entwicklungsumgebung: VS 2017

Themenstarter Thema begonnen von Chevy77

Chevy77 ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Deine Settings sind in der Manifest Datei und die überschreiben die App.config.
Laut MSDN soll man es per App.config machen, wie ich also.
29.07.2019 09:26 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Abt
myCSharp.de-Team

avatar-4119.png


Dabei seit: 20.07.2008
Beiträge: 13.054
Herkunft: Stuttgart/Stockholm


Abt ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Und Dein Betriebssystem erfüllt auch die dokumentierten Anforderungen, wie zB. die OS Version? Ebenso  Configuring your Windows Forms app for high DPI support beachtet?
Das übersehen die meisten...
29.07.2019 10:04 Beiträge des Benutzers | zu Buddylist hinzufügen
Spook Spook ist männlich
myCSharp.de-Mitglied

Dabei seit: 28.10.2008
Beiträge: 201
Entwicklungsumgebung: VS2015 Professional
Herkunft: Esslingen a.N.


Spook ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hallo Chevy77,

ich habe mich damals an dieses Dokument gehalten.
Beim Überfliegen dieses finde ich diesen Abschnitt:

Zitat:
We recommended that you specify the default process DPI awareness via a manifest setting.

Ich kann nur sagen, dass es mit diesen Werten funktioniert (unter Windows 10 1809).

Grüße
29.07.2019 10:08 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Chevy77 Chevy77 ist männlich
myCSharp.de-Mitglied

Dabei seit: 18.07.2018
Beiträge: 36
Entwicklungsumgebung: VS 2017

Themenstarter Thema begonnen von Chevy77

Chevy77 ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Meine Anleitung von 2017
 https://docs.microsoft.com/de-de/dotnet/...n-windows-forms
"Enable per-monitor DPI awareness in the app.config file."


Dieses Beispiel hat mir geholfen meine Testanwendung perMonitorV2 aware zur Laufzeit zu machen:
 https://emoacht.wordpress.com/2013/10/30...-windows-forms/
29.07.2019 11:01 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Chevy77 Chevy77 ist männlich
myCSharp.de-Mitglied

Dabei seit: 18.07.2018
Beiträge: 36
Entwicklungsumgebung: VS 2017

Themenstarter Thema begonnen von Chevy77

Chevy77 ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Ich habe,

das Form designed in 96px mit einer Breite von 960px.
Wenn ich es auf den 4k Monitor verschiebe ist es 2140px breit.

2140/960 = ~2,2

Der Me.Scale Faktor ist aber 1,5.
Wie kommt es zu diesem Unterschied?

DPI.Scaling Methode Font und:

Code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
   Private Sub AdjustWindow()
      If (_dpi = 0) OrElse (_dpi = _dpiNew) Then Exit Sub 'Abort.

      Dim factor As Single = _dpiNew / _dpi

      _dpi = _dpiNew

      'Adjust location and size of Controls (except location of this window itself).
      Me.Scale(New SizeF(factor, factor))
      'Me.Scale(factor)


      'Adjust Font size of Controls.
      Me.Font = New Font(Me.Font.FontFamily,
                         Me.Font.Size * factor,
                         Me.Font.Style)

      'Adjust Font size of Buttons.
      '(Each Font is individually specified at design time)
      For Each b As Button In GetChildInControl(Me).OfType(Of Button)()
         b.Font = New Font(b.Font.FontFamily,
                           b.Font.Size * factor,
                           b.Font.Style)
      Next

      For Each c As CheckBox In GetChildInControl(Me).OfType(Of CheckBox)()
         If c.Name = "CheckBox2" Then
            c.Font = New Font(c.Font.FontFamily,
                              c.Font.Size * factor,
                              c.Font.Style)
         End If

      Next

      For Each l As Label In GetChildInControl(Me).OfType(Of Label)()
         l.Font = New Font(l.Font.FontFamily,
                           l.Font.Size * factor,
                           l.Font.Style)
         If l.Image IsNot Nothing Then
            l.Image = Resize(l.Image, l.Image.Width * factor, l.Image.Height * factor)
         End If

      Next
   End Sub
01.08.2019 10:35 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Zwischen diesen beiden Beiträgen liegen mehr als 2 Monate.
Chevy77 Chevy77 ist männlich
myCSharp.de-Mitglied

Dabei seit: 18.07.2018
Beiträge: 36
Entwicklungsumgebung: VS 2017

Themenstarter Thema begonnen von Chevy77

Chevy77 ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hello again! Lebt hier noch jemand?! Alles cool, hat sich nur eine neue Frage aufgetan zu dem Thema:

In den Projekteigenschaften eines WinForms Projektes gibt es den Schalter "Enable Application Framework". Leider können wir den nicht aktivieren, da wir dann ordenlich den Start unser Anwendung umprogrammieren müssen. Das kriegt hier keiner sicher hin, ist meine Unterstellung.

1. Was macht dieser Haken? Google hilft mir nicht.
2. Wenn ich den abgehakt habe, gelten die dpi Settings aus der app.config nicht. Ich könnte dann zwar per shared sub main und api Funktionen den dpi mode ändern, aber das geht bei uns auch nicht bis zum Ende, weil wir kein "Application.Run(new FormX) haben. Ohne das, schaltet der mode auch nicht um. (Seit April sieht man den dpi mode im Taskmanager, man muss die Spalte dort einfügen)
10.10.2019 10:38 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
KroaX KroaX ist männlich
myCSharp.de-Mitglied

avatar-4080.jpg


Dabei seit: 31.08.2009
Beiträge: 278
Herkunft: Köln


KroaX ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

10.10.2019 11:54 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Chevy77 Chevy77 ist männlich
myCSharp.de-Mitglied

Dabei seit: 18.07.2018
Beiträge: 36
Entwicklungsumgebung: VS 2017

Themenstarter Thema begonnen von Chevy77

Chevy77 ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

sehr geil, danke das hab ich gebraucht.
10.10.2019 13:06 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Baumstruktur | Brettstruktur       | Top 
myCSharp.de | Forum Der Startbeitrag ist älter als 2 Monate.
Antwort erstellen


© Copyright 2003-2019 myCSharp.de-Team | Impressum | Datenschutz | Alle Rechte vorbehalten. | Dieses Portal verwendet zum korrekten Betrieb Cookies. 15.10.2019 09:15