![]() |
Diverse Komponenten: SVGImage, Adv. Memo, PaletteForm
Hallo,
ich hab endlich unsere Homepage überarbeitet. Da gibt es jetzt auch den Menüpunkt "Entwicklung". Obwohl noch nicht allzuviel drauf ist, habe ich immerhin schon drei Komponenten zum Download:
Die Komponenten mit Erklärung und Screenshots gibts ![]() Möglicherweise hat ja der eine oder andere Interesse an dem Zeug. Gruß xaromz //Edit: Auf Hinweis von Robert die Archive "entmüllt" Update: Neue Version von MWKEdit. Jetzt mit eingebautem RTF-Support und überarbeitetem Beispielprogramm. Update: Link angepasst. |
Re: Diverse Komponenten: SVGImage, Adv. Memo, PaletteForm
Nett, aber editier doch mal das .dpk File und stelle die Dateipfade auf relative Pfadnamen um.
Bitte *nie* das .dsk file mitliefern. Das enthaelt das Layout der Fenster in der IDE und das kann einem gewaltig auf den Sack gehen wenn es von jemanden mit mehreren grossen Bildschirmen sein sollte. |
Re: Diverse Komponenten: SVGImage, Adv. Memo, PaletteForm
Beim SVG-Viewer (Hab nur mal schnell die Exe ausprobiert) die Fehlermeldung mit Angeben falls die SVG-Datei vom XML-Parser nicht gelesen werden konnte. Habe hier genügend SVG-Dateien wo gar nichts passiert und würde gerne wissen wieso (Ungefährer Grund würde reichen).
|
Re: Diverse Komponenten: SVGImage, Adv. Memo, PaletteForm
Hallo,
Zitat:
Eine Möglichkeit hab ich schon: Wenn im SVG keine Höhe und Breite angegeben ist rechnet meine Komponente diese Werte nicht aus. Möglicherweise fehlen also diese Werte. Leider hab ich keine Ahnung, wie ich die Größe berechnen könnte (ist mit dem ganzen Transformationszeug nicht so einfach). Gruß xaromz |
SVGImage
Liste der Anhänge anzeigen (Anzahl: 1)
Hab ein Beispieldokument angehängt.
Es wäre auch ganz gut wenn Default-Namespaces ergänzt würden, falls sie im XML fehlen (falls es einfach gehen würde). |
Re: Diverse Komponenten: SVGImage, Adv. Memo, PaletteForm
Hallo,
ich hab mir das mal angesehen. Beim ersten SVG fehlt die Definition des Namespace "xlink". Deshalb meckert der Parser (aber mein Demo schluckt die Exception einfach, daher keine Meldung). Beim zweiten SVG fehlt die Definition des Namespace "graphs". Ansonsten gilt das Obige. Ich muss mich aber etwas wundern, da die beiden SVGs offensichtlich vom Illustrator stammen, aber wohl nicht validiert werden können. Gruß xaromz //Edit: Zu "Test-AI10.svg": Mein Illustrator CS2 sagt dazu: "Diese SVG-Datei ist ungültig". Soviel dazu. |
Re: Diverse Komponenten: SVGImage, Adv. Memo, PaletteForm
Zitat:
Zitat:
Und wir zahlen auch für den Adobe-Support. |
Re: Diverse Komponenten: SVGImage, Adv. Memo, PaletteForm
Hallo,
na ja, ist schade, dass der Erfinder des Formats so viel Mist baut. Glücklicherweise ist der SVG-Export im Illustrator CS2 wirklich gut (kein Müll in der Datei, kleiner Output undvor allem: richtig) :thumb: . Gruß xaromz //Edit: rechtschrebung, rechtschreibung, rechtschreibung |
Re: Diverse Komponenten: SVGImage, Adv. Memo, PaletteForm
Hallo,
ich hab die Komponente "MWKEdit" überarbeitet, die neue Version findet ihr über den Link im ersten Beitrag. Gruß xaromz |
Re: Diverse Komponenten: SVGImage, Adv. Memo, PaletteForm
Wenn ich die PaletteForm auf die Form setze, kommt der Fehler 'Element " hat kein übergeordnetes Fenster'.
|
Re: Diverse Komponenten: SVGImage, Adv. Memo, PaletteForm
Hi,
echt nette Komponenten! Steckt sicherlich ne Menge Arbeit hinter. Aber du solltest beim Editor noch einen Link/Hinweis auf TNT-Unicode Komponenten setzen, wäre nett. Gruß Der Unwissende |
Re: Diverse Komponenten: SVGImage, Adv. Memo, PaletteForm
Hallo,
Zitat:
Zitat:
Gruß xaromz |
Re: Diverse Komponenten: SVGImage, Adv. Memo, PaletteForm
Hallo xaromz,
auf der Suche nach einer Möglichkeit in Delphi SVG-Grafiken erstellen zu können habe ich deine SVGImage Komponent gefunden. Leider ist der Quelltext zum SVG-Viewer-Demo nicht mit dabei. Bin jetzt erst mal etwas ratlos wie ich die dort gezeigte Zoom-Funktion hinbekommen kann. Die Komponente selbst hat keine Eigenschaft 'Zoom'. Ich vermute, dass ich die SVG-Daten ändern und der Komponente jedes Mal neu unterschieben muss. Nichts was ich bisher probiert habe hat funktioniert. Könntest du mir bitte einen Tipp geben? An besten ich beschreibe mal kurz was ich machen will, vielleicht ist meinen Anwendungsfall mit deine Komponente nicht so ohne weiteres realisierbar. Mein Programm dient der Reparatur von beschädigten Dateidaten. Der Inhalt der zu reparierenden Datendatei besteht aus mehreren Chunks die auch ineinander verschachtelt sein können. Das Programm soll die Datei analysieren und die Datenstruktur grafisch darstellen. Ich dachte dabei an ein Band aus Rechtecken. Jedes Rechteck stellt ein Chunk dar. Die äußeren Chunk umschließt die jeweiligen inneren Chunks. Zum Beginn sieht der Anwender ein Übersichtsbild der gesamte Datei. Dabei werden die gefundenen Problemstellen farbig markiert. Um eine Problemstelle genauer Untersuchen zu können, muss sich der Anwender in das Bild hineinzoomen können. Er sollte die Möglichkeit haben einen Selektionsrahmen aufziehen zu können. In eingezoomten Zustand muss selbstverständlich auch ein Scrollen funktionieren. Solange der Anwende die Daten nicht editiert ist das SVG-Bild statisch. Durch Zoomen und Scrollen wird nur die "Viewbox" verändert. Folgender Versuch hat leider nicht funktioniert:
Delphi-Quellcode:
Was SVG betrifft bin ich ein totaler Anfänger.
const
TestSVG : WideString = ( '<?xml version="1.0" encoding="utf-8"?>'#13#10+ '<svg width="401.945" height="285.839" viewBox="0 0 %f %f" overflow="visible" '+ 'enable-background="new 0 0 401.945 285.839">'#13#10+ ' <g id="Ebene_1">'#13#10+ ' <rect x="18.972" y="56.919" transform="matrix(0.9416 0.3368 -0.3368 0.9416 59.8869 -59.3444)" fill="#FFFFFF" stroke="#000000" width="364" height="172"/>'#13#10+ ' </g>'#13#10+ '</svg>'#13#10 ); procedure TForm1.ScrollBar1Change(Sender: TObject); var scale: double; begin scale := ScrollBar1.Position*0.2; SVGImage1.SVG.LoadFromText(Format(TestSvg,[401.945*Scale, 285.839*scale])); SVGImage1.Update; end; Gruß Bernd |
Re: Diverse Komponenten: SVGImage, Adv. Memo, PaletteForm
Hallo,
Erstmal Herzlich Willommmen in der DP! Zitat:
Ich habe gerade die SVGImage-Komponente überarbeitet, jetzt besitzt sie eine Eigenschaft "Scale". Damit solltest Du Dein Problem lösen können. Download auf meiner Webseite. Zitat:
Zitat:
Zitat:
Gruß xaromz |
Re: Diverse Komponenten: SVGImage, Adv. Memo, PaletteForm
Hallo,
Vielen Dank für den Willkommensgruß und die schnelle Hilfe. Leider kann ich die neuen Quelltexte nicht kompilieren. Sind die Units WideStringList und StringLibrary von dir oder kann ich die mir irgendwo herunterladen? Ich habe mir MSXML 4.0 SP 2 vom der Microsoft Seite besorgt. Bei den Versuch die Typbibliothek zu installieren kommt die Fehlermeldung: “A class named TDOMDocument is already installed”. Ich kann die Komponente nicht finden und bin mir auch sicher, dass ich noch nie was mit XML gemacht habe. Ich habe hier eine englische Delphi 7 (Build 8.1) Enterprise so ziemlich im Originalzustand. Die Unit MSXML2_TLB.pas konnte ich ohne Überschreibenwarnung erzeugen. Befürchte jetzt aber ein Versionschaos bezüglich den MSXML-Komponenten. Da auch XML für mich Neuland ist, würde mich interessieren ob es einen Grund gegen Open XML gibt oder was der Grund war, dass du dich für MS-XML entschieden hast. Aber das nur am Rande – wichtiger ist mir eigentlich so schnell wie möglich deine Komponente ausprobieren zu können. Gruß Bernd |
Re: Diverse Komponenten: SVGImage, Adv. Memo, PaletteForm
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo,
Zitat:
//Edit: Habe das Archiv auf der Webseite aktualisiert. Zitat:
Zitat:
Gruß xaromz |
Re: Diverse Komponenten: SVGImage, Adv. Memo, PaletteForm
Hurra, es funktioniert!!!
Nun habe ich ein bisschen rumgespielt um herauszubekommen wie ich an besten Zoom und Bildlauf hinbekommen könnte. Einige Dinge funktionieren nicht wie ich es erwartet/gewünscht hätte, vielleicht liegt es ja daran, dass du noch an der Komponente arbeitest und noch nicht alles funktioniert wie geplant. Erschweren kommt hinzu, das ich nicht wissen kann für welchen Zweck du die Komponente entwickelst, bzw. wie dein Konzept aussieht. Hier meine Wunschvorstellung/Vorschläge: 1.) Besser als den nun eingebaute Scale Eigenschaft würde es mir gefallen, wenn ich ein Eigenschaft ViewRect(Top, Left, Width, Height) hätte, mit dem ich angeben könnte welchen Teil des SVG-Canvas in TSVGImage dargestellt werden soll. Stretch, Center und Proportional müssten dazu abgeschalten sein. Der Anwender von ViewRect ist selbst für die Realisierung dieser Funktionen verantwortlich, indem er das Rechteck entsprechent wählt. Für Top und Left müssen auch negative Werte möglich sein um zentrieren zu können. Width und Height sind immer positiv. Damit das ganze Funktioniert müssen beim Laden einer SVG-Grafik die Eigenschaften Width und Height von TSVGImage.SVG auf die Boundingbox der Grafik gesetzt werden: if exist SVG Attribut Width then Boundingbox.Width := Max(Boundingbox.Width, SVG Attribut Width); TSVGImage.SVG.Width := Min(TSVGImage.SVG.Width, Boundingbox.Width); if exist SVG Attribut Heigth then Boundingbox.Height := Max(Boundingbox.Height, SVG Attribut Heigth); TSVGImage.SVG.Height := Min(TSVGImage.SVG.Height, Boundingbox.Height); Ich stelle mir die Verwendung für eine zu programmierende TSVGScrollbox-Komponente dann so vor: - Durch setzen von TSVGImage.SVG.Width / Height wird die Größe des leeren Dokumentes gesetzt. Die Scrollbalken können bei Bedarf angezeigt werden. - Beim Laden einer SVG-Grafik wird Viewbox ignoriert und die Width/Height Attribute wirken wie oben beschrieben. 2.) Zuladen weiterer SVG-Grafik zulassen. 3.) Eigenschaft BackgrundColor: Ein-/Ausschaltbar. Ausgeschaltet entspricht den jetzigen verhalten. Eingeschaltet wird das Canvas zuerst in der Hintergrundfarbe gefüllt. Default Farbe ist Weiß. 4.) Darstellung auf dem Formular zur Entwicklerzeit: Quelle: ![]()
Delphi-Quellcode:
5. Open XML wird ziemlich gelobt, es scheint nur wie so offt bei der Dokumentation zu hapern.
procedure TSVGImage.Paint;
// ... begin inherited;//Zeichen Procedure des Vorfahren aufrufen. if csDesigning in ComponentState then //Wenn sich die Komponente in Entwicklung befindet. begin {Zeichung eines gestrichelten Rahmens} Canvas.Brush.style := bsClear;//Durchsichtiges Rechteck Canvas.Pen.style := psDashDot;//Gestrichelte Linen Canvas.Rectangle(0,0,width,height);//Rechteck zeichnen {Namen der Komponente in die Mitte schreiben} canvas.TextOut((width - Canvas.TextWidth(Name)) div 2,(height - Canvas.TextHeight(Name)) div 2,name); {Keine weitern Zeichnungen mehr ausführen} exit;//Verlässt die Procedure end; //Normale Zeichen-Anweisungen //... end; Habe zum Thema ![]() gefunden. Open XML hätte den Vorteil auf Linux portierbar zu sein und man bräuchte keine Drittanbieter Komponenten mit ausliefern. Beides ist für mich nicht so wichtig. Gruß Bernd |
Re: Diverse Komponenten: SVGImage, Adv. Memo, PaletteForm
Hallo,
Zitat:
Zitat:
Delphi-Quellcode:
procedure PaintSVGTo(SVG: TSVG; Canvas: TCanvas; Left, Top: Integer; Scale: Double);
var W, H: Integer; begin W := Round(SVG.Width * Scale); H := Round(SVG.Height * Scale); SVG.PaintTo(Canvas.Handle, MakeRect(Left, Top, W, H)); end; Zitat:
Zitat:
Zitat:
Ist erledigt. Zitat:
Gruß xaromz |
Re: Diverse Komponenten: SVGImage, Adv. Memo, PaletteForm
Hallo,
Zitat:
Gruß Bernd |
Re: Diverse Komponenten: SVGImage, Adv. Memo, PaletteForm
Auch wenn es etwas her ist, aber unter welcher Lizenz steht der Quelltext?
MfG xZise |
Re: Diverse Komponenten: SVGImage, Adv. Memo, PaletteForm
Hallo,
Zitat:
Gruß xaromz |
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:09 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