![]() |
Re: Vektor Format anzeigen/drucken
Zitat:
ich habe nun folgendes getan. Ich lade mir die SVGImagePackageD und lösche dort direkt im Code vclactnband aus den reqiures. Dann will ich compilieren. Das scheitert dann aufgrund eines Fehlers. Der Compiler meckert, dass er GetFileVersion aus der Unit SVGImageList nicht kennt. Ich nehme mal an, dass das mit der neueren SysUtils zusammen hängt!? Also ändere ich folgenden Code ab, da ich die IconListe nicht brauche sondern eigentlich nur das SVGImage brauche. Aus
Code:
Wir dann
if GetFileVersion(comctl32) >= ComCtlVersionIE6 then
Result := SVGToIcon32(SVG) else Result := SVGToIcon24(SVG);
Code:
Nun schreibt mir der Compiler, dass er die Themes.dcu nicht finden kann. Diese gehört wohl auch nicht standardmäßig zu D6. Also wie gehts nun weiter?
//if GetFileVersion(comctl32) >= ComCtlVersionIE6 then
// Result := SVGToIcon32(SVG) //else Result := SVGToIcon24(SVG); Nachtrag Es läuft nun!!! Danke!!! |
Re: Vektor Format anzeigen/drucken
Ich habe noch was gefunden: Gradients werden leider noch nicht unterstützt...
getestet mit dieser Datei: ![]() |
Re: Vektor Format anzeigen/drucken
habe noch ein gröberes problem ....
und zwar mit folgendem svg
Code:
die zweite linie wird nicht mehr richtig gedruckt (bzw alle linien, die nach dem path kommen, werden falsch gezeichnet)
<?xml version="1.0" encoding="UTF-16"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> <svg xmlns="http://www.w3.org/2000/svg" xml:space="preserve" width="210mm" height="297mm" shape-rendering="geometricPrecision" text-rendering="geometricPrecision" image-rendering="optimizeQuality" fill-rule="evenodd" clip-rule="evenodd" viewBox="0 0 210 297"> <g id="Ebene_x0020_1"> <metadata id="CorelCorpID_0Corel-Layer"/> <line fill="none" stroke="#AAA9A9" stroke-width="0.7056" x1="4" y1="29.04" x2="204" y2= "29.04" /> <path fill="#131516" d="M65.4536 22.9805l0 3.6945 0.4196 0 0 -0.3359c0.1802,0.2647 0.4285,0.3971 0.7449,0.3971 0.3181,0 0.5908,-0.1249 0.8178,-0.3756 0.2273,-0.2502 0.341,-0.6049 0.341,-1.0633 0,-0.1934 -0.0269,-0.3748 -0.0809,-0.5441 -0.0537,-0.1701 -0.1284,-0.3148 -0.2235,-0.4347 -0.095,-0.1199 -0.2164,-0.2133 -0.3635,-0.2798 -0.1471,-0.0662 -0.3032,-0.0996 -0.4682,-0.0996 -0.2978,0 -0.5426,0.1206 -0.7345,0.3616l0 -1.3194 -0.4527 -0.0003 0 -0.0005zm0.631 1.59c0.1447,-0.172 0.3164,-0.2581 0.5153,-0.2581 0.197,0 0.3651,0.083 0.5037,0.2495 0.1386,0.1663 0.2083,0.4238 0.2083,0.7731 0,0.3405 -0.0724,0.5971 -0.2171,0.7691 -0.1448,0.1719 -0.3165,0.258 -0.5149,0.258 -0.2441,0 -0.438,-0.1168 -0.5808,-0.35 -0.0875,-0.1424 -0.1312,-0.3741 -0.1312,-0.6948 -0.0006,-0.326 0.0718,-0.5747 0.2167,-0.7468z"/> <line fill="none" stroke="#AAA9A9" stroke-width="0.7056" x1="4" y1="277" x2="204" y2= "277" /> </g> </svg> aber nur, wenn ich das ganze in ein MetaFile zeichne, dem ich als Referenz einen HDC zu einem Drucker gebe ...
Delphi-Quellcode:
FReferenceDC := CreateDC(ADriver, ADevice, nil, nil)
FCanvas := TMetafileCanvas.Create(FMetafile, FReferenceDC); SetMapMode(DC, MM_ANISOTROPIC); SetWindowExtEx(DC, Fpage_xres, Fpage_yres, nil); SetViewPortExtEx(DC, currX, currY, nil); SetViewPortOrgEx(DC, 0, 0, nil); SetWindowOrgEx(DC, 0, 0, nil); hast du eine idee, woran das liegen kann? edit: also, es liegt irgendwie am pfad folgender pfad funktioniert
Code:
nach folgendem path sind alle linien falsch (sowohl direkt gezeichnete als auch die, die in Path umgewandelt wurden ...)
<path fill="none" d="M80.2099 6.9461c-0.209,0 -0.3845,0.0697 -0.5269,0.2086 -0.1424,0.139 -0.2211,0.3249 -0.2363,0.5576l1.4992 0.0002c-0.0203,-0.2246 -0.0775,-0.3928 -0.172,-0.5049 -0.1453,-0.1743 -0.3332,-0.2615 -0.564,-0.2615z"/>
Code:
<path fill="#009FC6" d="M6.491 26.575c0.5687,0 1.0486,-0.4375 1.0486,-1.0127l0 -19.2078c0,-0.5546 -0.499,-0.9334 -1.0463,-0.9345 -0.5484,-0.0012 -1.0509,0.3479 -1.0509,0.9348l0 19.2451c0.0002,0.5699 0.4706,0.9751 1.0486,0.9751z"/>
|
Re: Vektor Format anzeigen/drucken
hmmm, ich sehe gerade, das sobald ich einen path verwenden (Egal welchen - aber sobald der gezeichnet wird (der erste pfad oben hat fill="none" und wird deshalb nicht gezeichnet), dann passt das zeichnen von linien gar nicht mehr
ich zeichne zuerst das svg in ein TGPGraphic, dann mache ich ein ResetTransform, ResetClip und ein erneutes ScaleTransform, aber die Linie (Die ich manuell zeichne ist nicht mehr dort, wo sie hingehört) das zeichnen des pfades hat irgendetwas verstellt, das ich mit diesen befehlen oben nicht mehr korrigieren kann ... [edit]also, sobald ich wieder einen text ausgebe (aber nur mit DrawString, dann funktioniert das ganze wieder) also irgendwie kommt mir das ganze sehr komisch vor |
Re: Vektor Format anzeigen/drucken
Ich habe mal noch eine kleine Frage. Das Drehen des SVG´s kann ich ja über
Delphi-Quellcode:
erledigen. Hat es einen Grund, warum der Angle nicht einfach von 1-360° geht? Und von wo nach wo geht denn der Angel im Falle des SVG´s? Ich nehme mal an von 0 - ?
SVGImage1.SVG.Angle:=1
|
Re: Vektor Format anzeigen/drucken
Zitat:
|
Re: Vektor Format anzeigen/drucken
Hallo,
Zitat:
Zitat:
Zitat:
Zitat:
Gruß xaromz |
Re: Vektor Format anzeigen/drucken
Liste der Anhänge anzeigen (Anzahl: 3)
das svg file
XML-Code:
habe dir die 3 pdfs mit angehängt, zweimal wegen dem kerning und einmal wegen dem path problem
<?xml version="1.0" encoding="UTF-16"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> <svg xmlns="http://www.w3.org/2000/svg" xml:space="preserve" width="210mm" height="297mm" shape-rendering="geometricPrecision" text-rendering="geometricPrecision" image-rendering="optimizeQuality" fill-rule="evenodd" clip-rule="evenodd" viewBox="0 0 210 297"> <g id="Ebene_x0020_1"> <metadata id="CorelCorpID_0Corel-Layer"/> <line fill="none" stroke="#AAA9A9" stroke-width="0.7056" x1="4" y1="29.04" x2="204" y2= "29.04" /> <path fill="#131516" d="M65.4536 22.9805l0 3.6945 0.4196 0 0 -0.3359c0.1802,0.2647 0.4285,0.3971 0.7449,0.3971 0.3181,0 0.5908,-0.1249 0.8178,-0.3756 0.2273,-0.2502 0.341,-0.6049 0.341,-1.0633 0,-0.1934 -0.0269,-0.3748 -0.0809,-0.5441 -0.0537,-0.1701 -0.1284,-0.3148 -0.2235,-0.4347 -0.095,-0.1199 -0.2164,-0.2133 -0.3635,-0.2798 -0.1471,-0.0662 -0.3032,-0.0996 -0.4682,-0.0996 -0.2978,0 -0.5426,0.1206 -0.7345,0.3616l0 -1.3194 -0.4527 -0.0003 0 -0.0005zm0.631 1.59c0.1447,-0.172 0.3164,-0.2581 0.5153,-0.2581 0.197,0 0.3651,0.083 0.5037,0.2495 0.1386,0.1663 0.2083,0.4238 0.2083,0.7731 0,0.3405 -0.0724,0.5971 -0.2171,0.7691 -0.1448,0.1719 -0.3165,0.258 -0.5149,0.258 -0.2441,0 -0.438,-0.1168 -0.5808,-0.35 -0.0875,-0.1424 -0.1312,-0.3741 -0.1312,-0.6948 -0.0006,-0.326 0.0718,-0.5747 0.2167,-0.7468z"/> <line fill="none" stroke="#AAA9A9" stroke-width="0.7056" x1="4" y1="277" x2="204" y2= "277" /> <text x="26.82" y="288.035" fill="#131516" font-weight="normal" font-size="2.8222" font-family="Arial">Bei Zahlungsverzug werden 1% Verzugszinsen pro Monat berechnet.</text> </g> </svg> mit folgendem code kann ich den Canvas (oder wie auch immer man das bei GDI+ nennt) wieder reparieren, danch funktionieren die normalen Linien wieder (ohne dem sehen normale einfache Linien sie wo oben im SVG definiert falsch aus) und es ist auch egal, ob die Linie im SVG gezeichnet wird, oder ob ich die danach manuell auf das GPGraphic zeichne, er hat immer ein problem damit
Delphi-Quellcode:
Font := TGPFont.Create('Arial', 8);
Font.GetLogFontW(Graphics, LF); Font.Free; |
Re: Vektor Format anzeigen/drucken
Hallo,
ich glaube, es liegt an diesem Teil:
Delphi-Quellcode:
Damit manipulierst Du das Koordinatensystem im GDI. GDI+ verwendet aber ein eigenes Koordinatensystem, das mit dem GDI nur bedingt zu tun hat. Ich vermute, diese beiden kollidieren irgendwie. Das dürfte auch der Grund für den Kerning-Fehler sein. PrepareKerning geht nämlich davon aus, dass der DC, von dem die Auflösung geholt wird, aud MM_TEXT steht. Da müsste man also je nach MapMode unterschiedliche Faktoren nehmen.
SetMapMode(DC, MM_ANISOTROPIC);
SetWindowExtEx(DC, Fpage_xres, Fpage_yres, nil); SetViewPortExtEx(DC, currX, currY, nil); SetViewPortOrgEx(DC, 0, 0, nil); SetWindowOrgEx(DC, 0, 0, nil); Gruß xaromz PS: Es gibt eine neuer Version, die das Problem mit dem Gradient löst, und ein neues Demoprogramm, bei dem der Zoom endlich besser arbeitet. |
Re: Vektor Format anzeigen/drucken
ja, es liegt an dem teil, meine frage ist, aber warum?
ich kann linien zeichnen, texte ausgeben, alles ohne probleme funktioniert mit dem koordinatensystem perfekt, aber sobald ein path dabei ist, sind alle linien dahinter kaput, texte funktionieren wieder wenn ich dann systematisch vor jeder ausgabe im GDI+ den teil mit dem logischen Font reinschreibe, dann passen fast alle pfade (ein einziger wird nicht an der richtigen stelle gezeichnet) - aber das sagt eigetnlich ja aus, das es kein problem mit dem koordinatensystem ist, sondern ein nebeneffekt - würde ich sagen ... und das problem mit dem kerning (also dem , true und ,false) hat nix damit zu tun, dann auch auf dem bildschirm, ohne den ganzen mapmode und co gibt es das selbe problem, nur nicht ganz so gravierend, da passt es nur um den faktor 1.8 nicht |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:27 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