![]() |
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 |
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:41 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 by Thomas Breitkreuz