Entwickler-Ecke

Sonstiges (Delphi) - Bildschirmauflösungen / Schriftarten: Anpassungsproblem ...


georgfischerx - Mi 26.06.02 17:16
Titel: Bildschirmauflösungen / Schriftarten: Anpassungsproblem ...
Hallo allerseits,

weiss jemand, ob man das Proggi an alle Bildschirmauflösungen
anpassen kann ? Inklusive kleine/grosse Schriftarten ? Ich habe es
zwar geschafft, dass mein Proggi bei den Auflösungen 1280x1024,
1024x768, 800x600, 640x480 läuft - aber: Nur bei kleinen
Schriftarten. Mühsam ist das Leben, grausam und hart unter
Windows ...

Gruss, Georg


Tino - Mi 26.06.02 17:20

Wenn Du bei den Forms das Property Scaled auf True stehen hast dann müsste das von ganz alleine gehen!

Gruß


Torsten - Mi 26.06.02 17:24

Moinsen!

Ja, da gibt es was.
Zumindest bei den Schriftarten kann ich Dir helfen.

Also, folgendermaßen Deinen Code anpassen:


Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
...

private
    { Private-Deklarationen }
    FontDoFix     : Boolean; // für Bestimmung der eingestellten Schriftgrösse
    FontDesignRes : Integer; // ----- ebenfalls ----

    procedure FixSize;    // zur Bestimmung der Schriftgrösse

...

procedure TForm1.FormCreate(Sender: TObject);
begin
 FontDoFix := True;                { zur Ermittlung der Schriftgroesse}
 FontDesignRes := 96;
end;

...

procedure TForm1.FormShow(Sender: TObject);
begin
 FixSize;                         // an Schriftart anpassen 
end;


Nun die eigentliche Funktion:

Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
...

procedure TForm1.FixSize;
begin
  if FontDoFix then
    begin
      PixelsPerInch := Screen.PixelsPerInch;
      if (PixelsPerInch <> FontDesignRes) then
        begin
          Width := LongInt(Width * PixelsPerInch) div FontDesignRes;
          Height := LongInt(Height * PixelsPerInch) div FontDesignRes;
        end;
      FontDoFix := False;
    end;
end;

....


Grüße

Torsten


georgfischerx - Mi 26.06.02 17:28
Titel: Property Scales auf True: Ja, überall ...
Hallo !

ich habe die Property Scaled überall auf True. Hilft nix. Die
Schrift in den Labels wird grösser, und auf meiner schönen
kleinen Form kommen hässliche Rollbalken ... Tja.

Das Leben ist doch hart unter Win9X ff.

Gruss, Georg


Torsten - Mi 26.06.02 17:35

Hast Du meinen Beitrag jetzt überlesen?

Grüße

Torsten


georgfischerx - Mi 26.06.02 17:41
Titel: Proggi an ALLE Bildschirmauflösungen/Schriftarten anpassen..
Sorry,

nein, ich habe Deinen Beitrag nicht überlesen. Nur als ich meinen
Beitrag abgesandt habe, war er noch nicht da. (Zeitüberschneidung)

Vielen Dank für Deine Antwort, ich werde es gleich morgen
ausprobieren !

Gruss, Georg


Torsten - Mi 26.06.02 17:43

Ach so, Schwein gehabt. ;)

Sollte eigentlich funktionieren. So nutze ich die Funktionen auch.

Grüße

Torsten


georgfischerx - Mi 26.06.02 18:30
Titel: Proggi an ALLE Bildschirmauflösungen/Schriftarten anpassen..
Tja,

ich habe es eben in mein Proggi eingebaut und ausprobiert. Es hat
nicht funktioniert. Mein Proggi kriegt Rollbalken, die Schrift ist
überall grösser als vorher (bei grossen Schriftarten) und wird in den
Labels umgebrochen.

Vielleicht sollte ich noch erwähnen, dass die Grösse der Form + Labels
immer korrekt ist. Sie wird bereits trickreich angepasst.

Nur die Buttons sind auch alle grösser.

Gruss, Georg


Torsten - Mi 26.06.02 21:42

OK, ich noch mal.

Mein Code geht davon aus, dass eine kleine Schriftart als Standard eingestellt ist.
Das bedeutet die 96 (96 dpi).
Der zweite Wert wäre 120 (also 120 dpi).
Eventuell liegt ja dort der Fehler.

Dennoch habe ich hier mal eine Funktion für Dich, mit der Du die eingestellte Schriftgröße ermitteln kannst.


Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
function GetFontSize: Boolean; 
var 
  size: Integer; 
  handler:  THandle; 
begin 
  Result   := False; 
  handler := GetDc(HWND_DESKTOP); 
  size := GetDeviceCaps(handler, logpixelsx); 
  ReleaseDc(HWND_DESKTOP, handler); 
  if size = 96 then Result := False 
  else if size = 120 then Result := True; 
end;


Eventuell hilft das ja weiter.

Grüße

Torsten


Torsten - Mi 26.06.02 21:44

Ach ja, noch was.

Wenn Deine Anwendung auch zur Laufzeit auf Änderungen reagieren soll, so muss lediglich die Botschaft WM_DISPLAYCHANGE ausgewertet werden.

Torsten


georgfischerx - Do 27.06.02 11:08
Titel: Bildschirmauflösungen/Schriftarten.
Hallo,

danke für Deinen Einsatz. Ich habe alles ausprobiert, aber es
funktioniert leider nicht. Was mache ich bloss falsch ? Wenn
ich in der Systemsteuerung / Anzeige die grossen Schriftarten
wähle, zerrupft es mir immer das Proggi-Bild ...

Gruss, Georg


toms - Do 27.06.02 11:20

Hi,

1. Setze ich Scaled jeweils auf False und nehme eine True-Type Schrift
(z.B Arial)

2. Setze ich die PITCH Eigenschaft der Schrift auf VARIABLE anstatt DEFAULT

tom


georgfischerx - Do 27.06.02 14:50
Titel: Bildschirmauflösungen / Schriftarten: Anpassungsproblem ...
Sorry,

aber es funktioniert leider alles nicht. Vielleicht habe ich mich
auch unklar ausgedrückt. Ich möchte eine einfache Angabe oder
Formel für das folgende Problem:

- Es liegt ein einfaches Formular in der Entwicklungsumgebung
mit den Massen 640 x 480 vor.

- Diese Formular mit allen Feldern und Knöpfen soll genaugleich
aussehen, egal ob die Auflösung 640x480 ist, 800x600 , 1024x768,
1280x1024 ist und egal, was man in Windows für eine SYSTEMSCHRIFTART unter Systemsteuerung: Anzeige: kleine/grosse Schriftarten eingestellt hat. Auch das Menu soll sich nicht ändern. Es
wird nämlich grösser, je nach Systemschriftart und hat keinen Platz
mehr in der Titelleiste. Ich hoffe, diese Beschreibung hilft weiter.

Wenn so etwas nicht möglich ist, frage ich mich, wozu ich programmiere.
WinWord kann das.

Gruss, Georg


georgfischerx - Do 27.06.02 16:51
Titel: Bildschirmauflösungen / Schriftarten: Anpassungsproblem ...
@Toms:

Dein Vorschlag war weitaus der Beste, was die unterschiedlichen
Schriftarten unter Windows betrifft (kleine Schriftarten / Grosse
Schriftarten) Er kommt dem Ideal schon sehr nahe, Bravo !

Gruss, Georg