Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Große Schrifftarten ( Leidiges Thema ) (https://www.delphipraxis.net/65332-grosse-schrifftarten-leidiges-thema.html)

Baeuerle 15. Mär 2006 11:53


Große Schrifftarten ( Leidiges Thema )
 
Liste der Anhänge anzeigen (Anzahl: 2)
Hallo zusammen,

so wiedereinmal das leidige Thema.
Ich skaliere meine Formulare mit folgender Funktion
Delphi-Quellcode:
procedure ScaleForm(F: TForm; Offset: Integer);
var dc: HDC;
begin
dc:=GetDC(0);
if not (GetDeviceCaps(dc,LOGPIXELSX)=96)then
 f.scaleby(96,GetDeviceCaps(dc,LOGPIXELSX)+Offset);
ReleaseDC(0,dc);
f.Refresh;
end;
Das Ergebnis könn Ihr euch bei den angehängten Screenshots ansehen. Einmal normal mit 96DPI und einmal mit 144DPI.

Ich möchte das Darstellungsproblem jetzt ein für alle mal vom Tisch bekommen. Ich bitte um Lösungsvorschläge wie das Formular auf allen OS mit allen unterschiedlichen Einstellungen DPI und Auflösungen korrekt dargestellt wird.

Das Problem sollte doch jeder Entwickler gelöst haben. Oder bin ich einfach zu dumm dafür???

Danke im voraus
Baeuerle

marlem 15. Mär 2006 12:05

Re: Große Schrifftarten ( Leidiges Thema )
 
tach,

rufe mal das hier im oncreate vom formular auf:
Delphi-Quellcode:
procedure bildschirmaufloesung(breite,hoehe:integer;formular:tform);
var schrift: integer;
begin
schrift := formular.pixelsperinch-96;
if screen.width>breite then begin
if schrift>0 then
{für große Schriften}
formular.ScaleBy(round(((screen.width/breite)*100)-((screen.width/breite-1)*100)),100)
else
{für kleine Schriften}
formular.ScaleBy(round(((screen.width/breite)*100)),100);
end
else begin
if screen.width=breite then
formular.ScaleBy(round(((screen.width/breite)*100)-schrift),100)
else begin
if schrift>0 then
{für große Schriften}
formular.ScaleBy(round((100-(breite/screen.width-1)*100)-(breite/screen.width-1)*100),100)
else
{für kleine Schriften}
formular.ScaleBy(round((100-(breite/screen.width-1)*100)),100);
end;
end;
end;

turboPASCAL 15. Mär 2006 12:13

Re: Große Schrifftarten ( Leidiges Thema )
 
Delphi-Quellcode:
 // ...

var
  Form1: TForm1;

implementation

{$R *.dfm}

// Bildschirmauflösung zur Erstellungszeit (des Formulares beim programieren)
const
  ScrWidthResDev = 1024;
  ScrHeightResDev = 768;

procedure TForm1.FormCreate(Sender: TObject);
begin
  Scaled := true;
  if (Screen.Height <> ScrHeightResDev) or
     (Screen.Width<>ScrHeightResDev) then
  begin
    Height:= (ClientHeight * Screen.Width div ScrWidthResDev) +
      Height - ClientHeight;
    Width:= (ClientWidth * Screen.Width div ScrHeightResDev) +
      Width - ClientWidth;
    ScaleBy(Screen.Height, ScrHeightResDev);
  end;
end;

end.
So ? :gruebel:

Baeuerle 15. Mär 2006 12:19

Re: Große Schrifftarten ( Leidiges Thema )
 
Liste der Anhänge anzeigen (Anzahl: 1)
@Marlem

Tja das Ergebnis sieht leider sehr seltsam aus !!! Siehe Anhang

Baeuerle 15. Mär 2006 12:24

Re: Große Schrifftarten ( Leidiges Thema )
 
@turboPASCAL

Das Ergebnis sieht leider aus wie das oben genannte 144DPI.jpg !!!

Also auch keine Lösung!!!

marlem 15. Mär 2006 12:26

Re: Große Schrifftarten ( Leidiges Thema )
 
@Baeuerle
hast du bei breite und höhe die aktuelle bildschirmauflösung angegeben?
formular ist auf scaled?

marlem 15. Mär 2006 12:30

Re: Große Schrifftarten ( Leidiges Thema )
 
MOMENT!!!
dein formular füllt ja gar nicht den ganzen bildschirm aus!
da hilft wahrscheinlich eh nur aus bsdialog setzen!
meine lösung ist für formulare die den ganzen bildschirm ausfüllen!

Baeuerle 15. Mär 2006 12:31

Re: Große Schrifftarten ( Leidiges Thema )
 
@Marlem

Ja habe die breite und die höhe des Entwicklungsrechners eingegeben
1152*864 mit 96DPI scaled=True

Testrechner XP Emulation mit 1152*864 mit 144DPI

Daran liegt der Fehler leider nicht!

Baeuerle 15. Mär 2006 12:33

Re: Große Schrifftarten ( Leidiges Thema )
 
bsDialog
scaled=False

Ja das geht.

ABER: Ich kann doch nicht alle Fenster, die nicht den ganzen Bildschirm ausfüllen auf bsDialog setzen!!!

Es muss doch möcglich sein eine korrekte Anpassung zu machen.

marlem 15. Mär 2006 12:36

Re: Große Schrifftarten ( Leidiges Thema )
 
jau, versuche mal!
auf jeden fall bin ich der meinung, dass wenn dein formular "dialog-größe" hat,
hast du beim anpassen no chance!!! :(

Baeuerle 15. Mär 2006 12:40

Re: Große Schrifftarten ( Leidiges Thema )
 
@Marlem

Danke erstmal, doch wo fängt Dialoggröße an und wo hört sie auf?

Warum werden Fenster mit bsDialog nicht skaliert wo ist der Unterschied?

Und muss ich jetzt alle Fenster die nicht den ganzen Bildschirm füllen auf bsDialog umstellen dass kann doch nicht sein.

So ein ...

turboPASCAL 15. Mär 2006 12:45

Re: Große Schrifftarten ( Leidiges Thema )
 
Zitat:

Zitat von Baeuerle
@turboPASCAL

Das Ergebnis sieht leider aus wie das oben genannte 144DPI.jpg !!!

Also auch keine Lösung!!!

Du hast aber
Delphi-Quellcode:
// Bildschirmauflösung zur Erstellungszeit (des Formulares beim programieren)
const
  ScrWidthResDev = 1024;
  ScrHeightResDev = 768;
an deinen Bildschirm angepasst oder ?

Bei mir klappt das einwandfrei.

marlem 15. Mär 2006 12:46

Re: Große Schrifftarten ( Leidiges Thema )
 
@Baeuerle
schwierig wo dialoggröße anfängt und wo sie aufhört!
spiele doch mal mit der eigenschaft borderstyle vom formular.
ich glaube bssingle geht auch!

aber noch ne kleine begründung für meine theorie:
ich habe noch keinen windows-dialog (opendialog, savedialog usw.)
gesehen der skaliert wurde!


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:04 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 by Thomas Breitkreuz