AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Projekte RedeemerSVG.TSVGImage - Kleine SVG-Unit für Delphi mit GDI
Thema durchsuchen
Ansicht
Themen-Optionen

RedeemerSVG.TSVGImage - Kleine SVG-Unit für Delphi mit GDI

Ein Thema von Redeemer · begonnen am 23. Aug 2017 · letzter Beitrag vom 30. Okt 2018
Antwort Antwort
TiGü

Registriert seit: 6. Apr 2011
Ort: Berlin
3.073 Beiträge
 
Delphi 10.4 Sydney
 
#1

AW: RedeemerSVG.TSVGImage - Kleine SVG-Unit für Delphi mit GDI

  Alt 1. Nov 2017, 14:24
Recall würde die Werte der Klasseninstanz von TSVGContext (wenn es dann eine Klasse wird) wieder zurück schreiben, wenn sie in ReadStyle geändert wurden.
Ähnlich wie dem Verwerfen der Änderung auf der lokalen Record-Kopie.
Ob das dann am Ende schneller ist als mit record muss natürlich geprüft werden, dass kann ich so auch nicht sehen.
  Mit Zitat antworten Zitat
TiGü

Registriert seit: 6. Apr 2011
Ort: Berlin
3.073 Beiträge
 
Delphi 10.4 Sydney
 
#2

AW: RedeemerSVG.TSVGImage - Kleine SVG-Unit für Delphi mit GDI

  Alt 4. Jun 2018, 14:38
