![]() |
SVG-Elemente mit SKIA parsen und bearbeiten?
Ich verwende Skia4Delphi in einer Delphi 11 Win32 VCL-Anwendung und lade eine SVG-Datei in ein TSkSvg-Steuerelement:
Code:
Wie kann ich alle SVG-Elemente und ihre jeweiligen Attribute im SVG parsen und sie in einer Baumansicht anzeigen, wobei die Hauptknoten die SVG-Elemente und die Knotenkinder die Elementattribute sind und die Knotenkinder der Elementattribute die bearbeitbaren Eigenschaften des jeweiligen Attributes sind?
SkSvg1.Svg.Source := TFile.ReadAllText(aFile);
Wenn ich dann in der Baumansicht ein Element auswähle, sollte dieses Element im TSkSvg-Steuerelement ausgewählt werden. Wenn ich dann einen Attribut-Knoten auswähle, sollte ich die Eigenschaften dieses Attributes einstellen können. |
AW: SVG-Elemente mit SKIA parsen und bearbeiten?
Die Source müsste eine DOM-Property haben (ISkSVGDOM) und von dort aus über Root (ISkSVGSVG).
|
AW: SVG-Elemente mit SKIA parsen und bearbeiten?
Zitat:
Delphi-Quellcode:
Aber wie kann ich von dort aus die SVG-Elemente finden?
SkSvg1.Svg.DOM.Root
DOM hat keine Methoden oder Eigenschaften zum Auffinden der SVG-Elemente: ![]() Wie man sieht, hat DOM die Methode FindNodeById(const AId: string), aber keine Methode, um alle NodeId-Elemente zu finden! |
AW: SVG-Elemente mit SKIA parsen und bearbeiten?
Liste der Anhänge anzeigen (Anzahl: 1)
Ah ja, verstehe.
Das parsen und durch den DOM navigieren scheint so nicht vorgesehen zu sein, wenn ich die richtige SKIA-Dokumentation anschaue. ![]() ![]() Aber am Ende ist eine SVG auch nur eine XML, die du mit den üblichen Bordmitteln parsen, verarbeiten und darstellen kannst. Hier mal was hingeschludert zum drauf aufbauen. Wie die Knoten dargestellt werden musst du deinen Wünschen natürlich anpassen. Von den einzelnen TreeNodes wieder zurückzugehen per id und das dann in SkSvg1.Svg.DOM.FindNodeById() zu stecken ist dann nur noch eine Fingerübung.
Delphi-Quellcode:
unit Unit2;
interface uses System.SysUtils, System.Variants, System.Classes, System.IOUtils, Vcl.Controls, Vcl.Forms, Vcl.StdCtrls, Vcl.ComCtrls, Skia, Skia.Vcl, Xml.XMLIntf, Xml.XMLDoc; type TForm1 = class(TForm) SkSvg1: TSkSvg; Button1: TButton; Memo1: TMemo; TreeView1: TTreeView; procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); var SvgFilePath, SvgAsText: string; XMLDoc: IXMLDocument; XMLNode: IXMLNode; TreeNode: TTreeNode; procedure Fill(Nodes: IXMLNodeList; Item: TTreeNode); var Node: IXMLNode; Item2: TTreeNode; begin Node := Nodes.First; while Assigned(Node) do begin Item2 := TreeView1.Items.AddChildObject(Item, Node.NodeName, nil); if Node.HasAttribute('id') then begin Item2.Text := Item2.Text + ' - id: ' + Node.Attributes['id']; end; if Node.HasChildNodes then Fill(Node.ChildNodes, Item2); Node := Node.NextSibling; end; end; begin SvgFilePath := '..._PfadZuEinenTestSVG_...\Skia4Delphi\Samples\Demo\Assets\gorilla.svg'; SvgAsText := TFile.ReadAllText(SvgFilePath); Memo1.Lines.Text := SvgAsText; XMLDoc := NewXMLDocument; XMLDoc.LoadFromXML(SvgAsText); TreeView1.Items.BeginUpdate; try TreeView1.Items.Clear; TreeNode := TreeView1.Items.AddChild(nil, 'Root'); Fill(XMLDoc.DocumentElement.ChildNodes, TreeNode) finally TreeView1.FullExpand; TreeView1.Items.EndUpdate; end; SkSvg1.Svg.Source := SvgAsText; end; end. |
AW: SVG-Elemente mit SKIA parsen und bearbeiten?
Was ist denn hier raus geworden?
|
AW: SVG-Elemente mit SKIA parsen und bearbeiten?
|
AW: SVG-Elemente mit SKIA parsen und bearbeiten?
Zitat:
Die Delphi-Übersetzung für Direct2D geht nur bis Version 1.0 und für das notwendige ID2D1DeviceContext5::CreateSvgDocument ( ![]() |
AW: SVG-Elemente mit SKIA parsen und bearbeiten?
Wenn Delphi das mal eben aktualisieren würde, dann könnte man auch mal andere Dinge nutzen, wie z.B. die Desktop Duplication API. :stupid:
Sollten wir schnell mal 'nen FeatureRequest stellen? Mit der 1.3 sind die bestimmt fertig, wenn wir die 1.5 benötigen. |
AW: SVG-Elemente mit SKIA parsen und bearbeiten?
Sinnlos!
Für dringenden Need gibt's zwei, drei Projekte auf Sourceforge/GitHub, die man problemlos verwenden kann. |
AW: SVG-Elemente mit SKIA parsen und bearbeiten?
Zitat:
Wenn die das beste Entwicklungstool für WIndows sein wollen, dann müssen die da auch up to date bleiben! Grüße TurboMagic |
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:13 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