![]() |
Bildschirmauflösung einstellen / skalieren von Formularen
Hallo zusammen
Ich bin derzeit auf der Suche nach einer allgemein gültigen Lösung zur Programmeinstellung unter verschiedenen Bildschirmauflöungen unter Delphi 2.0. Ein leidiges Problem: Entwicklung des Programms bei einer Bildschirmauflösung bei 1024 x 768 und der Anwender versucht, das Programm bei 1280 x 1024 oder 640 x 480 auszuführen. Das Resultat kennen Sie: einige Dialogelemente sind nicht mehr sichtbar und damit auch nicht mehr bedienbar. Mit folgendem Codebeispiel kann die Auflösung angepasst werden: CodeBsp. : Zur Einstellung der Bildschirmauflösung const ScreenHeightDev = 768; ScreenWidthDev = 1024; procedure TForm1.FormCreate(Sender: TObject); var x, y: integer; begin Scaled := true; x := Screen.width; y := screen.height; if (y <> ScreenHeightDev) or (x <> ScreenWidthDev) then begin form1.height := (form1.clientheight * y div ScreenHeightDev) + form1.height-form1.clientheight; form1.width := (form1.clientwidth * x div ScreenWidthDev) + form1.height-form1.clientheight ; scaleBy(x, ScreenwidthDev); end; end; Das Problem kann also für die erste Unit gelöst werden. Aber ich habe 35 Units zu skalieren. Wie kann man das Codebeispiel global anwenden ? Denn Form1 ändert sich bei jeder Unit. Am besten wäre es, wenn ich zu Beginn meines Programms ein Aufruf von z.B. Optionen und Einstellungen die Auflösung für das Programm einstellen kann. Der Anwender kann dann die verschiedenen Auflösungen auswählen. Das kann ich zum Beispiel mit einer Radiogroup abfragen. Das ist nicht das Problem. Das Problem ist: dass ich eine Prozedur benötige, die auf alle verfügbaren ProgrammUnits anwenden lässt. Wer kann mir helfen ? Für Eure Mitwirkung danke ich im voraus. Gruss Spargeltarzan |
Re: Bildschirmauflösung einstellen / skalieren von Formulare
Wieso postest du nicht in dienem
![]() Zu deinem Problem: Du kannst über Screen.Forms alle Formulare durchiterieren und anpassen. |
Re: Bildschirmauflösung einstellen / skalieren von Formulare
In einer Unit, welche von allen anderen geladen wird eine Prozedure schreiben, welche den Code aus deiner FormCreate enthält und die einzustellende Form als Parameter übergeben. Zweite Möglichkeit: das im Prinzip gleiche Verfahren über eine Include-Datei.
Also: in irgendwas.pas folgende Procedure:
Delphi-Quellcode:
Diese dann über USES oder INCLUDE in deine Units welche scaliert werden sollen einbinden und aufrufen
procedure FormScale(f: TForm);
var x, y: integer; begin Scaled := true; x := Screen.width; y := screen.height; if (y <> ScreenHeightDev) or (x <> ScreenWidthDev) then begin f.height := (f.clientheight * y div ScreenHeightDev) + f.height - f.clientheight; f.width := (f.clientwidth * x div ScreenWidthDev) + f.height - f.clientheight ; scaleBy(x, ScreenwidthDev); end; end;
Delphi-Quellcode:
Nicht getestet, sollte aber funktionieren!
procedure TForm1.Create.... (oder irgend einandere passende Prozedure/Funktion)
begin .... FormScale(Form1); // und die zu ändernde Form übergeben .... end; [EDIT] was ist scaled? - eine Varable von dir? wenn ja, muss die natürlich auch an die Procedure übergeben werden: procedure FormScale(f: TForm; var scaled: Boolean); Frage ist ob diese benötigt wird. |
Re: Bildschirmauflösung einstellen / skalieren von Formulare
An HiWieGehts
Scaled ist eine Eigenschaft von TForm in Delphi 2.0: Verwendet für Komponente TForm Deklaration property Scaled: Boolean; Beschreibung Die Eigenschaft Scaled bestimmt, ob das Formular durch den Wert in der Eigenschaft PixelsPerInch skaliert wird. Falls Scaled True ist und sich der Wert von PixelsPerInch von den aktuellen Systemeinstellungen unterscheidet, wird das Formular auf eine neue Größe skaliert. Wenn Scaled False ist, wird ohne Beachtung des Werts PixelsPerInch nicht skaliert. Der Standardwert ist True. Gruss Spargeltarzan P.S. Danke für Deine Prozdur, welche ich versuchen werde, einzubinden. |
Re: Bildschirmauflösung einstellen / skalieren von Formulare
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo
Ich hab das Problem soweit gelöst. Ich hab eine Delphi 6 - Routine auf D2 umgeschrieben und mit Deiner Prozedur FormScale behandelt. Das ist die derzeitige Lösung: unit wood38; (meine Unit) interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, Buttons, StdCtrls; type Taufloesung3 = class(TForm) Button1: TButton; Label4: TLabel; Label5: TLabel; Label1: TLabel; Label2: TLabel; Label3: TLabel; Label6: TLabel; Label8: TLabel; Edit1: TEdit; Edit2: TEdit; Button3: TButton; BitBtn1: TBitBtn; procedure Button1Click(Sender: TObject); procedure Button3Click(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; var aufloesung3: Taufloesung3; ScreenHeightDev,ScreenWidthDev: integer; implementation {$R *.DFM} procedure Formscale(f:TForm); var sWidth: Double; sHeight: Double; begin { ScreenHeightDev:=strtoint(aufloesung.edit1.text); ScreenWidthDev:=strtoint(aufloesung.edit2.text); } sWidth := f.ClientWidth / Screen.Width; sHeight := f.ClientHeight / Screen.Height; if sWidth < sHeight then begin f.ScaleBy(Round(f.ClientWidth * 1.02),f.ClientWidth); end else begin f.ScaleBy(Round(f.ClientWidth * 1.02), f.ClientHeight); end; f.WindowState := wsMaximized; end; procedure Taufloesung3.Button1Click(Sender: TObject); begin label4.caption:=inttostr(screen.width); label5.caption:=inttostr(screen.height); end; procedure Taufloesung3.Button3Click(Sender: TObject); var I: Integer; begin ScreenWidthDev:=strtoint(edit1.text); ScreenHeightDev:=strtoint(edit2.text); label4.caption:=edit1.text; label5.caption:=edit2.text; For I := 0 to Screen.FormCount-1 do formscale(Screen.Forms[I]); For I := 0 to Screen.FormCount-1 do screen.forms[i].visible:=false; showmessage('Please Wait until Form is closed'); end; end. Screenshot beigefügt, falls jemand an dieser Problemlösung teilhaben möchte. Habt dank an alle, die mir geschrieben haben. Gruss Spargeltarzan |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:56 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz