Einzelnen Beitrag anzeigen

xaromz

Registriert seit: 18. Mär 2005
1.682 Beiträge
 
Delphi 2006 Enterprise
 
#18

Re: Diverse Komponenten: SVGImage, Adv. Memo, PaletteForm

  Alt 21. Jul 2006, 09:18
Hallo,
Zitat von 0KommaNix:
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.
Meine Idee war lediglich, dass ich SVGs darstellen kann. Dabei wollte ich diese nur auf einen Canvas malen. Dass man nun ein SVG auch in ein TImage laden kann, ist nur eine Erweiterung des ursprünglichen Plans. Das hab' ich eher nebenher gemacht.
Zitat von 0KommaNix:
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.
Wie ich schon in einer vorigen Nachricht geschrieben habe, wäre da ein TCanvas besser, auf dem Du ein TSVG malst. Das sieht dann so bsp. so aus:
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 von 0KommaNix:
2.) Zuladen weiterer SVG-Grafik zulassen.
Auch das funktioniert nur mittels TCanvas und Malen der einzelnen SVGs. Du kannst aber die SVGs in einer TSVGImageList organisieren. Alternativ kannst Du natürlich ein SVG aus zweien zusammenbauen, indem Du beide einliest und dann die Knoten des einen SVGs unterhalb von Root in das andere kopierst.
Zitat von 0KommaNix:
3.) Eigenschaft BackgrundColor: Ein-/Ausschaltbar. Ausgeschaltet entspricht den jetzigen verhalten. Eingeschaltet wird das Canvas zuerst in der Hintergrundfarbe gefüllt. Default Farbe ist Weiß.
Ein SVG ist grundsätzlich immer transparent. Es wird nur gezeichnet, was im SVG definiert ist. Das ist so gewollt. Wenn Du einen Hintergrund haben willst, musst Du diesen (z. B. als weißes Rechteck) im SVG definieren.
Zitat von 0KommaNix:
4.) Darstellung auf dem Formular zur Entwicklerzeit:
Quelle: http://wiki.delphigl.com/index.php/T...tenentwicklung
Stimmt. Das hat mich auch schon immer gestört. Ich war nur zu faul.
Ist erledigt.
Zitat von 0KommaNix:
5. Open XML wird ziemlich gelobt, es scheint nur wie so offt bei der Dokumentation zu hapern.
Habe zum Thema http://homepages.borland.com/ccalver...XMLSimple.html
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.
Diese Komponente baut dermaßen auf Windows-Funktionen auf, dass eine Protierung sowieso nicht in Frage käme. Irgendwann werde ich das vielleicht mal auf .Net portieren, da ist der Aufwand nicht so groß.

Gruß
xaromz
  Mit Zitat antworten Zitat