Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Programm an Bildschirmauflösung optimal anpassen. (https://www.delphipraxis.net/130325-programm-bildschirmaufloesung-optimal-anpassen.html)

Jens Hartmann 6. Mär 2009 13:42


Programm an Bildschirmauflösung optimal anpassen.
 
Hallo, hab mal wieder eine Frage,

ich habe in meiner Form.Create folgende Funktion, um den Bildschirm voll asuzufühlen.

Delphi-Quellcode:
var
  HTaskbar: HWND;
  OldVal: LongInt;
begin
oldW := Width;
oldH := Height;
oldX := Left;
oldY := Top;
BorderStyle := bsNone;
FormStyle  := fsStayOnTop;
Left       := 0;
Top        := 0;
Height     := Screen.Height;
Width      := Screen.Width;
Funktioniert auch ganz gut. Jetzt habe ich allerding´s auf meinem
Laptop eine Auflösung von 1280x1024 und z.B auf meinem Desktop 1024x768.

Wie bekomme ich jetzt hin, das mein Programm sich optimal an die Bildschirmauflösung anpaßt.

Mit der folgenden Code in der Create, ist das zwar möglich höhere Auflösungen zu Zoomen, aber wenn ich z.B. die mit meinem Laptop kompilierte Datei auf meinem Desktop starte, wird ein Teil vom Fenster abgeschnitten.

Delphi-Quellcode:
´
  sWidth := Screen.MonitorFromWindow(Handle).Width / Width;
  sHeight := Screen.MonitorFromWindow(Handle).Height / Height;
  if sWidth < sHeight then
  begin
    ScaleBy(Round(Screen.MonitorFromWindow(Handle).Width * 1.02), Width);
  end
  else
  begin
    ScaleBy(Round(Screen.MonitorFromWindow(Handle).Height * 1.02), Height);
  end;
  WindowState := wsMaximized;

Bernhard Geyer 6. Mär 2009 13:47

Re: Programm an Bildschirmauflösung optimal anpassen.
 
Bitte keine Skalierung von Controls wenn der User nicht Große Schriftart oder ähnliches eingestellt hat. Der Button der Anwendung der bei 1024*768 auf 100*25 gestellt wurde sollte auch unter 1600*1200 die gleiche Pixelgröße haben wenn die Schriftgröße gleich. Alles ander schaut Amateurhaft aus.

Pass die Ausrichtung lieber mit Hilfe von Panels und entsprechenden Alignment an.

Namenloser 6. Mär 2009 13:54

Re: Programm an Bildschirmauflösung optimal anpassen.
 
Zitat:

Zitat von Bernhard Geyer
Pass die Ausrichtung lieber mit Hilfe von Panels und entsprechenden Alignment an.

In neueren Delphiversionen sollte es die "Anchors"-Eigenschaft geben, mit der sich die Layouts noch schneller erstellen lassen als mit Panels + Alignment.

neo4a 6. Mär 2009 13:55

Re: Programm an Bildschirmauflösung optimal anpassen.
 
Vielleicht hilft Dir das weiter:
Zitat:

VCL Komponente dynForm (TFormResizer) Delphi 7
-------------------------------------------------

Version 1.0 von Michael Kaliga, kaliga@freenet.de
nach einer Idee von David A. Price, dprice@erols.com (1999)

Eigenschaften:
dynForm passt alle Komponenten eines Formulares in der
Grösse und Position an, wenn die Formulargrösse verändert wird.

FormResizer1.InitializeForm scannt das Formular, legt in einer StringList
die Startwerte ab und erstellt Sicherungen von vorhandenen Grafiken:
Metafile's + Bitmap's, wobei Metafile's in Bitmaps konvertiert werden.

FormResizer1.InitializeForm berechnet die neuen Größen und Positionen der
einzelnen Komponenten aus den Startwerten (!!!) und passt die Form-Komponenten
dann an.
Da die Startwerte und nicht die aktuellen Größen verwendet werden, behält
das Formular immer sein Aussehen;
ein Zerreissen/Zerfleddern wie bei den Delphi-Funktionen ChangeScale und ScaleBy
entfällt also.
BTW. läuft auch unter D2009, hat das Skalieren von Images nicht optimal gelöst.

--
Andreas

Bernhard Geyer 6. Mär 2009 13:57

Re: Programm an Bildschirmauflösung optimal anpassen.
 
Zitat:

Zitat von NamenLozer
In neueren Delphiversionen sollte es die "Anchors"-Eigenschaft geben, mit der sich die Layouts noch schneller erstellen lassen als mit Panels + Alignment.

Gehen bei neueren Versionen die Anchors besser als bei D6? Bei größen veränderlichen Dialogen und anderer DPI-Auflösung kommt bei D6 schrott raus.

Jens Hartmann 6. Mär 2009 14:07

Re: Programm an Bildschirmauflösung optimal anpassen.
 
Also, Ideen hab ihr ja recht viele und recht schnell. Nur durch die vielen Unterschiede, weiß man natürlich gar nicht, was jetzt die beste Lösung ist.

Also, was ich genau benötige ist, eigentlich genau das was alle guten Programme machen. Sich ohne für den Nutzer einen optischen unterschied zu zeigen, an den Bildschirm anzupassen.

Das mit den Anchors, wäre eine Variante, allerdings, habe ich da momentan gar keine Ahnung von wie die genutzt werden. Gut dafür gibt es ja die Hilfe.

Mit der VCL Komponente hört sich Momentan relativ einfach an, hatte ich allerdings auch mal von der Skalierung gedacht, die allerdings nicht den von mir gewünschten Erfolg erziehlt hat.

Mit den Panal´s, vermute ich, das ich meine Komponenten auf verschiedene Panal´s lege, diesen dann gewisse Plätze zuweise, und grundsätzlich gar nicht´s an den größen der anderen Komponenten ändere. Also wenn ein Button z.b. 120x40 Pixel hat, behält er diese immer bei.

Wenn das der Fall ist, ist das ja eigendlich nicht das was ich will, weil ja dann irgendwo im formular freie Flächen entstehen werden.

[EDIT] Außerdem vermute ich, das ich einer kleinen Bildschirmauflösung arbeiten müsste, um später mit einer höheren arbeiten zu können.

neo4a 6. Mär 2009 14:15

Re: Programm an Bildschirmauflösung optimal anpassen.
 
In der Zeit, in der Du die bisherigen Antworten "benotest", hättest Du Dir z.B. mit der vorgeschlagenen Kompenten selbst ein Bild machen können. Du wärst überrascht, was man damit *erzielt*.

--
Andreas

RWarnecke 6. Mär 2009 14:17

Re: Programm an Bildschirmauflösung optimal anpassen.
 
Die beste Variante ist es über die Alignment und Anchors zu arbeiten. Mit diesen beiden Möglichkeiten brauchst Du Dir keine Gedanken machen, wie groß das Fenster nachher ist. Was macht Deine Scalierung, wenn ich das Fenster soweit verkleinere, dass ich unterhalb Deiner Ausgangsgröße komme ?

Jens Hartmann 6. Mär 2009 14:25

Re: Programm an Bildschirmauflösung optimal anpassen.
 
Zitat:

In der Zeit, in der Du die bisherigen Antworten "benotest", hättest Du Dir z.B. mit der vorgeschlagenen Kompenten selbst ein Bild machen können. Du wärst überrascht, was man damit *erzielt*.
Habe nach der Komponent gegoogelt, finde sie leider nicht. Außerdem, benote ich keine Beträge, ich möchte nur eine Vernünftige Diskussion, über verschieden Lösungen, um dann selber entscheiden zu können, was für mich dann wohl sinnvoll ist.

Zitat:

Was macht Deine Scalierung, wenn ich das Fenster soweit verkleinere, dass ich unterhalb Deiner Ausgangsgröße komme ?
Das Fenster geht über den Bildschirmrand raus, und an diese Objekt komme ich auch nicht ran

neo4a 6. Mär 2009 14:30

Re: Programm an Bildschirmauflösung optimal anpassen.
 
@Rolf.

Du hast aus meiner Sicht völlig Recht. Allerdings gebe ich den heute üblichen Auflösungsbereich zu bedenken: 24"-Monitoren stellen ohen Probleme 1900x1200 Pixel dar. Das erzeugt riesige Flächen, die gerade bei einfachen Design gar nicht mehr sinnvoll gefüllt werden können. Wenn man hier auch mit Schrift- Skalierung arbeitet, behält das Formular sein Aussehen in allen möglichen Auflösungen oder Formular-Größen. Eine Mindestgröße für Schrift und Size verhindert Unlesbarkeit, kann aber ein Vista-like Thumbview ergeben. Genau das macht die angesprochene Komponente und erzeugt nebenbei bei großen Auflösungen ein seniorenfreundliches Bild ;)

--
Andreas

Jens Hartmann 6. Mär 2009 14:34

Re: Programm an Bildschirmauflösung optimal anpassen.
 
Zitat:

Habe nach der Komponent gegoogelt, finde sie leider nicht.

Sorry, gefunden.

Bernhard Geyer 6. Mär 2009 14:40

Re: Programm an Bildschirmauflösung optimal anpassen.
 
@neo4a:

Wenn jemand eine hohe Auflösung hat so das er die Texte nicht mehr vernünftig lesen kann so wird er über die Systemsteuerung den Schriftgrad anpassen. Und jedes vernünftige Programm (Sonderpogramme wie Spiele oder ähnliches ausgenommen) sollte m.E. diese Einstellungen berücksichtigen und nicht nach eigenen Willen den User mit vergrößerten Buttons seine Definiton von Ergonomie aufdrücken.

@Jens:

Mit Anchors und Alignment kommt man eigentlich sehr weit ein gutes Design zu realisieren das auch bei anderen Auflösungen und Schriftgrößen gut aussieht.

Namenloser 6. Mär 2009 14:43

Re: Programm an Bildschirmauflösung optimal anpassen.
 
Zitat:

Zitat von Jens Hartmann
Also wenn ein Button z.b. 120x40 Pixel hat, behält er diese immer bei.

Jetzt mal anders gefragt: Was ist daran ein Problem? Ein größerer Button hat keinen größeren Nutzer. Vergrößere doch stattdessen nur die Teile, bei denen es auch wirklich Sinn macht, z.B. Textfelder oder Listen.
Ich persönlich hasse es, wenn Programmierer (vor allem Anfänger) ihre Buttons 200*200 Pixel groß machen, nur um das Formular zu füllen. Es sieht für meinen Geschmack einfach nur hässlich aus, und obendrein verschwendet es Platz, den man z.B. für andere Anwendungen nutzen könnte. Ich kenne auch keine professionelle Anwendung, die ihre Controls skaliert.

neo4a 6. Mär 2009 14:49

Re: Programm an Bildschirmauflösung optimal anpassen.
 
Liste der Anhänge anzeigen (Anzahl: 1)
@Jens
Ist es die, die ich mit angefügt habe?

Ich habe dort das Skalieren der Images auskommentiert, weil die Routine bei Png- Bildern versagt und vor allem die Bilder als Dateien (in das Programm-Verzeichnis - bäh) wegschreibt.

@Bernhard
Deine Sicht der Dinge ist so was von "Old-Style" ;). Bei Microsoft heißt das heute nämlich ganz knackig und xamlig User Experience.

