AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

TeeChart - Zu großer Rand beim EMF-Export

Offene Frage von "SteffenSchm"
Ein Thema von SteffenSchm · begonnen am 28. Jul 2022 · letzter Beitrag vom 2. Aug 2022
Antwort Antwort
Seite 2 von 3     12 3      
hotrs02

Registriert seit: 7. Apr 2022
40 Beiträge
 
#11

AW: TeeChart - Zu großer Rand beim EMF-Export

  Alt 29. Jul 2022, 11:15
Wir hatten ein ähnliches Problem in Zusammenhang mit der Skalierung in Delphi 5. Die Skalierung des primären Monitors beeinflusste die Darstellung, auch wenn die Grafik auf einem anderen Monitor angezeigt wurde.

Ich habe das dann so gelöst, dass ich in einem Thread mittels SetThreadDpiAwarenessContext die DPI Awareness auf per Monitor (V2) stelle, anschließend mittels GetDpiForMonitor die tatsächlichen DPI des primären Monitors ermittle und daraus zwei Skalierungsfaktoren berechne, die letztendlich das Ausgaberechteck skalieren.

Allerdings verwenden wir bei der Erstellung des Metafiles nicht das Rechteck des Diagrams, sondern Abmessungen eines Ausgabebereichs innerhalb eines anderen Metafiles, in der das Diagramm dann mittels StretchDraw ausgegeben wird. Das ganze ist Teil einer auf Metafiles basierenden Druckvorschau.

In Delphi 10 / Delphi 11 wurde diese zusätzliche Skalierung bis auf weiteres wieder entfernt. Allerdings sind unsere Anwendungen bislang auch noch nicht als DPI Aware gekennzeichnet.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#12

AW: TeeChart - Zu großer Rand beim EMF-Export

  Alt 29. Jul 2022, 11:44
Die ersten APIs hatten nur eine DPI, also Die des Hauptmonitors.

Später wurde dann erst hinzugefügt, dass es JE Monitor anders skalieren kann
und zuletzt auch noch Teilweises Skalieren.

Zuerst kamen mehrere DPI, aber die Form nutzt nur jene, wo sie am Meisten drauf ist, also wo jeweils von Höhe und Breite mehr als die Hälfte liegt.
Und Zuletzt ist es so, dass bei Multimonitor jeder Fensterteil einzeln skaliert werden kann, damit die Fensterteile auf beiden Monitoren gleich groß sind.


Aber natürlich muß das erstmal Windows können, also 10+/11 und dann natürlich auch das Programm und dessen Manifest.



Gestern hatten wir bei einem Kollegen den Fall, da war Windows durcheinandergeraten.
Hatte die falsche DPI auf dem flaschen Monitor verwendet.
Dachten erst es liegt am RDP, aber es war lokal schon so falsch.

Kompletter Windowsneustart nicht mehr gemacht (aber leider im RDP schon alles geschlossen), da es dann schon reichte den Hauptmonitor mal kurz zu ändern und danach stimmte es wieder.
Wir hatten früher im RDP öfters schon andere Probleme, welche erst bei einem Serverneustart, oder zumindestens nach Abmeldung (nicht Trennen) des Nutzers, wieder richtig waren.



Ein kleines Surface auf HighDPI mit 200% an zwei großen FullHD mit 100%.
Der eine Monitor war der Hauptbildschirm, aber auf ihm war plötzlich ALLES doppelt so groß, bis auf ein Programm, was kein HighDPI konnte und bei 200% größtenteils nur noch halb so groß aussah.
$2B or not $2B

Geändert von himitsu (29. Jul 2022 um 14:40 Uhr)
  Mit Zitat antworten Zitat
SteffenSchm

Registriert seit: 2. Nov 2004
Ort: Herzogenaurach
84 Beiträge
 
Delphi 10.3 Rio
 
#13

AW: TeeChart - Zu großer Rand beim EMF-Export

  Alt 29. Jul 2022, 12:49
Danke Günther - das SVG-Format schau ich mir an!

Danke auch an alle anderen für die Hinweise. Da muss ich mich erst einmal durcharbeiten. War bis jetzt in einer Besprechung gebunden.
Steffen

Geändert von SteffenSchm (29. Jul 2022 um 14:22 Uhr)
  Mit Zitat antworten Zitat
Redeemer

Registriert seit: 19. Jan 2009
Ort: Kirchlinteln (LK Verden)
1.081 Beiträge
 
Delphi 2009 Professional
 
#14

AW: TeeChart - Zu großer Rand beim EMF-Export

  Alt 29. Jul 2022, 20:01
SVG wird von Word gerastert ausgegeben. Die Qualität leidet und/oder eine PDF-Ausgabe wird sehr groß. EMF wird hingegen als Vektordaten ausgeben, egal ob als PDF oder an den Drucker. Ich hab mir sogar extra eine Klasse geschrieben, die SVG verlustfrei nach EMF konvertiert, um Word und andere Programme dazu zu bringen, meine Grafiken als Vektor auszugeben.
Janni
2005 PE, 2009 PA, XE2 PA
  Mit Zitat antworten Zitat
SteffenSchm

Registriert seit: 2. Nov 2004
Ort: Herzogenaurach
84 Beiträge
 
Delphi 10.3 Rio
 
#15

AW: TeeChart - Zu großer Rand beim EMF-Export

  Alt 1. Aug 2022, 08:20
Das SVG-Format gibt es bei meiner TeeChart-Installation nicht!

Ich habe nur die standardmäßig mit Delphi 10.3 mitgelieferte Version. Das wird zwar SVG in der TeeChart-Hilfe beschrieben, die unit TeeSVGCanvas ist aber gar nicht mitgeliefert.

Werde ich wohl doch erst einmal bei Bitmap bleiben und mir die Sache mit den Bildschirmauflösungen noch einmal anschauen.

Besten Dank für Eure Hinweise!
Steffen
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.176 Beiträge
 
Delphi 10 Seattle Enterprise
 
#16

AW: TeeChart - Zu großer Rand beim EMF-Export

  Alt 1. Aug 2022, 11:08
Ok, ich bezog mich auf "TeeChart Pro", nicht die kostenlose Version. Da sind bei mir ca ein Dutzend Export-Formate.
  Mit Zitat antworten Zitat
SteffenSchm

Registriert seit: 2. Nov 2004
Ort: Herzogenaurach
84 Beiträge
 
Delphi 10.3 Rio
 
#17

AW: TeeChart - Zu großer Rand beim EMF-Export

  Alt 1. Aug 2022, 14:58
Ich habe das Problem zumindest mal eingrenzen und auch auf meinem Arbeitsplatz sichtbar machen können.

Die Ränder in der exportierten emf-Datei treten immer dann auf, wenn der Hauptmonitor (der mit den Windows-Symbolleisten) auf mehr als 100% skaliert ist. Die Ränder werden auch umso größer, je höher die Skalierung dieses Monitors ist (z.B. bei 150% Skalierung des Hauptmonitors beträgt der Rand des emf 50% des Diagramms - also Gesamtgröße 150%).

Das hilft erst einmal, um das Problem über entsprechende Windowseinstellungen zu umgehen.

Jetzt muss ich nur noch suchen, wie man das im Delphi-Programm bei der Erstellung des emf berücksichtigen kann.
Steffen
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#18

AW: TeeChart - Zu großer Rand beim EMF-Export

  Alt 1. Aug 2022, 15:19
Jupp, wie schon erwähnt, ist das Hauptproblem hier, dass TeeChart eben den Desktop als Referenz für die Ausgabe nutzt und dann halt die MonitorSkalierung sich dort böswillig rein hängt.

Die "richtige" Lösung wäre ja, wenn es im TeeChart repariert würde.

Nachträgelich das so hinzubiegen, dass es jetzt erstmal geht, gibt dann wieder Probleme, wenn Windows erneut an der MonitorAPI rumbspielt, was garantiert bald passiert.



Dein Programm läuft noch auf einer alten MonitorAPI-Version, bzw. auf Garkeiner/derErsten (wenn das Mainfest fehlt) ... über das Manifest kann man einstellen, welche Einstellungen Windows verwenden soll.
Dementsprechend ändert sich dann das Verhalten, aber grundsätzlich wird das auch nicht anders lösen, seöbst wenn mit PerMonitoDPI, weil das Fenster kann dann ebenfalls auf einem Monitor mit höherer DPI laufen.
$2B or not $2B
  Mit Zitat antworten Zitat
SteffenSchm

Registriert seit: 2. Nov 2004
Ort: Herzogenaurach
84 Beiträge
 
Delphi 10.3 Rio
 
#19

AW: TeeChart - Zu großer Rand beim EMF-Export

  Alt 1. Aug 2022, 17:17
Naja, auf eine Reparatur in TeeChart zu warten hat für mich eher keinen Sinn, zumal ich nicht die aktuelle Version von Delphi und TeeChart habe!

Mir würde es schon helfen, das Ganze nachträglich so hinzubiegen.
Als Nebenbei-Programmierer weiß ich aber nicht
- wie ich in Delphi die Skalierung des primären Monitors abfragen kann und
- wie ich die Größe der Zeichenfläche für das EMF beeinflussen kann
Steffen
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#20

AW: TeeChart - Zu großer Rand beim EMF-Export

  Alt 1. Aug 2022, 17:39
zum Ersten:

Einfach Delphi-Referenz durchsuchenTForm.PixelsPerInch bei der Form, wo der Chart drauf liegt,
bzw. bei Screen in den jeweiligen Monitor schauen.

hier noch paar mögliche Stellen uvm.
Delphi-Quellcode:
// Self = die aktuelle Form

Self.PixelsPerInch
Self.CurrentPPI // bzw. Self.GetCurrentPPI
Self.ScaleFactor

Self.Monitor.PixelsPerInch
Self.DefaultMonitor.PixelsPerInch

Screen.PixelsPerInch
Screen.DefaultPixelsPerInch
Screen.PrimaryMonitor.PixelsPerInch

...
https://en.delphipraxis.net/topic/63...ays-identical/


das Zweite ... gute Frage
$2B or not $2B

Geändert von himitsu ( 1. Aug 2022 um 17:44 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 3     12 3      

 

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:17 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