AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Bildschirmauflösung einstellen / skalieren von Formularen
Thema durchsuchen
Ansicht
Themen-Optionen

Bildschirmauflösung einstellen / skalieren von Formularen

Ein Thema von Spargeltarzan · begonnen am 31. Jul 2009 · letzter Beitrag vom 22. Aug 2009
Antwort Antwort
Spargeltarzan
(Gast)

n/a Beiträge
 
#1

Bildschirmauflösung einstellen / skalieren von Formularen

  Alt 31. Jul 2009, 02:45
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
  Mit Zitat antworten Zitat
Namenloser

Registriert seit: 7. Jun 2006
Ort: Karlsruhe
3.724 Beiträge
 
FreePascal / Lazarus
 
#2

Re: Bildschirmauflösung einstellen / skalieren von Formulare

  Alt 31. Jul 2009, 03:00
Wieso postest du nicht in dienem alten Thread weiter?

Zu deinem Problem: Du kannst über Screen.Forms alle Formulare durchiterieren und anpassen.
  Mit Zitat antworten Zitat
HiWieGehts

Registriert seit: 19. Aug 2005
101 Beiträge
 
Delphi 10.4 Sydney
 
#3

Re: Bildschirmauflösung einstellen / skalieren von Formulare

  Alt 31. Jul 2009, 05:30
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:
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;
Diese dann über USES oder INCLUDE in deine Units welche scaliert werden sollen einbinden und aufrufen
Delphi-Quellcode:
procedure TForm1.Create.... (oder irgend einandere passende Prozedure/Funktion)
begin
  ....
  FormScale(Form1); // und die zu ändernde Form übergeben
  ....
end;
Nicht getestet, sollte aber funktionieren!

[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.
  Mit Zitat antworten Zitat
Spargeltarzan
(Gast)

n/a Beiträge
 
#4

Re: Bildschirmauflösung einstellen / skalieren von Formulare

  Alt 31. Jul 2009, 11:42
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.
  Mit Zitat antworten Zitat
Spargeltarzan
(Gast)

n/a Beiträge
 
#5

Re: Bildschirmauflösung einstellen / skalieren von Formulare

  Alt 22. Aug 2009, 02:21
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
Angehängte Grafiken
Dateityp: bmp aufl_sung_207.bmp (377,2 KB, 68x aufgerufen)
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:29 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