Abstände/Größen ändern sich
Abstände/Größen ändern sich
Wenn ich mein Projekt auf verschiedenen Rechnern (beide Win10 bei FullHD Auflösung) bearbeite, verändern sich die Abstände/Größe der Elemente. Gibt es da irgendeine Einstellung mit der man das unterbinden kann?
-
- Beiträge: 6918
- Registriert: Do 2. Jan 2014, 17:21
- OS, Lazarus, FPC: Linux (die neusten Trunk)
- CPU-Target: 64Bit
- Wohnort: Schweiz
Re: Abstände/Größen ändern sich
Gibt es, da dies erst kürzlich eingefügrt wurde.
Nur weis ich nicht wo.
Nur weis ich nicht wo.

Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot
Mit Java und C/C++ sehe ich rot
Re: Abstände/Größen ändern sich
Im Idealfall verwendest du Lazarus > 1.8, dann musst du dich um Skalierung der Formulare bei unterschiedlichen Pixels-per-Inch nicht mehr kümmern, wenn in den Projekt-Optionen "Manifest-Resource verwenden" markiert ist und darunter als "DPI-Bewusstsein" (welch scheußliche Übersetzung!) etwas anderes als "aus (False)" gewählt ist. Mit diesen Einstellungen werden alle Dimensionen so umgerechnet, dass die Verhältnisse beibehalten werden. Wenn du Icons in ImageListen verwendest, dann übernimmt die IDE von Lazarus-Trunk auch deren Skalierung, wenn ImageList.Scaled=true gesetzt ist.
Re: Abstände/Größen ändern sich
Ah okay. Das DPI Bewusstsein habe ich sogar ausgeschaltet, da ich vermutet hatte, dass das der schuldige ist
-
- Beiträge: 320
- Registriert: Sa 21. Mär 2009, 17:31
- OS, Lazarus, FPC: Linux (Lazarus SVN, FPC 2.4)
- CPU-Target: 64 Bit
Re: Abstände/Größen ändern sich
Was macht denn die Use LCL Scaling Option darüber? Und was ist der Unterschied zwischen den drei möglichen DPI Bewusstseins?
Betrifft das nur Windows? Unter Linux kann man die Schriftgröße auch ohne DPI Änderung ändern.
Ich mache das ganz anders:
Bei allen Komponenten AutoSize aktivieren und dann Align/Anchors entsprechend setzen, so dass sich alles an die Schrift anpasst.
Nur habe ich noch nicht ganz rausgefunden wie man macht, dass Autosize es nur vergrößern und nicht im Normalzustand verkleinert und alle Ränder abschneidet
Betrifft das nur Windows? Unter Linux kann man die Schriftgröße auch ohne DPI Änderung ändern.
Ich mache das ganz anders:
Bei allen Komponenten AutoSize aktivieren und dann Align/Anchors entsprechend setzen, so dass sich alles an die Schrift anpasst.
Nur habe ich noch nicht ganz rausgefunden wie man macht, dass Autosize es nur vergrößern und nicht im Normalzustand verkleinert und alle Ränder abschneidet
Re: Abstände/Größen ändern sich
Natürlich! Das habe ich übersehen, und dabei ist es das wichtigste (es ist einfach zu heiß...). Also: Wenn man diese Checkbox setzt, wird in die Projektdatei "Application.Scaled := true" geschrieben, und alle Dimensionen werden entsprechend den DPI des Monitors skaliert. Je nach DPI-"Bewusstsein" wird - nur für Windows - die entsprechende Manifest-Datei verwendet, wobei man ab Win 8.1 auch unterscheiden kann, ob bei mehreren Monitoren die DPI pro Monitor ausgewertet werden - d.h. wenn man ein Fenster von einem 96dpi-Monitor auf einen 144dpi-Monitor schiebt, wird die Pixelzahl auf letzterem so hochgerechnet, dass sich die Größe nicht ändert. Hab' ich selbst nicht getestet, wurde mir aber von Ondrej Pokorny, der all dies geschrieben hat, auf eine entsprechende Anfrage bestätigt.BeniBela hat geschrieben:Was macht denn die Use LCL Scaling Option darüber?
-
- Beiträge: 320
- Registriert: Sa 21. Mär 2009, 17:31
- OS, Lazarus, FPC: Linux (Lazarus SVN, FPC 2.4)
- CPU-Target: 64 Bit
Re: Abstände/Größen ändern sich
Ich habe jetzt das in meinem OnCreate:
Aber kann man canvas überhaupt in OnCreate verwenden? Das bringt alles durcheinander: https://bugs.freepascal.org/view.php?id=34044
Woher kriege ich die System-Schriftgröße?
Code: Alles auswählen
const REFERENCE_FONT = 19;
var
fontHeight, i: Integer;
bounds, oldbounds: TRect;
begin
guiScaleFactor := 1;
fontHeight := Canvas.GetTextHeight('Hm,.|');
if fontHeight > REFERENCE_FONT then begin
guiScaleFactor := fontHeight / REFERENCE_FONT;
oldbounds := BoundsRect;
bounds := oldbounds;
bounds.Width := MulDiv(bounds.Width, fontHeight, REFERENCE_FONT);
bounds.Height := MulDiv(bounds.Height, fontHeight, REFERENCE_FONT);
if bounds.Width > screen.Width then bounds.Width := screen.Width;
if bounds.Height > screen.Height then bounds.Height := screen.Height;
if (bounds.width = oldbounds.Width) and (bounds.height = oldbounds.Height) then exit;
if bounds.Left + bounds.Width > screen.Width then bounds.Left := screen.Width - bounds.Width;
if bounds.Top + bounds.Height > screen.Height then bounds.Top := screen.Height - bounds.Height;
BoundsRect := bounds;
end;
end;
Aber kann man canvas überhaupt in OnCreate verwenden? Das bringt alles durcheinander: https://bugs.freepascal.org/view.php?id=34044
Woher kriege ich die System-Schriftgröße?
Re: Abstände/Größen ändern sich
Wenn ich mich jetzt recht erinnere, berechnet Ondrej den Skalierungsfaktor aus den DesigntimePPI des Formulars und den PixelsPerInch des Fonts des Formulars.
-
- Beiträge: 320
- Registriert: Sa 21. Mär 2009, 17:31
- OS, Lazarus, FPC: Linux (Lazarus SVN, FPC 2.4)
- CPU-Target: 64 Bit
Re: Abstände/Größen ändern sich
Ich will ja aber die Schriftgröße und nicht DPI.
Hier unter Linux hat die Standardschrift 19 Pixel hoch und unter Windows 15 Pixel, bei derselben DPI
Und in der ~/.gtkrc-2.0 kann man die Schrift ändern. Dann ist die Schrift doppelt so groß, aber die DPI ändert sich nicht
Hier unter Linux hat die Standardschrift 19 Pixel hoch und unter Windows 15 Pixel, bei derselben DPI
Und in der ~/.gtkrc-2.0 kann man die Schrift ändern. Dann ist die Schrift doppelt so groß, aber die DPI ändert sich nicht
Re: Abstände/Größen ändern sich
Screen.SystemFont ?BeniBela hat geschrieben: Woher kriege ich die System-Schriftgröße?
-
- Beiträge: 320
- Registriert: Sa 21. Mär 2009, 17:31
- OS, Lazarus, FPC: Linux (Lazarus SVN, FPC 2.4)
- CPU-Target: 64 Bit
Re: Abstände/Größen ändern sich
Das hat immer Größe 0