Übrigens an der Stelle nochmal Respekt an Redeemer. Ich hatte spaßeshalber mal versucht die DX-Header auf ID2D1DeviceContext5 (https://msdn.microsoft.com/en-us/lib...(v=vs.85).aspx) anzuheben, um die Methoden CreateSvgDocument und DrawSvgDocument zur Verfügung zu haben.
Damit wird zwar die Karte vom Landshut.svg gezeichnet, aber die Texte fehlen. So ganz fertig ist die Microsoft-Implementierung also nicht.
  Mit Zitat antworten Zitat
berens

Registriert seit: 3. Sep 2004
441 Beiträge
 
Delphi 10.4 Sydney
 
#3

AW: RedeemerSVG.TSVGImage - Kleine SVG-Unit für Delphi mit GDI

  Alt 7. Jun 2018, 15:10
Ich probiere gerade die Komponente aus.

Mir ist mit einer .svg-Datei passiert, dass die Angaben in "mm" waren. Entsprechender Fehler korrigiert:

Delphi-Quellcode:
unit RedeemerSVGHelpers;
// Zeile 93
if EndsText('px', temp) then
  Delete(temp, Length(temp) - 1, 2) // Standardeinheit, ignorieren
else if EndsText('pt', temp) then
Unterstützung für "mm" hinzugefügt. Schaut normal aus.
Delphi-Quellcode:
unit RedeemerSVGHelpers;
// Zeile 93
if EndsText('px', temp) then
  Delete(temp, Length(temp) - 1, 2) // Standardeinheit, ignorieren
else if EndsText('mm', temp) then
  Delete(temp, Length(temp) - 1, 2) // Standardeinheit, ignorieren
else
  if EndsText('pt', temp) then

Evtl. sollte die Prozedur so angepasst werden, dass der Text ist "temp" so bereinigt wird, dass wirklich nur Zahlen 0-9, "." und "," drin stehen dürfen, falls andere Einheiten hiermit immer noch nicht abgedeckt sind? Zumindest Incscape bietet neben "mm" noch "pc", "in" und "cm" an...
Delphi-Quellcode:
  // Zeile 113
  Value := ReadFloat(temp) * Factor;
Frage 1
Ein tatsächliches Problem was ich habe: Die andere Datei (siehe Anhang) wird nur hier nur als schwarzes Rechteck angezeigt, lässt sich in anderen Programmen aber ganz normal öffnen...

Frage 2
Delphi-Quellcode:
  SVG := TSVGImage.Create;
  SVG.LoadFromFile('c:\temp\svg.svg');
  SVG.SetSize(1000,900);
  Image1.Picture.Assign(SVG);
Das Bild wird leider nur ganz klein oben links dargestellt (ca. 32x32 px), des Rest des Bildes (1000x900 px) ist schwarz? Wie vergrößert man die SVG Graphik korrekt? Ich habe keine Ahnung wie ich das Callback-Event
type TSizeCallbackEvent = procedure (const Viewport: TRealRect; var Dimensions: TRealPoint) of object; innerhalb einer Prozedur (bzw. überhaupt) verwenden soll, hier fehlt mir komplett sowohl Grundlagenwissen wie Beispiel...
Angehängte Dateien
Dateityp: zip 01d.zip (1.005 Bytes, 7x aufgerufen)
Delphi 10.4 32-Bit auf Windows 10 Pro 64-Bit, ehem. Delphi 2010 32-Bit auf Windows 10 Pro 64-Bit

Geändert von berens ( 7. Jun 2018 um 15:27 Uhr)
  Mit Zitat antworten Zitat
Redeemer

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

AW: RedeemerSVG.TSVGImage - Kleine SVG-Unit für Delphi mit GDI

  Alt 7. Jun 2018, 19:38
Hi,

die angehängte Datei ist keine SVGTiny-Datei. Meine Unit liest nur SVGTiny, weil sie sonst eine komplette CSS-Selektor-Logik enthalten müsste. Die Unterstützung des Style-Attributs ist hingegen in SVGTiny zwingend vorgeschrieben und wird unterstützt. Vielleicht gibt es irgendwo im Internet einen Konverter von SVG nach SVGTiny. Microsoft hat mal einen auf Github geladen, aber den gibt es nicht mehr glaube ich. Wer die SVG erstellt hat, muss sie wohl noch einmal als SVGTiny speichern. Meine Unit unterstützt eine scheinbar wahllose Auswahl von Features aus SVGTiny und SVG 2.0.

Für meinen Job habe ich die Unit gestern um die Eigenschaft vector-effects aus SVG 2.0 erweitert (klingt großartig, ist aber einfach nur das Deaktivieren der Konturenskalierung).

Zum SizeCallback: Du brauchst eine Ereignisbehandlung (eine Prozedur) mit genau den angegebenen Parametern. Nennen wir sie einfach HandleZoom :
Delphi-Quellcode:
procedure TForm1.HandleZoom(const Viewport: TRealRect; var Dimensions: TRealPoint);
begin
  Dimensions.x := StrToFloat(Edit4.Text) / 100 * Dimensions.x;
  Dimensions.y := StrToFloat(Edit4.Text) / 100 * Dimensions.y;
end;
Diese Prozedur sagt RedeemerSVG, es soll das Bild um den Prozentsatz in Edit4 zoomen. Bevor du das Bild lädst, setzt du das Superglobal SizeCallback auf diese Prozedur:
SizeCallback := HandleZoom;
Janni
2005 PE, 2009 PA, XE2 PA

Geändert von Redeemer ( 7. Jun 2018 um 19:41 Uhr)
  Mit Zitat antworten Zitat
Redeemer

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

AW: RedeemerSVG.TSVGImage - Kleine SVG-Unit für Delphi mit GDI

  Alt 29. Okt 2018, 21:21
Es gibt Neuigkeiten. Die nächste Version, wann auch immer sie rauskommt, unterstützt u.a.:
  • vector-effect="non-scaling-stroke"
  • Halbtransparenz (nur für schwarze und weiße Füllungen, wegen der Arbeitsweise von ROP2)
  • <image> (keine Transparenz)
  • <pattern> (keine Transparenz)
  • abschaltbare Transparenz und Supersampling (wegen Performance und Speicherbedarf)
  • standardkonformes Verhalten auf diverse völlig unsinnige Pfaddaten (z.B. Bézierkurven-Befehl ohne Kontrollpunkte)
  • Textdekoration
Außerdem habe ich heute gesamte Klassenlayout geändert. Die meisten Funktionen sind nun in einer Klasse TSVGInterpreter zu finden, die auf beliebige TCanvas-Erben zeichnen kann. Grund dafür ist, dass ich von der neuen Version 24 von List & Label (betrifft auch Version 23) maßlos enttäuscht bin. Die „SVG-Unterstützung“ beschränkt sich dort auf die Konvertierung in eine Rastergrafik und Transparenz wird bei Ausgabe auf einem Drucker auch nicht unterstützt... Meine neue Klasse TSVGMetafile zeichnet auf ein Delphi-Referenz durchsuchenTMetafileCanvas und erstellt so ein Delphi-Referenz durchsuchenTMetafile (EMF-Datei), das mit List & Label als Vektorgrafik ausgegeben wird. Metafiles sind einfach nur eine Liste von GDI-Befehlen, die entsprechende Anpassung meiner Klasse war dementsprechend sehr einfach.
Janni
2005 PE, 2009 PA, XE2 PA
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#6

AW: RedeemerSVG.TSVGImage - Kleine SVG-Unit für Delphi mit GDI

  Alt 30. Okt 2018, 06:01
Zitat:
[OT]
Die Nutzung ist kostenlos. Wer es in einem eigenen Produkt verwendet, das nicht für den Eigenbedarf ist, muss mir eine Nachricht schreiben. Weiterentwicklungen und Ableitungen der Klasse TSVGImage müssen mir auf Wunsch zur Verfügung gestellt werden.
[/OT]
Nur mal Informationshalber.
Und du denkst irgendjemand hält sich daran? Die Hoffnung stirbt zuletzt.

gruss

Geändert von EWeiss (30. Okt 2018 um 06:09 Uhr)
  Mit Zitat antworten Zitat
Redeemer

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

AW: RedeemerSVG.TSVGImage - Kleine SVG-Unit für Delphi mit GDI

  Alt 30. Okt 2018, 08:37
Na ja, ich würde ja erwarten, dass die Delphi-Community noch etwas Ehre hat. Mich würde halt interessieren, ob Leute überhaupt Interesse an SVG-Unterstützung für Delphi haben.

Warum informationshalber? Hast du irgendein Projekt entdeckt, dass das nutzt? Die gesamte Doku und alle Kommentare sind auf Deutsch, dadurch sollte sich der Kreis erheblich einschränken.
Janni
2005 PE, 2009 PA, XE2 PA
  Mit Zitat antworten Zitat
Antwort Antwort


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 10:50 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz