Programm Skalierung Probleme

Für Fragen rund um die Ide und zum Debugger
Antworten
hbr
Beiträge: 285
Registriert: Mi 20. Feb 2013, 10:30
OS, Lazarus, FPC: Win (L 2.2.4 FPC 3.2.2)
CPU-Target: 32/64,ARM(RPi)

Programm Skalierung Probleme

Beitrag von hbr »

Hallo Forum,

es tauchen Skalier Probleme in Window10 auf.

Mit Laz 1.6 hat es Funktioniert, seit dem Umstieg auf 2.0.10 gibt es Probleme.

Beschreibung:
Bei den Einstellwerten die Windows vorgibt, (125,150,175,200) gibt es keine Probleme.
Werden aber Benutzerdefinierte Skalierungen eingegeben, z.B. (110,115% usw.), werden die Inhalte der Formen zerschossen.

In Lazarus Projekteinstellungen ist LCL-Skalierung Aktiviert.

Ich arbeite auf 115%.
Mit Laz 1.6 werden die Programmformen in der IDE korrekt angezeigt.
In Laz 2.0.10 sind sie in der Laz Umgebung schon Fehlerhaft.

Was kann oder muss man sonst noch wo einstellen?

Für Infos wäre ich Dankbar.

Gruß

wp_xyz
Beiträge: 4864
Registriert: Fr 8. Apr 2011, 09:01

Re: Programm Skalierung Probleme

Beitrag von wp_xyz »

Was heißt denn "zerschossen", was ist "fehlerhaft"?

hbr
Beiträge: 285
Registriert: Mi 20. Feb 2013, 10:30
OS, Lazarus, FPC: Win (L 2.2.4 FPC 3.2.2)
CPU-Target: 32/64,ARM(RPi)

Re: Programm Skalierung Probleme

Beitrag von hbr »

Stringgrid, edit, Panels vergrößern sich und verändern die Position.
Button und Label verschwinden außerhalb der Form.

wp_xyz
Beiträge: 4864
Registriert: Fr 8. Apr 2011, 09:01

Re: Programm Skalierung Probleme

Beitrag von wp_xyz »

