Delphi-PRAXiS
Seite 2 von 5     12 34     Letzte »    

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Software-Projekte der Mitglieder (https://www.delphipraxis.net/26-software-projekte-der-mitglieder/)
-   -   RedeemerSVG.TSVGImage - Kleine SVG-Unit für Delphi mit GDI (https://www.delphipraxis.net/193635-redeemersvg-tsvgimage-kleine-svg-unit-fuer-delphi-mit-gdi.html)

Rollo62 26. Aug 2017 12:39

AW: RedeemerSVG.TSVGImage - Kleine SVG-Unit für Delphi mit GDI
 
Hätte ich schon gemacht und gecheckt wo der Fehler herkommt. Aber das Demo fehlt in dem File.
Ich habe jetzt keine Zeit das alles selber nachzubauen

Rollo

Redeemer 26. Aug 2017 14:21

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

Zitat von DerAndereMicha (Beitrag 1379527)
Schade. Ich habe noch ein anderes Projekt hier, welches mit Delphi 2007 geschrieben wurde und dort hätte ich gerne eine WMF-Lösung durch SVG ersetzt. Leider funktioniert nämlich auch die schon von mir erwähnte kommerzielle SVG-Komponente nicht mehr unter Delphi 2007.

Gruß
Micha

Die alte Version dürfte auch in Delphi 2007 kompiliert haben (TEncoding aus TStringList.LoadFromStream rausschmeißen), inzwischen nutzt es mehrere Generics, dementsprechend wird es nicht laufen. Sie dürfte bereits deutlich schneller laufen, wenn man konsequent einfach das Wort "MidStr" durch "Copy" ersetzt. Eventuell brauchst du PNGDelphi.

Den Quelltext der Demo-App werde ich demnächst mal beilegen. Stürzt die neueste Version immer noch bei dir ab?

samso 26. Aug 2017 16:53

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

Zitat von Redeemer (Beitrag 1379529)
Es werden mein eigener XML-Reader (wegen der vielen nicht zwingend zu schließenden Tags)...verwendet

Das "wegen der vielen nicht zwingend zu schließenden Tags" verstehe ich nicht. Ist SVG also keine gültiges XML-Format? Hast Du ein Beispiel für die Abweichungen im Format?

Redeemer 26. Aug 2017 20:21

AW: RedeemerSVG.TSVGImage - Kleine SVG-Unit für Delphi mit GDI
 
SVG2 ist, ebenso wie HTML4 und HTML5, im Allgemeinen kein gültiges XML. XHTML und ich glaube auch SVG1 waren XML. Für SVG2 steht das nirgendwo ganz konkret, aber im Draft steht:
Zitat:

SVG is defined in terms of a document object model (DOM), rather than a particular file format or document type. For SVG content, therefore, conformance with this specification is defined by whether the content is or can generate a conforming DOM. Additional conformance classes depend on whether the content is also valid and well-formed XML.
Anschließend steht da mehr oder weniger, dass SVG nur XML ist, wenn es gültiges XML ist.
Der erste Satz der Spezifikation wurde von SVG1 zu SVG2 von "described in XML" in "based on XML" geändert.

HTML4 und HTML5 sind ganz eindeutig kein XML. <td>, <li> und viele weitere müssen ja nicht geschlossen werden.

samso 27. Aug 2017 07:06

AW: RedeemerSVG.TSVGImage - Kleine SVG-Unit für Delphi mit GDI
 
Danke für die Erklärung. Das klingt ja nicht so toll.

jaenicke 27. Aug 2017 07:51

AW: RedeemerSVG.TSVGImage - Kleine SVG-Unit für Delphi mit GDI
 
Ich verstehe die Spezifikation so, dass SVG alleine XML kompatibel ist, aber auch mit HTML Syntax in HTML-Dokumente eingebettet werden kann.

Gibt es bei SVG tatsächlich Elemente die gar nicht geschlossen werden müssen, oder nur die Möglichkeit von self closing tags?

himitsu 27. Aug 2017 09:41

AW: RedeemerSVG.TSVGImage - Kleine SVG-Unit für Delphi mit GDI
 
Wenn/da es mit XML kompatibel ist, müssen alle Elemente geschlossen sein.
Allgemein ist XML mit HTML kompatibel und mit XHTML sowieso, bzw. XHTML ist eigentlich eine Erweiterung von HTML, die mit XML kompatibel ist.

Redeemer 27. Aug 2017 12:51

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

Zitat von jaenicke (Beitrag 1379552)
Ich verstehe die Spezifikation so, dass SVG alleine XML kompatibel ist, aber auch mit HTML Syntax in HTML-Dokumente eingebettet werden kann.

Welche hast du gelesen? SVG1 und SVG2 sind da komplett unterschiedlich. Der von mir zitierte Teil ist durch „can generate a conforming DOM“ ja schon sehr deutlich, dass eine SVG2-Datei weder XML noch DOM ist. Statt mir kompliziert das dazugehörige XML oder DOM zu generieren, habe ich mir lieber einen Parser geschrieben, der da toleranter ist.
Ich weiß gerade keine Tags, die nur optional geschlossen werden müssen, das liegt aber auch daran, dass ich keine Website finden konnte, wo das steht. selfHTML behandelt in der Hinsicht nur SVG1. Meine Klasse lädt übrigens auch das erste SVG-Bild in HTML-Dateien, was nicht unbedingt beabsichtigt ist, aber ein nettes Feature.

Redeemer 1. Sep 2017 14:00

AW: RedeemerSVG.TSVGImage - Kleine SVG-Unit für Delphi mit GDI
 
Habe die neue Version 0.2b-alpha um die Lösung mit dem alternativen UTF-8-Encoding ergänzt. Der Download enthält jetzt das Projekt für die Demoanwendung.

In dem Projekt, in dem ich das nutze, habe ich leider ein Problem:
Delphi-Quellcode:
type TSVGImage = class(TPNGImage)
  ...
end;

...

procedure DoSomething();
var
  GraphicClass: TGraphicClass;
  Graphic: TGraphic;
begin
  GraphicClass := TSVGImage;
  Graphic := GraphicClass.Create(); // Ruft TPNGImage.Create() auf. (schlecht)
  // ...aber...
  Graphic := TSVGImage.Create();    // Ruft TSVGImage.Create() auf. (gut)
end
Das liegt wohl daran, dass ich bei Create reintroduce verwende statt override, denn die CreateBlank-Methode des zugrundeliegenden PNG-Bilds benötigt die Create-Methode des PNG-Bilds, weshalb ich Create nicht überschreiben kann. Habt ihr da Ideen?

TiGü 1. Sep 2017 14:21

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

Zitat von Redeemer (Beitrag 1380134)
]Das liegt wohl daran, dass ich bei Create reintroduce verwende statt override, denn die CreateBlank-Methode des zugrundeliegenden PNG-Bilds benötigt die Create-Methode des PNG-Bilds, weshalb ich Create nicht überschreiben kann. Habt ihr da Ideen?

Hä, wieso nicht override?
Du rufst doch den TPNGImage.CreateBlank innerhalb deines TSVGImage.Create auf. Muss doch gehen ohne reintroduce.

Delphi-Quellcode:
...
  public
    constructor Create(); override;
    procedure LoadFromStream(Stream: TStream); override;
end;

constructor TSVGImage.Create;
begin
  inherited CreateBlank(COLOR_RGBALPHA, 8, 1, 1); // 0 führt beim Setzen einer neuen Größe zum Fehler
end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:51 Uhr.
Seite 2 von 5     12 34     Letzte »    

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