Das klingt ja auch viel avantgardistischer als "Windows-Farbschema" und "Schriftgöße anpassen", was eh kein User kann. Seit es überall flasht und silverlightet, mag unser User dynamische Auflösungen, ob er will oder nicht.


--
Andreas

taaktaak 6. Mär 2009 14:49

Re: Programm an Bildschirmauflösung optimal anpassen.
 
Moin, Moin.

Möchte mal einen anderen Aspekt in die Diskussion einbringen:

Als Anwender erwarte ich auf allen (gängigen) Monitorgrößen ein aufgeräumtes und effizient genutztes Programmfenster. Weder unübersichtliche Anballungen von Controls, noch gähnende Leere auf einem Formular wirkt auf den Anwender ansprechend - mit anderen Worten: Deinen Denkansatz, das Formular möglichst auf allen genutzten Desktopgrößen immer Bildschirmfüllend darzustellen, halte ich für falsch.

Verwende ich einen besonders großen Monitor, möchte ich die Möglichkeit haben, mehrere Programmfenster im direkten Sichtkontakt zu halten. Ein Programm, das grundsätzlich den gesamten Monitor ausfüllt würde mich nur ärgerlich stimmen.

Jens Hartmann 6. Mär 2009 15:02

Re: Programm an Bildschirmauflösung optimal anpassen.
 
