Discussion:
Unabhängigkeit von Bildschirm Auflösung
(zu alt für eine Antwort)
Frank Dzaebel
2003-08-17 07:24:42 UTC
Permalink
Hallo,
.
Frage: wie kann ich unabhängig von der Bildschirm-
Auflösung programmieren ?
.
Problem: Windows-Forms-Steuerelemente verschieben sich
unproportional bei verschiedenen Bildschirm-Auflösungen.
.
Beispiel: Öffnen eines WinForm-Projektes[1280*1024],
plazieren von Buttons auf der Form, speichern. Dann unter
[1024*768] öffnen. Dann sind (z.B.) die Hälfte der
Buttons verschwunden.
.
Grund: die Location-Attribute der Steuerelemente sind
immer noch auf die (alte) Auflösung bezogen.
.
Für eine Antwort wäre ich dankbar.
Frank Dzaebel
Markus Kleinlercher
2003-08-17 09:49:36 UTC
Permalink
Hallo Frank!

Wenn ich deine Frage richtig verstanden hab, dann gehts dir weniger um die
Bildschirmauflösung und weniger um die Darstellung zur Entwicklungszeit.
Eigentlich gehts doch wohl um die Größe der Form (bzw des Fensters) und das
dann zur Laufzeit des Programms.

Hast du die die Eigenschaften Anchor und Dock einmal angeschaut?

lg
Markus
Frank Dzaebel
2003-08-17 11:33:25 UTC
Permalink
Ausgangsfrage: Wie kann ich unabhängig von der Bildschirm-
Auflösung programmieren ?
Zusatzfrage : Kann die Sperrung des Setzens größerer
Werte als die maximalen Form.Size-Ausmaße
aufgehoben werden ?
Status : [noch ungelöst]
---------------------------------

Hallo Markus,

Die Anchor- und Dock-Eigenschaften sind nützliche
Resizing-Eigenschaften, mit denen ich oft arbeite.
In diesem Zusammenhang sind sie jedoch ohne Belang.

Es geht schon um die Darstellung zur Entwicklungszeit !
Man möchte ja schliesslich auch Buttons hinzufügen, oder
deren Position bei Entwicklung ändern können.

Das Hauptproblem scheint mir, das Visual Studio .NET es
nicht zuläßt, die Breite/Höhe der Form größer als die
maximale Breite/Höhe des Primär-Bildschirms zu setzen.
Dadurch werden dann einige Buttons gar nicht mehr
zugänglich.

danke, Frank
-----Originalnachricht-----
Hallo Frank!
Wenn ich deine Frage richtig verstanden hab, dann gehts
dir weniger um die
Bildschirmauflösung und weniger um die Darstellung zur
Entwicklungszeit.
Eigentlich gehts doch wohl um die Größe der Form (bzw
des Fensters) und das
dann zur Laufzeit des Programms.
Hast du die die Eigenschaften Anchor und Dock einmal
angeschaut?
lg
Markus
.
Herfried K. Wagner [MVP]
2003-08-17 11:51:53 UTC
Permalink
Hallo Frank!
Post by Frank Dzaebel
Das Hauptproblem scheint mir, das Visual Studio .NET es
nicht zuläßt, die Breite/Höhe der Form größer als die
maximale Breite/Höhe des Primär-Bildschirms zu setzen.
Dadurch werden dann einige Buttons gar nicht mehr
zugänglich.
Das ist eine Einschränkung des OS, das es nicht zulässt, Formulare zu
"verwalten", die grösser als der Bildschirm sind.

Grüsse,
Herfried K. Wagner
--
MVP · VB Classic, VB .NET
http://www.mvps.org/dotnet
Herfried K. Wagner [MVP]
2003-08-17 11:24:52 UTC
Permalink
Hallo Frank!
Post by Frank Dzaebel
Frage: wie kann ich unabhängig von der Bildschirm-
Auflösung programmieren ?
Was genau stellst du dir darunter vor? Automatisches Skalieren der
Controls entsprechend der Formulargrösseß Dies kannst du über Setzen der
Eigenschaften Anchor und Dock der Controls erreichen.
Post by Frank Dzaebel
Problem: Windows-Forms-Steuerelemente verschieben sich
unproportional bei verschiedenen Bildschirm-Auflösungen.
???
Post by Frank Dzaebel
Beispiel: Öffnen eines WinForm-Projektes[1280*1024],
plazieren von Buttons auf der Form, speichern. Dann unter
[1024*768] öffnen. Dann sind (z.B.) die Hälfte der
Buttons verschwunden.
Wenn das Formular zu klein ist, weil es für eine höhere Auflösung
geschrieben wurde, ja. Aber man sollte ohnehin immer für geringe
Auflösungen "mitdenken", damit die Anwendung auch z.B. bei 800 x 600
ordentlich aussieht.
Post by Frank Dzaebel
Grund: die Location-Attribute der Steuerelemente sind
immer noch auf die (alte) Auflösung bezogen.
Ja, wie sollten sie denn sonst sein?

