Skallierung 4K

Für Probleme bezüglich Grafik, Audio, GL, ACS, ...
Antworten
Frank Ranis
Beiträge: 212
Registriert: Do 24. Jan 2013, 21:22

Skallierung 4K

Beitrag von Frank Ranis »

Hallo ,

ich bastel meine Programme mit einer Bildschirmauflösung von 1920x1080.

Ein Kollege hat einen 4K-Monitor , ich leider nicht und kann nicht testen.

Laut seinen Angaben wird das Programm auch skalliert .

Bis auf die Grafiken in
Checkboxen
Radiobuttons
Speedbuttons

Was kann man tun ?

Das Programm läuft unter Linux-Mint-Cinnamon.

Gruß

Frank
www.flz-vortex.de

Benutzeravatar
Ally
Beiträge: 290
Registriert: Do 11. Jun 2009, 09:25
OS, Lazarus, FPC: Win und Lazarus Stable release
CPU-Target: x64

Re: Skallierung 4K

Beitrag von Ally »

Hallo Frank,

schau die doch mal die beiden Seiten an.

https://wiki.lazarus.freepascal.org/High_DPI
https://wiki.lazarus.freepascal.org/TImageList

Gruß
Roland

Hir noch ein kleines Beispiel zum testen:
HighDpi.zip
(15.55 KiB) 52-mal heruntergeladen
Zuletzt geändert von Ally am Di 28. Okt 2025, 08:56, insgesamt 1-mal geändert.

Soner
Beiträge: 762
Registriert: Do 27. Sep 2012, 00:07
OS, Lazarus, FPC: Win10Pro-64Bit, Immer letzte Lazarus Release mit SVN-Fixes
CPU-Target: x86_64-win64
Wohnort: Hamburg

Re: Skallierung 4K

Beitrag von Soner »

>>Ein Kollege hat einen 4K-Monitor , ich leider nicht und kann nicht testen.
Unter Windows gibt es bei Einstellungen>System>Bildschirm>Skalierung Option, womit man HiRes-Bildschirm emulieren kann, vielleicht gibt es so etwas auch bei Linux-Desktop.
Frank Ranis hat geschrieben: Mo 27. Okt 2025, 15:25 ..
Bis auf die Grafiken in
Checkboxen
Radiobuttons
Speedbuttons
,,,
Checkboxes und Radiobuttons werden von verwendete Widgetset (GTK/QT/Win32/Cococa) gezeichnet. Auf Linux wird GTK2, was Lazarus verwendet, als veraltet betrachtet. Vielleicht solltest du dein Programm mit QT-Widgetset kompilieren, ich weiß nicht mehr welche Version aktuell ist, QT5, QT6, QT7 die erfinden das Rad ständig neu auf Linuxfront.
Ich nehme an mit Speedbuttons meint er Bilder für Speedbuttons, dafür muss man 2 unterschiedlich aufgelöste Bilder, klein und groß, in ImageList laden. Ich glaube, dass die Infos dazu auf den von Ally verlinkten Seiten zu finden sind.

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

Re: Skallierung 4K

Beitrag von wp_xyz »

Soner hat geschrieben: Mo 27. Okt 2025, 22:27 >>Ein Kollege hat einen 4K-Monitor , ich leider nicht und kann nicht testen.
Unter Windows gibt es bei Einstellungen>System>Bildschirm>Skalierung Option, womit man HiRes-Bildschirm emulieren kann,
Aber Achtung: unter Windows gibt es dazu zwei Möglichkeiten:
  • "Skalierung" (unter "Anzeige") - das ändert die Pixeldichte (Pixels/Inch), und das ist genau das was von LCLScaling unterstützt wird. Hier werden alle Größen skaliert.
  • "Textgröße" (unter "Barrierefreiheit") - das ändert nur die Schriftgröße. Wenn das unterstützt werden soll, muss man ganz intensiv mit Anchoring und Autosize arbeiten, damit überlappende Controls vermieden werden.