Liste der Anhänge anzeigen (Anzahl: 2)
Das ist ja auch genau, das was ich denke. Ich hänge mal 2 Screenshots an. Ich möcht einfach nur ein normales gutes Design.

Der Screenshot 1 zeigt die normale gute Auflösung im meinem Laptopformat und der shot2 den Problemfall.

Die Button und so, müssen und brauchen nicht größer oder kleiner werden. Nur wie z.B. das VirtualStringTree oder im oberen Bereich die Toolbar und so. Es darf halt nichts fehlen.

Ich denke ihr wisst was ich meine.

Gruß Jens

[EDIT]

Zitat:

Verwende ich einen besonders großen Monitor, möchte ich die Möglichkeit haben, mehrere Programmfenster im direkten Sichtkontakt zu halten. Ein Programm, das grundsätzlich den gesamten Monitor ausfüllt würde mich nur ärgerlich stimmen.
Da gebe ich Dir recht. ic denke Du meinst das selbe wie ich. Mit dem Monitor füllen, ist nur durch meine Versuche entstanden.

neo4a 6. Mär 2009 15:07

Re: Programm an Bildschirmauflösung optimal anpassen.
 
@Ralf

Ich stimme Dir zu. Es gibt allerdings Anwendungsbereiche (Monitoring, SDI- Interfaces wie bei BDE/MDE- Betriebs- und Messdatenerfassung) und User- Erwartungen, die einen formatfüllenden Ansatz erfordern. Dort gelten dann andere Erwartungshaltungen als Deine und meine.