HTH,
Herfried K. Wagner
--
MVP · VB Classic, VB .NET
http://www.mvps.org/dotnet
Frank Dzaebel
2003-08-17 12:21:11 UTC
Permalink
Hallo Herfried,
ich finde es enorm, hier auch Antworten von MVPs zu
bekommen! Damit möchte ich allerdings keineswegs die
Qualität der anderen in Frage stellen...
Post by Markus Kleinlercher
Hallo Frank!
Post by Frank Dzaebel
Frage: wie kann ich unabhängig von der Bildschirm-
Auflösung programmieren ?
Was genau stellst du dir darunter vor?
Automatisches Skalieren der
Controls entsprechend der Formulargrösse.
Dies kannst du über Setzen der
Eigenschaften Anchor und Dock der Controls erreichen.
Genau das meine ich. In diesem Fall kann ich das aber
eben nicht über Anchor oder Dock-Einstellungen machen.
Das Problem ist, das Visual Studio .NET 2003 die maximale
Größe der Form (frm.Size) auf die des primären
Bildschirms automatisch begrenzt ! Könnte dies verhindert
werden, so würden die "verschwundene Buttons"
wahrscheinlich bei Entwicklungs- und Laufzeit auch wieder
sichtbar! (Sicherlich ist die automatische Form.Size-
Begrenzung in vielen Fällen ein nützliches Feature!)
Post by Markus Kleinlercher
Post by Frank Dzaebel
Problem: Windows-Forms-Steuerelemente verschieben sich
unproportional bei verschiedenen Bildschirm-Auflösungen.
???
Post by Frank Dzaebel
Beispiel: Öffnen eines WinForm-Projektes[1280*1024],
plazieren von Buttons auf der Form, speichern.
Dann unter
[1024*768] öffnen. Dann sind (z.B.) die Hälfte der
Buttons verschwunden.
Wenn das Formular zu klein ist, weil es für eine
höhere Auflösung
geschrieben wurde, ja. Aber man sollte ohnehin immer
für geringe
Auflösungen "mitdenken", damit die Anwendung auch
z.B. bei 800 x 600 ordentlich aussieht.
Ich entnehme dem, man sollte also die Anwendung in
Minimalauflösung entwickeln. Vielleicht ist das dann auch
schon die Lösung (als Workaround). Dann klappts
vielleicht auch mit den Anchor- und Dock-Eigenschaften?
Ich probier das mal aus.
Post by Markus Kleinlercher
Post by Frank Dzaebel
Grund: die Location-Attribute der Steuerelemente sind
immer noch auf die (alte) Auflösung bezogen.
Ja, wie sollten sie denn sonst sein?
Stimmt, die Location-Attribute dürfen nicht geändert
werden, sorry. Aber die Form.Size dann eigentlich auch
nicht und dann würde ja auch alles wieder funktionieren ..

Für eine Reaktion hierauf, wäre dankbar.
danke, Frank
Post by Markus Kleinlercher
HTH,
Herfried K. Wagner
--
MVP · VB Classic, VB .NET
http://www.mvps.org/dotnet
.
Herfried K. Wagner [MVP]
2003-08-18 09:07:42 UTC
Permalink
Hallo Frank!
Ein wichtiger Punkt ist auch der DPI-Faktor des
Bildschirms. Als ich ihn auf 75% setzte, dann das .NET-
Projekt öffnete, dann die automatisch von .NET
verkleinerte Form-Size auf die Original-Size hochsetzte,
waren die Buttons wieder erreichbar und fast an den
richtigen Stellen. Mir scheint, ich lerne zur Zeit ein
bißchen Grundlagen der Grafik-Programmierung.
Das wird noch dauern :) ...
Schau dir auch die Hilfe zur Eigenschaft AutoScaleBaseSize des Formulars
an.

HTH,
Herfried K. Wagner
--
MVP · VB Classic, VB .NET
http://www.mvps.org/dotnet
Frank Dzaebel
2003-08-17 12:52:49 UTC
Permalink
Hallo Rolf,

das sieht erfolgversprechend aus!
Während mir die am Anfang geschilderten Codezeilen
bekannt waren, ist das "this.Scale(..)" ein kleiner
Leckerbissen für mich. Spart einiges an Arbeit.
Ich teste das, und schreibe dann nochmal

