Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Werkzeuge (https://www.delphipraxis.net/63-sonstige-werkzeuge/)
-   -   high-dpi-patches-for-delphi von Uwe Raabe (https://www.delphipraxis.net/196643-high-dpi-patches-delphi-von-uwe-raabe.html)

Pfaffe 6. Jun 2018 07:26

high-dpi-patches-for-delphi von Uwe Raabe
 
Uwe Raabe hat ein high-dpi-patches-for-delphi veröffentlicht:
https://www.uweraabe.de/Blog/2018/06...es-for-delphi/

Habe bereits Mercurial installiert, komme aber nicht weiter. Auch andere Tools habe ich ausprobiert, habe aber scheinbar dazu kein Talent.
Wie kann ich die DelphiSource_13.patch und die Vcl.ThemedActnCtrls.pas verheiraten?

Uwe Raabe 6. Jun 2018 08:48

AW: high-dpi-patches-for-delphi von Uwe Raabe
 
OK, hier eine step-by-step Anleitung unter Benutzung von Mercurial. Ich habe mein TortoiseHG auf Englisch eingestellt, da ich so mit den allgemein üblichen Begriffen arbeiten kann und mich nicht immer durch die teils grausigen Übersetzungen ärgern muss. Deswegen verwende ich hier immer beide Versionen:
  1. Die HighDPIPatches.zip in ein leeres Verzeichnis entpacken
  2. Die Datei HighDPI.manifest in ein anderes Verzeichnis verschieben
  3. TortoiseHG installieren (enthält Mercurial, aber hat eine GUI)
  4. Die TortoiseHG Workbench aufrufen
  5. Über das File/Datei-Menü ein New Repository/Neues Projektarchiv in einem Verzeichnis eurer Wahl für die veränderten Sourcen anlegen (Bsp: "C:\MyRepos\DelphiPatched" im weiteren "PatchRepo" genannt)
  6. Wahlweise das gesamte Source-Verzeichnis oder nur den Source\vcl Teil unter Beibehaltung der Struktur von Delphi Tokyo ("c:\Program Files (x86)\Embarcadero\Studio\19.0\") in das PatchRepo kopieren.
  7. In TortoiseHG im View/Anzeige-Menü den Eintrag Commit/Übernehmen auswählen
  8. Falls die Dateiliste leer ist, einmal den Refresh-Button klicken
  9. Alle Dateien markieren (das Häkchen in der Headerzeile)
  10. Im Kommentarfenster einen sinnvollen Text eingeben (z.B. "Original Delphi 10.2.3")
  11. Auf Commit/Übernehmen klicken
  12. Über das Repository/Pojektarchiv-Menu den Eintrag Import Patches (keine Übersetzung) anwählen.
  13. Den Button Browse Directory/Verzeichnis durchsuchen klicken und das oben entpackte HighDPIPatches-Verzeichnis auswählen
  14. Nun sollten die einzelnen Patches in numerischer Reihenfole in der Liste auftauchen
  15. Import/Importieren klicken
  16. Das PatchRepo in den Suchpfad eures Projekts aufnehmen
  17. Die HighDPI.manifest als Benutzerdefiniertes Manifest im Projekt eintragen

GPRSNerd 6. Jun 2018 14:40

AW: high-dpi-patches-for-delphi von Uwe Raabe
 
Geht auch ohne die Installation von riesigen Programmpaketen:

1. GNU-Patchtool für Windows (patch.exe) hier runterladen: http://gnuwin32.sourceforge.net/down...ch-bin-zip.php
2. Umbenennen in zb "apply_diff.exe" (patch.exe benötigt Admin-Rechte, bei der UAC-Nachfrage gehen aber die Kommandozeilenparameter verloren)
3. In allen *.patch-Dateien die Zeilenumbrüche von LF auf Cr+LF umstellen, zB mit Notepad++
4. Die zu patchenden VCL-Source-Dateien aus Delphi in den Ordner mit den Patchdateien kopieren:
  • Vcl.ActnMan.pas
  • Vcl.ActnMenus.pas
  • Vcl.CheckLst.pas
  • Vcl.ComCtrls.pas
  • Vcl.Controls.pas
  • Vcl.ExtCtrls.pas
  • Vcl.Forms.pas
  • Vcl.Menus.pas
  • Vcl.ThemedActnCtrls.pas
  • Vcl.Themes.pas
5. Die Patchdateien mit apply_diff anwenden, zB über eine Batchdatei:
  • apply_diff -i DelphiSource_01.patch
  • apply_diff -i DelphiSource_02.patch
  • apply_diff -i DelphiSource_03.patch
  • apply_diff -i DelphiSource_04.patch
  • apply_diff -i DelphiSource_05.patch
  • apply_diff -i DelphiSource_06.patch
  • apply_diff -i DelphiSource_07.patch
  • apply_diff -i DelphiSource_08.patch
  • apply_diff -i DelphiSource_09.patch
  • apply_diff -i DelphiSource_10.patch
  • apply_diff -i DelphiSource_11.patch
  • apply_diff -i DelphiSource_12.patch
  • apply_diff -i DelphiSource_13.patch

Patchen/mergen ist unter Windows wirklich nicht trivial...

mensch72 6. Jun 2018 18:36

AW: high-dpi-patches-for-delphi von Uwe Raabe
 
wenn eh Freigabe&Kontakt zu Eaba.. warum Listen die nicht diesen VCL-Patch "voll" bei sich auf dem Server und prüfen via Edn-Login ob man ein aktuelles 10.2.3 besitzt?

Es dauert sicher eh nich sehr lang, dan gibt es "für Bequeme" dazu die fertig angepassten VCL PAS Quellen als Archiv "irgendwo" zum Download.
Das könnte Emba mit quasi Null Aufwand vermeiden, den die haben ja alles, weil geprüft haben die vor Freigabe den Patch ja;)

blawen 6. Jun 2018 21:19

AW: high-dpi-patches-for-delphi von Uwe Raabe
 
Eine kleine "Unschönheit" kann es mit Fremdkomponenten, wie den JVCL geben:

Zitat:

[dcc32 Fataler Fehler] uFMain.pas(21): F2051 Unit JvThemes wurde mit einer unterschiedlichen Version von Vcl.Forms.TCustomForm compiliert

Uwe Raabe 6. Jun 2018 22:27

AW: high-dpi-patches-for-delphi von Uwe Raabe
 
Zitat:

Zitat von blawen (Beitrag 1404097)
Eine kleine "Unschönheit" kann es mit Fremdkomponenten, wie den JVCL geben:

Zitat:

[dcc32 Fataler Fehler] uFMain.pas(21): F2051 Unit JvThemes wurde mit einer unterschiedlichen Version von Vcl.Forms.TCustomForm compiliert

Das könnte in der Tat etwas tricky werden. Die Packages in der IDE setzen noch auf der ungepatchten VCL auf, während deine Programme mit den neuen Sourcen compiliert werden müssen. Dazu sind natürlich auch alle Bibliotheken anhand ihrer Sourcen mit zu compilieren.

Wer mit Runtime-Packages compiliert ist leider auch außen vor.

Ich gehe allerdings im Moment davon aus, daß die Änderungen ab Delphi 10.3 integriert sein werden.

blawen 6. Jun 2018 23:06

AW: high-dpi-patches-for-delphi von Uwe Raabe
 
Zitat:

Zitat von Uwe Raabe (Beitrag 1404099)
Ich gehe allerdings im Moment davon aus, daß die Änderungen ab Delphi 10.3 integriert sein werden.

Dies klingt gut und lieben Dank für Deinen Einsatz :-)

Uwe Raabe 6. Jun 2018 23:39

AW: high-dpi-patches-for-delphi von Uwe Raabe
 
Der nächste Schritt wäre dann der High-DPI Support für VCL Styles. Das erfordert aber eine größere Änderung an der Architektur der Styles. Bei dem SystemStyle liefert Windows (ab einer geeigneten Version) die skalierten Bitmaps. Das müsste bei den VCL Styles dann eben innerhalb der Styles geschehen. Wie das dann im Detail aussehen kann, weiß ich noch nicht. Immerhin bietet der Style-Designer ja schon eine Skalierung um 1.5x, 2x und 3x an.

Bei den SystemStyles habe ich es ja so gelöst, daß jedes Form seine eigene Style-Instanz bekommt, weil das Windows-Handle dann die passenden Style-Ressourcen selektiert. Das könnte man noch etwas sparsamer gestalten, wenn man die verschiedenen Auflösungen cached (Windows lädt alle Ressourcen anhand der DPI der vorhanden Monitore) und diese anhand der Form-DPI selektiert. Wenn man das jetzt etwas weiter führt, könnte jedes Form auch gleich seinen eigenen Style bekommen, womit Multi-Style Anwendungen ermöglicht würden. Extrapoliert auf die IDE könnte man dann auch die Forms gleich im Designer mit dem späteren Runtime-Style bearbeiten und auch mal eben umschalten, um zu sehen ob's noch passt.

Ist halt alles eine Frage der richtigen Architektur. Da ist am Anfang offenbar etwas zu kurz gedacht worden. Jetzt ist der Aufwand für eine Erweiterung (wie jetzt Per-Monitor DPI) relativ aufwändig. Mit einer besseren initialen und vorausschauenden Planung wäre das wesentlich einfacher, schneller und somit deutlich billiger zu realisieren (oder womöglich schon realisiert worden).

EWeiss 7. Jun 2018 01:48

AW: high-dpi-patches-for-delphi von Uwe Raabe
 
Zitat:

Wenn man das jetzt etwas weiter führt, könnte jedes Form auch gleich seinen eigenen Style bekommen
Villa Kunterbunt lässt grüßen.. nein ehrlich was für einen sinn macht das?
Am besten jedes Fenster im Kacheldesign und anderer Farbe warum dann überhaupt noch Fenster.

gruss

BlueStarHH 7. Jun 2018 07:40

AW: high-dpi-patches-for-delphi von Uwe Raabe
 
@Uwe: Danke für Deine Arbeit! Top!

Wird der Patch in das nächste Delphi-Update eingebaut?

Edit: Sorry, hab den Eintrag oben überlesen, wo steht, dass es in 10.3 eingebaut wird.

Rollo62 7. Jun 2018 07:51

AW: high-dpi-patches-for-delphi von Uwe Raabe
 
Hallo Uwe,

dankesehr für das Patch.

Die Aussichten unten sehen ja nicht so rosig aus, ich hoffe mal dass das nächste Update nicht sehr instabil wird, bei den vielen Baustellen (DPI, Android8, XCode9, ...).

Betrifft das ganze eigentlich auch FMX in gleicher Weise ?
Ich dachte das durch die MultiResolution-Bitmaps solche Dinge sanfter abgefangen werden können,
oder ist das nicht der Fall.
Wären evtl. die MultiResolutionBitmaps auch ein Thema für VCL ?
Das sollte doch machbar sein, und es könnte womöglich Einiges von FMX zu VCL portiert werden.

Rollo

Uwe Raabe 7. Jun 2018 08:37

AW: high-dpi-patches-for-delphi von Uwe Raabe
 
Zitat:

Zitat von Rollo62 (Beitrag 1404130)
Betrifft das ganze eigentlich auch FMX in gleicher Weise ?
Ich dachte das durch die MultiResolution-Bitmaps solche Dinge sanfter abgefangen werden können,
oder ist das nicht der Fall.
Wären evtl. die MultiResolutionBitmaps auch ein Thema für VCL ?
Das sollte doch machbar sein, und es könnte womöglich Einiges von FMX zu VCL portiert werden.

Das lässt sich leider nicht so einfach übernehmen, da die Windwos-Controls in der Regel auf die Windows-eigenen ImageLists angewiesen sind, die wiederum in TCustomImageList abgebildet werden. Mit der DynImageList aus meinem High-DPI Testprogramm habe ich ja schon eine mögliche Lösung geliefert. Die Komponente werde ich demnächst auch noch separat veröffentlichen. Für eine wirklich brauchbare High-DPI Unterstützung wird Embarcadero um eine ähnliche Lösung nicht herum kommen.

Die High-DPI Probleme bei FMX sind naturgemäß anderer Natur und bedürfen einer eigenen Herangehensweise. Da ich da aber aktuell keinen Eigenbedarf habe, steht das nicht gerade weit oben auf meiner Liste.

Ralf22 16. Okt 2018 09:06

AW: high-dpi-patches-for-delphi von Uwe Raabe
 
Hallo,

ich habe einen merkwürdigen Effekt nur bei 4K-Monitoren: Ziehe ich ein anderes Fenster über mein mit Delphi erstelltes Fenster, so bleiben im Hintergrund einiger Komponenten Reste des gezogenen Fensters stehen. Als ob der Hintergrund der Komponenten teilweise nicht neu gezeichnet würde. Sind Delphi Standard Komponenten (Radiobutton, Checkbox,.. auf Panel und Tabsheet). Den gleichen Effekt habe ich in der IDE von Delphi beim "Optionen" Dialog und nur auf dem 4K Monitor.

Den Treiber der Grafikkarte habe ich aktualisiert.

Windows 10, Delphi 10.2.3

Ist dieser Effekt bekannt? Wird der mit den Patches eventuell gefixt?

Danke und Gruß Ralf

KodeZwerg 26. Nov 2018 15:15

AW: high-dpi-patches-for-delphi von Uwe Raabe
 
@Uwe, vielen Dank für diesen Top patch!
Du hast da echt eine tolle verbesserung geschaffen, Schade das es doch nicht seitens Emba in Rio aufgenommen wurde.
Naja, Madagaskar hat sich sich ja schon angekündigt, bleibt zu hoffen das Emba es dieses mal realisiert was da nicht so ganz korrekt läuft.
Mir war bis jetzt übrigens nicht so ganz klar worum es sich bei diesen High DPI patch drehte weswegen ich ihn anfangs ignorierte.

Klasse das sich ein Profi dem erfolgreich gewidmet hat.

Aus meiner Sicht hast Du dafür glatt einen Orden der Tapferkeit verdient!

Du leistest da echt hervorragende Pionierarbeit!



Herzliche Grüße!


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:11 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz