![]() |
Delphi-Version: 12 Athens
Delphi SVG Lade-Problem
Liste der Anhänge anzeigen (Anzahl: 3)
Hi all,
ich hab mal wieder ein Problem mit dem rapid application development. Was ja nicht rapid ist wenn es nicht so tut wie man erwartet. Ich habe da ein SVG welches unter Inkscape wie im Anhang, Loop1.svg, ausschaut. Wenn ich das mit dem SVG Text Editor betrachte zeigt sich die Ansicht wie Loop2.svg (also ein Bereich ist grau) Und wenn ich das Bild mit der TAdvSVGImageCollection verwenden will und dann lade zeigt mir dann der Ladedialog das Bild mit Loop3.svg. Dabei sind dann die Elemente, hier Pfeile, verschoben bzw. verdreht. Wie bekomme ich nun ein richtiges Bild nach Delphi? - Uli - |
AW: Delphi SVG Lade-Problem
'Meine' Designerin musste ein paar Einstellungen beim Export von SVGs aus Photoshop ausprobieren, bis die Anzeige der ca. 50 Icons in Delphi korrekt funktioniert hat. Ich verwende allerdings TSGVIconImageCollection von Ethea.
Problemmatisch waren wohl, wenn ich mich recht erinnere, vor allem gruppierte Objekte (was ich bei den Pfeilen vermute). |
AW: Delphi SVG Lade-Problem
Das liegt aber nicht am Delphi (RAD/Embarcadero/...), sondern an dieser Fremdkomponent von TMS, wenn die dein SVG nicht richtig versteht/darstellen kann. :!:
In diesem Fall gibt es (vermutlich) Probleme mit der Rotations-Eigenschaft und der Positionierung an den Pfeilen. Wenn ich mich recht erinnere, dann sollte SKIA (neu im Delphi 12) auch SVG recht gut behandeln können. ![]() |
AW: Delphi SVG Lade-Problem
Die Objekte sind nicht gruppiert, auch ein explizites Auswählen aller Objekte und Aufheben der Gruppierung hilft nicht.
Ich schau mir mal SKIA an. Habe ich bisher nicht im Einsatz. Das ändert dann vermutlich wieder einiges :( |
AW: Delphi SVG Lade-Problem
Zitat:
TMS weiß nicht wie man rapid application development macht. Mit Skia gehen SVG eingentlich ziemlich gut, aber ich nutze SKIA mit FMX und dann muss man immer seine SKIA.DLL mit liefern.... wenn du nur einfarbige SVGs als icon brauchst kannst du theoretisch auch einfach den SVG Path in den TPath von FMX übergeben...damit das für kreise gut läuft habe ich zum teil die "Q" function substituieren müssen |
AW: Delphi SVG Lade-Problem
Es gibt auch SVG von EtheaDev
![]() Aber ich vermute mal, dass Du TMS nicht nur wegen SVG nutzt. Zitat:
TPathData kann zwar einen Pfad rendern, aber SVG ist viel komplexer und besteht meist aus mehreren Layern, das kann TPath dann schon nicht mehr. Aber ja, man kann SVGs so anpassen, dass sie in TPath gut gerendert werden können, mache ich auch so. |
AW: Delphi SVG Lade-Problem
Manche SVG-Dateien sind aber auch unnötig komplex. Und sehr wahrscheinlich unterstützt TMS hier irgendein Feature nicht.
Muss es die TAdvSVGImageCollection sein? Wie hier schon erwähnt ist die SVGIconImageList recht gut. Man kann zwischen 3 verschiedenen Bibliotheken zum Darstellen von SVG-Dateien wählen. Image32, Windows Direct2D und SKIA. Ansonsten, wenn Du die SVG-Datei hier hochladen magst, kann ich mal schauen, was TMS hier nicht gefällt. |
AW: Delphi SVG Lade-Problem
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:
![]() und weil TPath Bezier Kurven nicht beherrscht habe ich diesen Konverter gebaut(oder aus zwei orten zusammen geklaut) (anhang)... Der wird so benutzt
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin Path1.Data.Data := SVGPathToPath(Memo1.Text); end; |
AW: Delphi SVG Lade-Problem
Zitat:
Der kommt aber anscheinend nicht so gut klar mit komplexeren SVG, wenn ich mal so ein Beispiel reinwerfe
Delphi-Quellcode:
Hiermit bekomme ich schon mehr Info
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100">
<g stroke="#1c1308" stroke-width="1"> <path d="M32,29l-11-1c-25-1-20,0-18,20c2,8,0,13,10,13z" fill="#53381a"/> <path d="M36,31h-11c-25-1-20,0-18,20c2,8,1,12,12,9z" fill="#8a5b28"/> <path d="M32,25c5-10,3-12,18-10c20,5,20,6,35,6c10,1,20,4,10,16l-11,20h-66z" fill="#454f2e"/> <path d="M13,53v7l45,18v-7zM32,25c5-10,3-12,15-8c20,6,10,6,31,6c10,1,18,4,10,16l-11,20l-56-9z" fill="#76894c"/> <path d="M13,53c-3-10,2-9,10-10c10-1,37,7,20,7c-12,1-12,0-12,10zM31,60c-2-14,13-8,20-10l7,3v18z" fill="#8e996c"/> <path d="M57,62c1,20,0,19,18,19c20,0,17,0,19-17c0-17-1-16-18-18c-20-1-19,0-19,16z" fill="#53381a"/> <path d="M60,64c1,20,0,19,18,19c20,0,17,0,19-17c0-17-1-16-18-18c-20-1-19,0-19,16z" fill="#8a5b28"/> </g> </svg> ![]() ![]() ![]() ![]() Es ist aber immer gut, wenn man zig Online-Tools zum gegeneinander Testen hat. |
AW: Delphi SVG Lade-Problem
Zitat:
|
AW: Delphi SVG Lade-Problem
Zitat:
Ehrlicherweise habe ich aber immer noch viel mehr PNG in den Apps als SVG :oops: Was ich aber z.B. auch vermehrt mache, für bestimmte Primitive, ich habe mit den SVG PathData einfach als globale const String Konstanten in ein Unit gelegt und nutze dieses direkt mit TPathData. So brauche ich noch nicht einmal externe Files, sondern es ist im Binary. Das geht aber nur mit sowas wie Arrows usw., also recht primitive Kandidaten, die langfristig unverändert bleiben. Verschiedene Stiles kann ich dann auch einfach durch einbinden verschiedener solcher Units erreichen. Auf der anderen Seite habe ich dann ein Master-DataSource, in dem ich alle PNG und SVG halte, die ich in allen Projekten standardmäßig brauche. So habe ich mehrere Level um SVG & PNG möglichst zentral zu verwalten und wiederzuverwenden. Das bischen mehr Speicheraufwand ist es allemal Wert nur mit einer zentralen "Image" Quelle zu tun zu haben. |
AW: Delphi SVG Lade-Problem
PNG/SVG/uvm. als Ressource in die EXE :stupid:
Muß ja nicht unbedingt eine TImageList in einer DFM-Ressource sein :duck: ... gibt auch andere Lösungen. Was mist ist, es gab mal (gibt "eigentlich" noch, aber niemand hat es mehr implementiert, außer dem Internet Explorer) ein res:// Protokoll, wo man Ressourcen (Bilder/CSS/HTML/sonstwas) direkt als Link, z.B. Browser/TWebBrowser nutzen konnte, DIREKT aus einer EXE/DLL hinaus. ![]() res://C:%5Cirgendwo%5Cmeine.exe/DATA/DasBild.svg |
AW: Delphi SVG Lade-Problem
Zitat:
so dass es auch Updates und sonstige Unwirren übersteht. Wenn man einmal so ein riesiges Bildergrab versemmelt hat, im RAD Editor, dann weiss man wovon ich rede. Ja, *.rc ist auch eine schöne Sache, mache ich auch teilweise. Bei Cross-Platform kommt man dann am Ende wieder mit dem Deployment-Editor in Berührung, was ein Paradebeispiel eines vergurkten RAD-Editors ist, dem ich nur soweit traue, wie ich ihn werfen kann. :-D Deshalb ist mir eine Code-Lösung immer viel lieber als solche halbherzigen Versuche, die Sache "einfacher" zu machen. Wenn man sich abseits von Delphi RAD mal umschaut, wie viel effektiver man mit anderen Code-Editoren im Quellcode arbeiten kann, ohne ständig Mausclicks zu machen, dann kommt man ins Grübeln. |
AW: Delphi SVG Lade-Problem
Nun, eigentlich will ich bloss Buttons mit Bildern versehen, welche dann das Thema HighDPI überstehen.
Wo ich dann z.B. nicht so winzige Bilder sehen muss wie im Standard-TFileOpenDialog. Und nun habe ich zwar verstanden, dass es mit SVG besser klappen soll. Aber dann braucht es anscheinend doch Fremdkomponenten. Ok, die von mir verwendete TMS-Komponente scheint fehlerhaft zu sein. Vielleicht sagt mir TMS was dazu. Wenn ich Skia downloaden will, wird mir eine Beta-Version angezeigt. Kann das bedenkenlos in einer Produktivumgebung verwendet werden? Oder dann irgendwas wie EtheaDev mit github. Und wenn ich dann von Emba ein neues Delphi-Update bekomme kann ich alles wieder nachinstallieren. Ich möchte mich am liebsten um meinen eigenen Programmcode kümmern. Welche simple Lösung gibt es heute, dass ich dann vernünftige Buttons mit Bildern bekomme die dann auch jedem Rechner/Bildschirm vernünftig skalieren? Gibt es sowas überhaupt von Emba selbst? Sowas wie Button platzieren, Bild dazuladen und fertig? Unabhängig davon scheint es ein generelles Problem zu sein. Ich habe gestern mal Inkscape upgedatet. Da muss ich die Buttons per Lupe anschauen, damit man die Symbole erkennt. |
AW: Delphi SVG Lade-Problem
Hallo,
naja, wenn man nicht diese SVG image list von ETH nehmen will kann man immer noch PNGs mit unterschiedlicher Auflösung in eine TImageCollection packen und zur Laufzeit zieht sich die VCL dann die passendste Auflösung und skaliert von der ausgehen. Das funktioniert eigentlich auch ganz gut, zumal das auch bessere Skalierungsalgorithmen als die normale TImageList benutzt und hat noch den Vorteil, dass man für kleinere Auflösungen im Detail reduzierte PNGs reinstecken kann. Bei SVGs wüsste der Renderer ja denke ich nicht, wass er dann weglassen darf, wenn es in der kleineren Auflösung zu detailliert ist. |
AW: Delphi SVG Lade-Problem
Zitat:
Hoffentlich komme ich da nun mit weiter klar. |
AW: Delphi SVG Lade-Problem
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:
![]() |
AW: Delphi SVG Lade-Problem
Zitat:
|
AW: Delphi SVG Lade-Problem
Diesen Thread hätte es viel früher geben sollen!
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:20 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