danke, Frank
-----Originalnachricht-----
Hallo Frank,
die gültige Bildschirmauflösung bekommst Du mit
int akt_width = Screen.PrimaryScreen.WorkingArea.Width;
int akt_height = Screen.PrimaryScreen.WorkingArea.Height;
So kannst Du im FormLoad_EventHandler einen Faktor
berechnen dessen Wert dem
Verhältnis von alter Breite zu neuer Breite entspricht.
z.B. alte Bildschirmbreite 1024 pixel, neue Breite 1600
pixel -> faktor =
1,5625f
float faktorBreite = alteBreite/(float)
Screen.PrimaryScreen.WorkingArea.Width;
float faktorHöhe = alteHöhe/(float)
Screen.PrimaryScreen.WorkingArea.Height;
Damit werden alle Locations und Sizes von Form und
Controls neu berechnet.
oder mit
this.Scale(float dx,float dy);
this.Scale(faktorBreite,faktorHöhe);
Hallo,
..
Frage: wie kann ich unabhängig von der Bildschirm-
Auflösung programmieren ?
..
Problem: Windows-Forms-Steuerelemente verschieben sich
unproportional bei verschiedenen Bildschirm-Auflösungen.
..
Beispiel: Öffnen eines WinForm-Projektes[1280*1024],
plazieren von Buttons auf der Form, speichern. Dann unter
[1024*768] öffnen. Dann sind (z.B.) die Hälfte der
Buttons verschwunden.
..
Grund: die Location-Attribute der Steuerelemente sind
immer noch auf die (alte) Auflösung bezogen.
..
Für eine Antwort wäre ich dankbar.
Frank Dzaebel
.
David Kunz
2003-08-18 05:37:47 UTC
Permalink
Hallo,

bei dem Thema fällt mir auch noch eine offene Frage ein.
In meinem Editor soll der User Objekte auf Seiten zeichnen, und diese Seiten
speichern können. Damit diese Seiten unabhängig von der Auflösung sind,
würde ich die Seitengröße festlegen und die Positionen absolut speichern.
Wenn ich die Seitengröße auf 900 x 768 festlege, ist so eine Seite bei einer
Auflösung von 800 x 600 nicht komplett zu sehen.
Ich frage mich (oder besser euch), wie das z.B. in Word gelöst ist. Gibt es
eine Möglichkeit das vernünfit mit relativen Positionsangaben zu machen?

Danke & Gruß
David
Rolf Ruisinger
2003-08-18 06:46:12 UTC
Permalink
Hallo David,

mein Vorschlag :
- speichern von Proportionen für die Seite und alle Objekte. (Breite/Höhe)
- speichern von Locations als Quotienten aus

z.b. xfaktor = Seitenbreite/Objekt.Location.X, ( also von 0 bis 1)

etsprechend für Y, sodass
für die Berechnung der Position innerhalb einer beliebig skalierten Seite
gilt :
Objekt.Location.X = neueSeite.Width * faktor
Vielleicht läßt sich das in eine Klasse implementieren die die
Zeichenobjekte repräsentiert.

MfG
Rolf
Post by Frank Dzaebel
Hallo,
bei dem Thema fällt mir auch noch eine offene Frage ein.
In meinem Editor soll der User Objekte auf Seiten zeichnen, und diese Seiten
speichern können. Damit diese Seiten unabhängig von der Auflösung sind,
würde ich die Seitengröße festlegen und die Positionen absolut speichern.
Wenn ich die Seitengröße auf 900 x 768 festlege, ist so eine Seite bei einer
Auflösung von 800 x 600 nicht komplett zu sehen.
Ich frage mich (oder besser euch), wie das z.B. in Word gelöst ist. Gibt es
eine Möglichkeit das vernünfit mit relativen Positionsangaben zu machen?
Danke & Gruß
David
Herfried K. Wagner [MVP]
2003-08-18 09:09:13 UTC
Permalink
Hallo David!
Post by David Kunz
In meinem Editor soll der User Objekte auf Seiten zeichnen,
und diese Seiten speichern können. Damit diese Seiten unabhängig
von der Auflösung sind, würde ich die Seitengröße festlegen und
die Positionen absolut speichern.
Wenn ich die Seitengröße auf 900 x 768 festlege, ist so eine
Seite bei einer Auflösung von 800 x 600 nicht komplett zu sehen.
Ich frage mich (oder besser euch), wie das z.B. in Word gelöst ist. Gibt es
eine Möglichkeit das vernünfit mit relativen Positionsangaben zu machen?
Bei Word wird sicher nicht ein riesengrosses Control verwendet, sondern
die Informationen in einer Datenstruktur gespeichert, deren relevante
Teile dann beim Scrollen in den sichtbaren Bereich "gepinselt" werden.

HTH,
Herfried K. Wagner
--
MVP · VB Classic, VB .NET
http://www.mvps.org/dotnet
Loading...