Ich hab mir jetzt extra Laz 1.6.4 installiert, damit ein kleines Test-Projekt gemacht (ein einfaches Formular mit Buttons an den Bildschirmecken, dann die Auflösung meines Win10 auf 110% gestellt, und nach dem obligatorischen Ab-/Anmelden diese Projekt in Laz 2.0.10 geladen, übersetzt und gestartet. Kein Problem. Weder ohne, noch mit aktivem LCL-Scaling.

Was machst du genau?

hbr
Beiträge: 285
Registriert: Mi 20. Feb 2013, 10:30
OS, Lazarus, FPC: Win (L 2.2.4 FPC 3.2.2)
CPU-Target: 32/64,ARM(RPi)

Re: Programm Skalierung Probleme

Beitrag von hbr »

Hallo, danke für die Info.

Nun habe ich festgestellt, dass es daran liegt, das Laz 2.0.10 schon die Form beim Aufruf der IDE Skaliert.
Soll heißen, ein Programm, erstellt mit Laz 1.6 z.B. Formgröße Wide 900, Height 700 behält stetig seine Größe
von Height und Wide Einstellungen, egal in welcher Skalierung.

2.0.10 verändert die Form Wide und Height schon beim Aufruf je nach Skalierung und vergrößert die Form mit Inhalt dementsprechend.

So müssen halt mehr Anpassungen für 2.0.10 gemacht werden.

wp_xyz
Beiträge: 4864
Registriert: Fr 8. Apr 2011, 09:01

Re: Programm Skalierung Probleme

Beitrag von wp_xyz »

Laz 1.6 war die letzte Version, bevor LCLScaling eingeführt worden ist. Bei LCL-Scaling wird die Formular-Eigenschaft DesignTimePPI eingeführt, das ist quasi die "Einheit" für die Dimension im Forumular. Wenn du unter Laz 1.8+ (also auch 2.0.10) ein Formular unter 100% (96ppi) designst und dann unter 150% (144ppi) weiterbearbeitest, wird es beim Laden ins 150%-System umskaliert. Das funktioniert alles.

Ich nehme nun mal an, du hast auf demselben Rechner, der auf - sagen wir - 150% (144ppi) läuft, ein Projekt mit Laz 1.6 geschrieben, dann Lazarus auf 2.0.10 aufgerüstet, und lädst nun zum ersten Mal das Projekt in Laz 2.0.10.

Unter Laz 1.6 gab es noch kein DesigntimePPI. Das neue Laz 2.0.10 findet die "Einheit" DesignTimePPI nicht und nimmt daher an, das Formular wäre unter 100% erzeugt worden. Da dein Rechner aber eine höhere Auflösung hat, rechnet es alle Längen auf die aktuellen PPI um - das Formular und alles darauf wird um 50% größer. Ich kann mir jetzt zwar nicht vorstellen, dass damit Controls abgeschnitten werden, aber was weiß ich, was auf dem Formular wie verankert oder aligned oder constrained ist, oder was auch immer..

Es gibt zwei Lösungen zu dem Problem: Zunächst stelle die ursprüngliche Version des Projekts vor dem ersten Laden in 2.0.10 wieder her. Denn 2.0.10 könnte schon die Dimensionen verändert ins lfm geschrieben haben.

(1) Starte Laz 2.0.10, Rechtsklick auf dem Leerformular des Default-Projekts > "Einstellungen" > "Formulareditor". Ganz unten ist "Force DPI scaling in design-time" - Häkchen entfernen. Nun werden die nachfolgend geladenen Formulare nicht mehr umskaliert.
Lade dein Projekt. Verschiebe jedes formular um ein paar Pixel und speichere es. Dadurch wird der Wert von DesigntimePPI in die LFM-Datei geschrieben (denn deine aktuelle Bildschirmauflösung ist ja nicht 96ppi).
Stelle sicher, dass in "Projektoptionen" > "Anwendung" die Option "LCL-Skalierung verwenden" markiert ist. Es sollte auch "DPI-Anpassung" auf "an (True)" gesetzt werden.
Wiederhole das für alle Projekte, die du in 2.0.10 weiterbearbeiten willst.
Stelle das Häkchen bei "Force DPI scaling in designtime" wieder her.
Zur Sicherheit Lazarus neu starten
Wenn du jetzt das Projekt neu lädst, sollte es die richtige Größe behalten.

(2) Öffne jede .lfm-Datei in einem externen Editor und füge über "LCLVersion" die Zeile " DesignTimePPI = 144" wobei "144" gegen den bei deinem System vorhandenen PPI-Wert ausgetauscht werden muss. Zur Sicherheit, Leerzeichen und Einrückung beibehalten, ich habe keine Erfahrung wie pingelig hier das Streaming-System ist.
Da bei Laz 2.0.10 LCLScaling die Default-Einstellung ist, musst du wahrscheinlich an der lpr-Datei keine Änderung vornehmen.
Öffne das Projekt in Laz 2.0.10, es sollte alles stimmen.

Nach dieser Operation kannst du das Formular nicht mehr in Laz 1.6 laden, da die Eigenschaft DesignTimePPI dort nicht bekannt ist.

hbr
Beiträge: 285
Registriert: Mi 20. Feb 2013, 10:30
OS, Lazarus, FPC: Win (L 2.2.4 FPC 3.2.2)
CPU-Target: 32/64,ARM(RPi)

Re: Programm Skalierung Probleme

Beitrag von hbr »

Hallo, danke für die Information.

"Force DPI scaling in design-time", das hatte ich gesucht.

Leider kann ich das mit der Skalierung nicht benutzen.
Stelle ich "DPI-Anpassung" auf "(True)", dann Funktioniert die bild.png Transparenz in einem TImage nicht mehr.

Aber das macht nichts, denn in meiner komplizierten Form wo im unteren Viertel sich ein TPageControl mit TPanels in jedem TAB und Komponenten befinden,
verschieben diese sich ineinander bei einer Skalierung.

Aufbau:
Normale Form, im unteren Viertel ein PageControl, daneben ein TImage das nur bei vergrößern der Form oder Vollbild sichtbar wird.
Über dem Pagecontrol ein DBGrid welches sich bei Formveränderung dem Rest anpasst.
Also wächst das PageControl bei einer Skalierung, müsste folglich auch das TImage daneben sich anpassen.
PageControl und daneben ein TPanel mit TImage geht auch irgendwie nicht.
Aber egal.

Mit einer Festen Größe habe ich keine Probleme.

Ob das mit dem TImage ein Lazfehler ist kann ich nicht beurteilen.

Nochmals Danke.

charlytango
Beiträge: 842
Registriert: Sa 12. Sep 2015, 12:10
OS, Lazarus, FPC: Laz stable (2.2.6, 3.x)
CPU-Target: Win 32/64, Linux64
Wohnort: Wien

Re: Programm Skalierung Probleme

Beitrag von charlytango »

meinst du so etwas wie das beigefügte Projekt?
Das lässt sich leicht auch noch mit Splittern auffetten dann kann der Benutzer sein Fenster selber einstellen.

Laz 2.0.11 (Laz 2 fixies) FPC 3.2.1 (FPC 3.2 fixies) mit fpcupdeluxe installiert.
Dateianhänge
project1.zip
(125.42 KiB) 91-mal heruntergeladen

hbr
Beiträge: 285
Registriert: Mi 20. Feb 2013, 10:30
OS, Lazarus, FPC: Win (L 2.2.4 FPC 3.2.2)
CPU-Target: 32/64,ARM(RPi)

Re: Programm Skalierung Probleme

Beitrag von hbr »

Ja so in etwa,
habe mal die ungefähre Struktur aufgebaut.
project1.zip
(384.89 KiB) 120-mal heruntergeladen
Gruß

charlytango
Beiträge: 842
Registriert: Sa 12. Sep 2015, 12:10
OS, Lazarus, FPC: Laz stable (2.2.6, 3.x)
CPU-Target: Win 32/64, Linux64
Wohnort: Wien

Re: Programm Skalierung Probleme

Beitrag von charlytango »

da scheinst du recht zu haben dass die Farbe des Pagecontrol1 verschwindet.

Aber einiges kommt mir trotzdem seltsam vor.

obwohl du mit

Code: Alles auswählen

procedure TForm1.FormCreate(Sender: TObject);
begin
  PageControl1.Color:= clSkyBlue;
end;

die Farbe änderst passiert das offensichtlich nicht.
Allerdings finde ich auch nirgends wo du die Farbe des unteren Pagecontrols (PageControl3) bzw/oder des darauf liegenden Panel3 auf blau stellst?

Das Resizing und die Skalierung klappt bei mir ohne Probleme.

An sich hat IMHO ein TPageControl gar keine Hintergrundfarbe, was immer wieder ein Wunsch war aber nie umgesetzt wurde (vermutlich Kompatibilitätsgründe). Es existiert ja gar kein Property dafür in der IDE.

hbr
Beiträge: 285
Registriert: Mi 20. Feb 2013, 10:30
OS, Lazarus, FPC: Win (L 2.2.4 FPC 3.2.2)
CPU-Target: 32/64,ARM(RPi)

Re: Programm Skalierung Probleme

Beitrag von hbr »

Die Hintergrundfarbe für die Transparenten tImage sind ja auch im
PairSplitter1.Color "clGradientInactiveCaption" gesetzt.

PageControl1.Color := clSkyBlue; setzt ja auch nur die Statuszeile vom PageControl1 in Farbe.

MiPraSo
Beiträge: 8
Registriert: Di 23. Mai 2023, 18:47
OS, Lazarus, FPC: Win 10, Lazarus 2.2.6, FPC 3.2.2, i386-win32-win32/win64
CPU-Target: 64 Bit

Re: Programm Skalierung Probleme

Beitrag von MiPraSo »

Habe den Faden über die Suche gefunden und hänge meine Frage mal dran.

Hallo, ich würde gerne wissen ob diese Anleitung noch gültig ist, für diese Versison:

Lazarus 2.2.6 FPC 3.2.2 i386-win32-win32/win64

Ich habe auf dem Laptop mit folgenden Windows 10 Einstellungen gearbeitet:

Skalierung 125% bei 1920x1080 Pixeln.

Dann habe ich das Projekt auf meinen Büro Rechner kopiert (gleiche Lazarus Umgebung). Dort arbeite ich mit 100% bei 1920x1080 Pixeln.

Nach dem ersten Start sah das Hauptfester OK aus, nur alle aufgerufenen Unterformulare hatten Probleme mit der Darstellung, in StringGrids kann die vierte, „versteckte“ Spalte sehen und der Scrollbalken war außerhalb des definierten Fensters, die Höhe stimmt auch nicht mehr. Die eingebunden Images wurde doppelt so groß und waren teilweise nicht mehr zu sehen, da vom Stringgrid überdeckt. Habe versuch nach der o.g. Anleitung zu verfahren, dies hat alles nur schlimmer gemacht.

Aktuelle Einstellungen in Laz auf dem Laptop mit den 125%:
Main Form und anderen Formulare Prop:
DesignTimePPI: 96
PixelPerInch: 96

Was dort vor meinen Experiment drin stand habe ich nicht geprüft, jetzt ist hier alles zerschossen, ein Backup ist vorhanden!

Ich würde gern wie früher arbeiten: Ich lege alles über Pixel fest, Breiten, Höhen, Schriftgrößen u.s.w. Wenn der Nutzer an der Skalierung von Windows dreht, dann sollte das Programm in der Lage sein und sich selbst anpassen können. Sollte doch möglich sein.
Dateianhänge
2.png
2.png (163.25 KiB) 534 mal betrachtet
1.png
1.png (69.69 KiB) 534 mal betrachtet

Antworten