Programm Skalierung Probleme

Für Fragen rund um die Ide und zum Debugger
Antworten
hbr
Beiträge: 254
Registriert: Mi 20. Feb 2013, 10:30
OS, Lazarus, FPC: Win (L 1.6.0 FPC 3.0.0)
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: 3520
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: 254
Registriert: Mi 20. Feb 2013, 10:30
OS, Lazarus, FPC: Win (L 1.6.0 FPC 3.0.0)
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: 3520
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: 254
Registriert: Mi 20. Feb 2013, 10:30
OS, Lazarus, FPC: Win (L 1.6.0 FPC 3.0.0)
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: 3520
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: 254
Registriert: Mi 20. Feb 2013, 10:30
OS, Lazarus, FPC: Win (L 1.6.0 FPC 3.0.0)
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: 238
Registriert: Sa 12. Sep 2015, 12:10
OS, Lazarus, FPC: Laz 2.0 fixes FPC 3.2 fixes
CPU-Target: Win 32Bit, 64bit
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) 7-mal heruntergeladen

hbr
Beiträge: 254
Registriert: Mi 20. Feb 2013, 10:30
OS, Lazarus, FPC: Win (L 1.6.0 FPC 3.0.0)
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) 7-mal heruntergeladen
Gruß

charlytango
Beiträge: 238
Registriert: Sa 12. Sep 2015, 12:10
OS, Lazarus, FPC: Laz 2.0 fixes FPC 3.2 fixes
CPU-Target: Win 32Bit, 64bit
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: 254
Registriert: Mi 20. Feb 2013, 10:30
OS, Lazarus, FPC: Win (L 1.6.0 FPC 3.0.0)
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.

Antworten