2012-01-10 10 views
8

Hay cerca de cuatro implementaciones que puedo pensar que son capaces de cargar gráficos SVG en una aplicación Delphi.¿Qué camino tomar para cargar un gráfico SVG en una aplicación FireMonkey?

Uno de esos, por Mattias Andersson, que es el autor de FMX.Canvas.VPR , trabaja con FireMonkey, pero aún no está preparado para lanzar el código.

Un segundo, por Martin Walter, funciona con el VCL, pero el desarrollador ha abandonado Delphi y no tiene planes de convertirlo a FireMonkey.

Un tercero, parte del marco AGGPAS, funciona con el VCL, pero no FireMonkey.

Un cuarto está en desarrollo por Jason Southwell, pero aún no se ha fijado una fecha.

Así que mi pregunta: ¿qué camino tomar si quiero un componente SVG hoy, sin intentar reinventar la rueda una quinta (y probablemente más) vez?

+1

Por favor, proporcione los enlaces URL de los recursos que de referencia. – menjaraz

+0

Hecho, pero alguien editó la pregunta para que uno se llevara a creer que FMX.Canvas.VPR era la implementación de SVG, que no es así. Corregido – Domus

+0

Quizás esto también proporcione información útil: http://stackoverflow.com/questions/63607/rendering-svg-with-delphi –

Respuesta

3

El componente SVG en el que he estado trabajando ha sido lanzado como parte de nuestro Apesuite para Firemonkey.

http://arcana.sivv.com/apesuite

+1

¡Compré el beta y lo pasé genial! Hermosa pieza de codificación! – Domus

+0

Gracias. Me divertí construyéndolo. –

+0

Su sitio dice que ya no está disponible para la compra. ¿Algún plan para cambiar eso? –

1

También podría considerar el uso de Chromiumembedded. Simplemente carga el svg en el navegador integrado. A continuación, puede mezclar el código Delphi con javascript, mezclar en html y css, etc.

De esta manera, puede dejarle a Chrome cómo dibujar cosas rápidamente (por ejemplo, si usar la aceleración de gpu o no).

Obtendrá la compatibilidad adecuada con svg, es fácil de integrar en su aplicación, es flexible y hay mucha documentación y código de ejemplo disponible en línea.

+0

Gracias por su respuesta. Había considerado Chromiumembedded como un componente de visor de HTML, pero creo que es demasiado exagerado cargar un simple sprite SVG.El pequeño gráfico SVG debe cargarse rápidamente y traducirse a objetos FireMonkey, para que luego puedan manipularse libremente, como transparencia, rotación, escalado, color, etc. Y esto para sus componentes individuales. ¿No sabes si Chromiumembedded ofrece esto de manera elegante? – Domus

+0

Si carga un svg, puede tomarlo fácilmente como un mapa de bits; también fuera de la pantalla. Pero sí, si solo tienes un par de sprites simples, entonces ChromiumEmbedded probablemente sea demasiado –

3

involucrarse con Mattias Andersson en el desarrollo es la mejor opción:

  • FMX.Canvas.VPR por Mattias Andersson parece prometedor y VPR ha demostrado ser un excelente proyecto
  • Sin SVG FireMonkey componente de comer en la boca de trabajo OUT- of-the-box está disponible a partir del momento de la publicación (extensa búsqueda web hecha en general).
+0

Estoy totalmente de acuerdo con la excelencia de las creaciones de Mattias Andersson. El problema es que necesito un componente hoy. Tal vez debería pedirle que entre en algún tipo de versión beta. – Domus

+0

También lo he buscado en algunos pero notables foros delphi francés y alemán, pero fueron en vano. Sospeché que la contraparte china podría haber cocinado algo interesante: son muy prolíficos y parecen mantenerse al día con el nuevo Firemonkey. Tal vez pueda llamar para obtener ayuda especial del miembro SO de habla china. – menjaraz

+0

¡Sabía que un día me arrepentiría de no haber aprendido mandarín! – Domus

5

Soy Mattias Andersson - el autor de FMX.Canvas.VPR; Puedo decir que todavía estoy trabajando activamente en la solución SVG. Supongo que una vez que he agregado correctamente el soporte para degradados y la representación de texto, entonces puedo lanzar una primera versión beta. Confío en TXMLDocument y eso es un poco restrictivo en lo que se te permite hacer (IMO), así que tuve que inventar algunas soluciones (tal vez una mejor opción hubiera sido implementar mi propia clase XML desde cero). Además, tuve que hacer algunos parches en tiempo de ejecución de las clases de FireMonkey para que todo funcione correctamente. Lo bueno es que realmente estoy implementando cosas de acuerdo con las especificaciones de la interfaz SVG.

+0

Muchas gracias por su mano a mano, Mattias. ¿El gráfico SVG cargado se acumulará en los descendientes del objeto FireMonkey para que cada uno pueda manipularse por separado? – Domus

+1

Bueno, hay una clase TSVGImage que desciende de la clase FMX TControl. La clase TSVGImage tiene un documento propiedad de la clase TSVGDocument (un descendiente TXMLDocument). Cada nodo en la clase TSVGDocument es un descendiente TXMLNode que implementa las interfaces SVG apropiadas para ese tipo de nodo particular. Como ejemplo, un nodo TSVGPathElement implementa ISVGAnimatedPathData, ISVGPathElement, ISVGLocatable, ISVGTests, ISVGExternalResourcesRequired, IEventTarget, ISVGLangSpace, ISVGStylable, ISVGElement (si el nodo representa una primitiva visual, entonces también tendría un método Paint). –

+1

Por supuesto, una opción sería asociar cada nodo con una clase TControl separada, tiene algunas ventajas, por ejemplo, puede cambiar fácilmente las propiedades en el inspector de objetos. Los inconvenientes serían una sobrecarga adicional de memoria y estaría más estrechamente relacionado con FMX (estoy planeando reutilizar la implementación de SVG para un proyecto mío diferente que no depende de FMX). –

Cuestiones relacionadas