--
Andreas

taaktaak 6. Mär 2009 15:16

Re: Programm an Bildschirmauflösung optimal anpassen.
 
Ok, in Spezialfällen wird die Anforderung gerechtfertigt sein - aber dann hat man natürlich genau die Probleme der Skalierung.
Die beiden Beispielbilder kann ich nicht so recht deuten. Mal anders herum gesagt: Basisansatz könnte sein, ein optimales Formular für die Auflösung 1024x768 zu entwerfen. Alle größeren verfügbaren Desktops bieten dann ungenutze Fläche für andere Programmfenster. Auflösungen unter 1024x768 werden nicht unterstützt. Will man besonders Vorsichtig sein, setzt man die Untergrenze bei 800x600.
Bekommt man Probleme, die Controls auf dem Form unterzubringen, hilft es oft (nicht immer) kritisch darüber nachzudenken, welche Informationen der Anwender sinnvollerweise tatsächlich auf einem Formular benötigt.

Jens Hartmann 6. Mär 2009 15:28

Re: Programm an Bildschirmauflösung optimal anpassen.
 
Zitat:

Die beiden Beispielbilder kann ich nicht so recht deuten.
Schau nur mal in den rechten Bildschirmrand. Da ich in einer Auflösung 1280x1024 das Programm erstellt habe, und die Ausführung in 1024x768 ist, fehlt z.B. der rechte Rand vom Program.

Aber ich denke ich versteh deinen Ansatz. Ich setze mein Auflösung des Formulars auf 1024x768, und fülle mein Programm dan mit den Komponenten passend aus.
Starte ich das Programm nun in einer größeren Auflösung, entstehen zwar leere Flächen, die ich aber dann entsprechen anpassen kann, so das es ganz ordendlich aussieht.

RWarnecke 6. Mär 2009 15:36

Re: Programm an Bildschirmauflösung optimal anpassen.
 
Hallo Jens,

genau dieses Problem wie Du es in Beitrag #16 beschrieben hast, kannst Du über Anchor und Alignment lösen. Ich würde die Anchors der Listen, PageControls, Panels, Toolbars und Textfeldern So einstellen, dass die Größe dieser Controls sich dementsprechend zur Größe des Fensters verhalten. Damit hast Du ein wirklich gutes und übersichtliches Desgin. Dabei ist es egal ob der User eine Auflösung von 1900x1200 hat oder Deine Anwendung nur mit 1024x786 fährt. Der einzigste Unterschied zwischen den beiden Auflösungen wäre dann, dass der User mit 1900x1200 Dein Programm startet in einer Deiner Listen 25 Einträge sieht und dann scrollen muss und der User mit der kleinen Auflösung meinetwegen nur 15 Einträge aus der Liste sieht und dann scrollen muss.

Jens Hartmann 6. Mär 2009 15:43

Re: Programm an Bildschirmauflösung optimal anpassen.
 
Zitat:

Der einzigste Unterschied zwischen den beiden Auflösungen wäre dann, dass der User mit 1900x1200 Dein Programm startet in einer Deiner Listen 25 Einträge sieht und dann scrollen muss und der User mit der kleinen Auflösung meinetwegen nur 15 Einträge aus der Liste sieht und dann scrollen muss.
Das wäre im prinzip egal. Ich habe eh noch ein Formuar, was die ideale Größe augfweißt um die Datenbank anzusehn. Die Form wird zur Auswertung eh aufgerufen.

Dort ist ein größe eingestellt, so das die Tabelle alle Felder in bester Größe hat.

Es geht mir halt um das Hauptformular, was möglichst Bildschirmfüllendist, (Muss nicht sein, wäre nur schön, da auf den Rechner nur diese eine Software laufen wird.) aber trotzallem ein schönes Design aufweißt.