Ich weiß, du bist auf Linux. Unter Manjaro, das ich mir eben neu in einer VM eingerichtet habe, gibt es das unter Systemeinstellungen > Anzeige & Bildschirm > Globale Skalierung. Auf einem anderen System garantiert analog.

Normalerweise bin ich auf Windows und arbeite unter 96ppi Aufklösung (100%), Um eine Anwendung auf Skalierungsprobleme zu testen, habe ich mir einen zweiten User eingerichtet, der mit 144 ppi (150%) arbeitet (man könnte auch im laufenden System die Auflösung ändern, aber das bringt die Anordnung der Desktop-Icons durcheinander - daher der zweite User). Auf dem 150%-System sollten dann alle Dimensionen auf der 1.5-fache vergrößert sein.

Alternativ kann man sich auch eine virtuelle Maschine für das höher-auflösende System einrichten.

Um Icons richtig zu skalieren, muss man diese in TImageList stecken. "Scaled" auf true setzen, um die Skalierung je nach Auflösung zu aktivieren. Üblicherweise stellt man jedes Icon in drei Größen zur Verfügung: für 100%-Auflösung, 150% und 200%. Dafür im Object-Inspektor die Grundgröße für 100% in den Properties Width und Height eintragen (üblicherweise: 16) und die anderen Größen im Imagelist-Editor registrieren (24, 32). Um andere Auflösungen zu unterstützen, einen Handler für das OnGetWidthForPPI-Event der ImageList schreiben:

Code: Alles auswählen

procedure TForm1.ImageList1GetWidthForPPI(Sender: TCustomImageList;
  AImageWidth, APPI: Integer; var AResultWidth: Integer);
begin
  AResultWidth := MulDiv(AImageWidth, APPI, 96);
end;

Benutzeravatar
W126
Lazarusforum e. V.
Beiträge: 59
Registriert: Mo 27. Jul 2015, 11:19
OS, Lazarus, FPC: Linux
CPU-Target: Xeon Silver x64
Wohnort: Hofheim am Taunus

Re: Skallierung 4K

Beitrag von W126 »

Den Skalierung auf 150% zu setzen ist keine Lösung. Die Symbole, Rahmen usw werde viel zu groß.
Ich habe eine Abfrage in meiner Anwendung

{ Anpassung für Bildschirme ab 4K }
if screen.width > 3800 then Set4KStyle;

und setze dann leider noch Objekt für Objekt mit Fonts und Höhe um.

z.B.

MainMenuForm.SpkToolbar.Appearance.Tab.TabHeaderFont.Size := 11;
MainMenuForm.SpkToolbar.Appearance.Pane.CaptionFont.Size := 9;
MainMenuForm.SpkToolbar.Appearance.Element.CaptionFont.Size := 9;

Eine bessere Lösung ist mir noch nicht eingefallen.

Gruß Jörg

Frank Ranis
Beiträge: 212
Registriert: Do 24. Jan 2013, 21:22

Re: Skallierung 4K

Beitrag von Frank Ranis »

Hallo ,

ich danke euch für die vielen Tipps.

Das wird noch ein Spass (Boa).

Die Anwendung habe ich seit 18 Jahren in der Mache , und immer wieder weitergebaut und dranngefrickelt.
Schriftgrößen und Fonts habe ich immer manuelle eingetragen , nie default benutzt.
Der Anker-Editor wurde nie benutzt , alle Komponenten immer von Hand aneinandergereiht , so wie es optisch einigemaßen passte.

Und nun fliegt mir das ganze Widgetset- und Hochauflösende-Gedöns um die Ohren.

Gruß

Frank
www.flz-vortex.de

MmVisual
Beiträge: 1609
Registriert: Fr 10. Okt 2008, 23:54
OS, Lazarus, FPC: Winuxarm (L 4.2 FPC 3.2.2)
CPU-Target: 32/64Bit

Re: Skallierung 4K

Beitrag von MmVisual »

Lazarus kann das schon perfekt.

Code: Alles auswählen

TForm.ScaleBy(Faktor, 100);

//Also:
procedure TForm1.FormCreate(Sender: TObject); 
Begin
  ScaleBy(150, 100);
End;
Wegen dem Anker-Editor...
Ja ich habe vor ein paar Jahren diesen ebenfalls in meiner Anwendung mit tausenden von Komponenten doch mal umgesetzt. Das war 1 Woche Arbeit - hat sich jedoch gelohnt. Nur muss man immer wieder die Höhe vom überliegenden Panel manuell setzen, das kann der Lazarus Anker leider irgendwie nicht automatisch.

Man muss nunmal die Dinge so nutzen wie diese von anderen Programmierern vorgesehen sind. Damit kann man deren Features voll nutzen und hat es schlussendlich viel einfacher. Daher, baue deine EXE um, es geht einfacher als wie man am Anfang denkt.

Alternative: Wer mit dem Kopf durch die Wand gehen will, der sollte sich vorher überlegen, was man da drüben überhaupt will.
EleLa - Elektronik Lagerverwaltung - www.elela.de

Benutzeravatar
W126
Lazarusforum e. V.
Beiträge: 59
Registriert: Mo 27. Jul 2015, 11:19
OS, Lazarus, FPC: Linux
CPU-Target: Xeon Silver x64
Wohnort: Hofheim am Taunus

Re: Skallierung 4K

Beitrag von W126 »

Lazarus kann das schon perfekt.
wow, das werde ich mal testen. Vielen Dank für den Tip!

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

Re: Skallierung 4K

Beitrag von wp_xyz »

MmVisual hat geschrieben: Di 28. Okt 2025, 11:26 Lazarus kann das schon perfekt.
Ganz genau. Denn Lazarus ist in Lazarus geschrieben, für das Layout sind genau die hier genannten Tools verwendet.

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6983
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Re: Skallierung 4K

Beitrag von af0815 »

Frank Ranis hat geschrieben: Di 28. Okt 2025, 10:03 Und nun fliegt mir das ganze Widgetset- und Hochauflösende-Gedöns um die Ohren.
Wenn man ein App solange betreut, so fliegen einem die kleinen Sünden später als schwere Bürde auf dem Kopf.

Ich glaube die Erfahrung macht jeder, der eine App länger pflegt oder plötzlich gezwungen wird, die Plattform zu wechseln.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

Warf
Beiträge: 2220
Registriert: Di 23. Sep 2014, 17:46
OS, Lazarus, FPC: Win10 | Linux
CPU-Target: x86_64

Re: Skallierung 4K

Beitrag von Warf »

Unter Windows wird die Skalierung über das Manifest der App festgelegt, das geht einfach über die Projekteinstellungen. Unter Linux ist die Skalierung etwas anders. Da gibt es zum einen die Unterschiede zwischen X11 und Wayland. Scaling in X11 ist einfach pixel scaling. Da musst du nichts machen.
Bei Wayland kommt es etwas drauf an. XWayland, was X11 Anwendungen in Wayland emuliert (wird z.B. für GTK2 benutzt) kann 2 arten von scaling, entweder pixel scaling wie altes X11, oder application scaling. Dabei wird dem Programm eine viel größere Auflösung vorgegaukelt und dann auf die schmale Auflösung des Bildschirms projeziert. Wenn die App in relativen Größen arbeitet ist das zweite besser, in absoluten Größen dann das erste.

Wie das scaling bei Wayland Anwendungen in Wayland läuft (z.b. wenn man qt6 benutzt) weis ich grade nicht direkt, aber ich gehe von aus das QT sich selbst drum kümmert, wie das win32 widgetsrt unter windows

Antworten