Wie müsste ich den dann z.B. so eine Komponente einstellen.


[EDIT] Habe es probiert, und ich glaube ich weiß was Ihr meint. Werde mal versuche.

Aber trotzdem die Frage, wie würdest Du sowas einstellen. Damit es ein gutes Design wird

Bernhard Geyer 6. Mär 2009 15:59

Re: Programm an Bildschirmauflösung optimal anpassen.
 
Ich halte dein Design grundsätzlich was das obere viertel betrifft für verbesserungswürtig. Die ganzen vielen Panelrahmen schauen sch... aus.
Und die verschiebbaren Toolbarleisten habe ich schon immer gehasst. Und moderne GUI's wie Office 2007, Firefox, ... haben diese gar nicht mehr. Mit ein bischen Überlegen kann man die GUI ohne resizing der Buttons auch auf 1024*768 hin bekommen.

RWarnecke 6. Mär 2009 16:02

Re: Programm an Bildschirmauflösung optimal anpassen.
 
Zitat:

Zitat von Jens Hartmann
Aber trotzdem die Frage, wie würdest Du sowas einstellen. Damit es ein gutes Design wird

Schaue Dir doch meine beiden Programme SystemInfo und Code-Orakel an. Der Aufbau der einzelnen Controls sind mit Align und den Werten alClient, alBottom und alTop gelöst.

Ein kleines Beispiel, wenn Du ein Edit-Feld hast, was an seiner Position stehen bleiben soll. Aber nach rechts freien Platz hast, dann stellste einfach den Wert Anchors.akRight auf True. Nun bleibt Dein Edit-Feld links an der Position wo Du es plaziert hast und wenn Dein Fenster recht vom Editfeld jetzt größer wird, dann vergrößert sich auch Dein Editfeld nach rechts. Dabei bleibt der Abstand zum Fensterrand immer der gleiche.

Auch wenn ich mich wiederhole, aber Anchor und Alignment sind in vielen Fällen Deine Freunde um ein vernüftiges Desgin hinzubekommen. So ist zumindest meine persönliche Meinung.

Jens Hartmann 6. Mär 2009 16:19

Re: Programm an Bildschirmauflösung optimal anpassen.
 
Danke Rolf,

ich glaube, das das auch genau das ist, was ich gesucht habe. Mittlerweile sieht meine Oberfläche schon fast so aus, wie ich es will. (Bis auf so ein paar störige Panel´s) Die hatte ich vergessen.

Ich teste das mal, aber schon mal besten Dank für die schnelle Hilfe.

Gruß

Jens

Jens Hartmann 6. Mär 2009 17:59

Re: Programm an Bildschirmauflösung optimal anpassen.
 
Habe das jetzt alles so hinbekommen wie ich wollte. Bis auf im oberen Bereich Rechts. Als Untergrund habe ich mit der Eigenschaft alTop und den Anchors Left,Right und Top eine ControlBar. Diese wird auch an die jeweilige Bildschirmauflösung angepaßt.

Darauf habe ich verschiedene Coolbar´s mit verschiedenen Bands. Diese sind auch jetzt an die Größe 1024 angepaßt. Allerdings, entsteht dann rechts bei größerer Auflösung freier Platz.

Damit könnte ich zwar Leben, es wäre aber schön wenn man das irgendwie noch anpassen könnte

Gruß

Jens

RWarnecke 6. Mär 2009 18:38

Re: Programm an Bildschirmauflösung optimal anpassen.
 
Zitat:

Zitat von Jens Hartmann
Damit könnte ich zwar Leben, es wäre aber schön wenn man das irgendwie noch anpassen könnte

Lass doch den Platz frei. Ich kennen kein Programm welches es diesen Platz nutzt.

Jens Hartmann 6. Mär 2009 18:46

Re: Programm an Bildschirmauflösung optimal anpassen.
 
Ja, das wäre wie gesagt kein Problem.

Naja, dann sag ich mal wieder Danke für die gute Hilfe. Jetzt sieht meine Oberfläche aufjedenfall so aus, wie ich Sie mir vorgestellt habe.

Danke, nochmal

Gruß

Jens

beanbear6 18. Apr 2013 15:47

AW: Programm an Bildschirmauflösung optimal anpassen.
 
Hi Neo,
hab gerade versucht Deine Kompo dynForm zu
installieren, da krieg ich die Fehlermeldung
dass die .res fehlt.
Ich arbeite mit D7Enterprise. Kannst mir da
bitte helfen??
Gruß aus Passau
beanbear6


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:07 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz