AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi Vektor Format anzeigen/drucken

Vektor Format anzeigen/drucken

Ein Thema von Gruber_Hans_12345 · begonnen am 5. Nov 2007 · letzter Beitrag vom 24. Nov 2007
Antwort Antwort
Seite 5 von 10   « Erste     345 67     Letzte » 
Gruber_Hans_12345

Registriert seit: 14. Aug 2004
1.426 Beiträge
 
Delphi 2007 Professional
 
#41

Re: Vektor Format anzeigen/drucken

  Alt 16. Nov 2007, 09:17
Zitat von torud:
Ich habe nicht einmal die Komponenten installiert bekommen...
ich schon

ps.: übrigens tolle fehlerbeschreibung ...
Gruss Hans

2B or not 2B, that is FF
  Mit Zitat antworten Zitat
xaromz

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

Re: Vektor Format anzeigen/drucken

  Alt 17. Nov 2007, 13:14
Hallo,

ich habe jetzt eine Routine, die Kerning berücksichtigt. Die Textdarstellung verlangsamt sich dadurch zwar etwas, aber nur um den Faktor 7-10 .
Die neue Version findet sich auf meiner Seite.

Gruß
xaromz
I am a leaf on the wind - watch how I soar
  Mit Zitat antworten Zitat
torud

Registriert seit: 26. Jul 2002
Ort: Sachsen
1.198 Beiträge
 
Delphi XE5 Professional
 
#43

Re: Vektor Format anzeigen/drucken

  Alt 17. Nov 2007, 15:27
Zitat von Gruber_Hans_12345:
ps.: übrigens tolle fehlerbeschreibung ...
Ich muss zu meiner Schande gestehen, dass die Fehlermeldung wirklich nicht besonders aussagekräftig war, aber so wie ich den Ersteller verstanden habe, funktioniert der ganze Spass leider unter Delphi6 nicht - Schade!
Danke
Tom
  Mit Zitat antworten Zitat
Gruber_Hans_12345

Registriert seit: 14. Aug 2004
1.426 Beiträge
 
Delphi 2007 Professional
 
#44

Re: Vektor Format anzeigen/drucken

  Alt 17. Nov 2007, 15:39
Zitat von xaromz:
Hallo,

ich habe jetzt eine Routine, die Kerning berücksichtigt. Die Textdarstellung verlangsamt sich dadurch zwar etwas, aber nur um den Faktor 7-10 .
Die neue Version findet sich auf meiner Seite.

Gruß
xaromz
super!

also die schrift funktioniert jetzt perfekt ...

kannst du mir mit dem drucken noch mal kurz helfen?
Ich versuche die Seite, die genau 210*297 ist, original auf den drucker auszugeben (den Offset habe ich schon ausgerechnet)

aber wie kann ich die seite nun verschieben?


Delphi-Quellcode:
function MarginToMM(const Value, dpi : integer) : Extended;
begin
    Result := ((Value * 254) / dpi) / 100;
end;

        temp.BeginDoc;

        grPrinter := TGPGraphics.Create(temp.Canvas.Handle);
        try
            grPrinter.SetPageUnit(UnitMillimeter);

            margin.x := -MarginToMM(GetDeviceCaps(Printer.Handle, PHYSICALOFFSETX), GetDeviceCaps(Printer.Handle, LOGPIXELSX));
            margin.y := -MarginToMM(GetDeviceCaps(Printer.Handle, PHYSICALOFFSETY), GetDeviceCaps(Printer.Handle, LOGPIXELSY));
            SVGImage1.SVG.PaintTo(grPrinter, Bounds, nil, 0);
        finally
            grPrinter.Free;
        end;

        temp.EndDoc;
Gruss Hans

2B or not 2B, that is FF
  Mit Zitat antworten Zitat
xaromz

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

Re: Vektor Format anzeigen/drucken

  Alt 17. Nov 2007, 16:32
Hallo,

das Drucken ist immer so eine Sache... Ich verwende da folgende Routine:
Delphi-Quellcode:
type
  TDeviceCaps = record
    Name: WideString;
    Index: Integer;
    Width,
    Height,
    DPIX,
    DPIY,
    OffsetX,
    OffsetY: Integer;
    PhysicalWidth,
    PhysicalHeight: Integer;
    PixelWidth,
    PixelHeight: Real;
    Orientation: TPrinterOrientation;
  end;

function GetPrinterCaps: TDeviceCaps;
var
  DC: THandle;
  Caps: TDeviceCaps;
begin
  DC := Printer.Handle;
  Caps.Orientation := Printer.Orientation;
  Caps.Index := Printer.PrinterIndex;
  Caps.Name := Printer.Printers[Caps.Index];
  Caps.Width := GetDeviceCaps(DC, HorzSize); // mm
  Caps.Height := GetDeviceCaps(DC, VertSize); // mm
  Caps.DPIX := GetDeviceCaps(DC, LogPixelSX); // DPI
  Caps.DPIY := GetDeviceCaps(DC, LogPixelSY); // DPI
  Caps.OffsetX := GetDeviceCaps(DC, PhysicalOffsetX); // Pixel
  Caps.OffsetY := GetDeviceCaps(DC, PhysicalOffsetY); // Pixel
  Caps.PhysicalWidth := GetDeviceCaps(DC, PhysicalWidth); // Pixel
  Caps.PhysicalHeight := GetDeviceCaps(DC, PhysicalHeight); // Pixel
  Caps.PixelWidth := (Caps.Width / Printer.PageWidth);
  Caps.PixelHeight := (Caps.Height / Printer.PageHeight);
  Result := Caps;
end;

function GetPageRect(const Width, Height: Integer;
  const Caps: TDeviceCaps; Center: Boolean = True): TRect;
begin
  Result.Left := -Caps.OffsetX;
  Result.Top := -Caps.OffsetY;
  Result.Right := Result.Left + Round(Width / Caps.PixelWidth);
  Result.Bottom := Result.Top + Round(Height / Caps.PixelHeight);

  if Center then
  begin
    if Result.Right < Caps.PhysicalWidth then
    begin
      Result.Left := (Caps.PhysicalWidth - Result.Right) div 2;
      Inc(Result.Right, Result.Left);
    end;

    if Result.Bottom < Caps.PhysicalHeight then
    begin
      Result.Top := (Caps.PhysicalHeight - Result.Bottom) div 2;
      Inc(Result.Bottom, Result.Top);
    end;
  end;
end;

procedure TForm1.Print;
var
  R: TRect;
  Bounds: TGPRectF;
  Graphics: TGPGraphics;
  Caps: TDeviceCaps;
begin
  Caps := GetPrinterCaps;
  R := GetPageRect(Round(SVG.Width), Round(SVG.Height), Caps, False);
  Printer.BeginDoc;
  Bounds.X := R.Left;
  Bounds.Y := R.Top;
  Bounds.Width := R.Right - R.Left;
  Bounds.Height := R.Bottom - R.Top;

  Graphics := TGPGraphics.Create(Printer.Canvas.Handle);
  try
    Graphics.SetPageUnit(UnitPixel);
    Graphics.SetSmoothingMode(SmoothingModeAntiAlias);
    SVG.PaintTo(Graphics, Bounds, nil, 0);
  finally
    Graphics.Free;
  end;
  Printer.EndDoc;
end;
Ob das bei Dir funktioniert, musst Du allerding selbst ausprobieren.

Gruß
xaromz
I am a leaf on the wind - watch how I soar
  Mit Zitat antworten Zitat
xaromz

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

Re: Vektor Format anzeigen/drucken

  Alt 17. Nov 2007, 18:26
Hallo,
Zitat von torud:
Ich muss zu meiner Schande gestehen, dass die Fehlermeldung wirklich nicht besonders aussagekräftig war, aber so wie ich den Ersteller verstanden habe, funktioniert der ganze Spass leider unter Delphi6 nicht - Schade!
ich vermute mal, Du hast auf meiner Seite den Kommentar geschrieben. Gib doch mal die genaue Fehlermeldung an, dann kann man da vielleicht was machen.
Eventuell wäre dafür aber ein neuer Thread sinnvoll.

Gruß
xaromz
I am a leaf on the wind - watch how I soar
  Mit Zitat antworten Zitat
torud

Registriert seit: 26. Jul 2002
Ort: Sachsen
1.198 Beiträge
 
Delphi XE5 Professional
 
#47

Re: Vektor Format anzeigen/drucken

  Alt 18. Nov 2007, 07:07
Da liegst DU richtig. Eigentlich hatte ich doch schon die Fehlermeldung in Deinem Kommentarfenster geschrieben. Ich werde das Montag aber hier gern nochmal wiederholen, denn eigentlich wäre ich auch sehr an der Verwendung interessiert.

Mal nebenbei gefragt. Ist es eigentlich auch möglich andere Vektorgrafiken anzuzeigen? Ala *.ai von Adobe Illustrator?
Danke
Tom
  Mit Zitat antworten Zitat
xaromz

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

Re: Vektor Format anzeigen/drucken

  Alt 18. Nov 2007, 08:44
Hallo,
Zitat von torud:
Da liegst DU richtig. Eigentlich hatte ich doch schon die Fehlermeldung in Deinem Kommentarfenster geschrieben. Ich werde das Montag aber hier gern nochmal wiederholen, denn eigentlich wäre ich auch sehr an der Verwendung interessiert.
das stimmt. Die Fehlermeldung war, dass NameValueSeparator nicht definiert ist. Ich vermute, der Fehler tritt in "WideStringList.pas" in Zeile 254 auf. Wenn ja, dann kannst Du die Zeile einfach auskommentieren.

Zitat von torud:
Mal nebenbei gefragt. Ist es eigentlich auch möglich andere Vektorgrafiken anzuzeigen? Ala *.ai von Adobe Illustrator?
Klar ist das möglich. Du musst nur einen Parser für das Dateiformat schreiben und das Ergebnis irgendwie anzeigen . Die Arbeit werde ich mir aber momentan nicht machen. Freiwillige vor!

Gruß
xaromz
I am a leaf on the wind - watch how I soar
  Mit Zitat antworten Zitat
Gruber_Hans_12345

Registriert seit: 14. Aug 2004
1.426 Beiträge
 
Delphi 2007 Professional
 
#49

Re: Vektor Format anzeigen/drucken

  Alt 19. Nov 2007, 07:33
Zitat von xaromz:
Hallo,

das Drucken ist immer so eine Sache... Ich verwende da folgende Routine:
Ob das bei Dir funktioniert, musst Du allerding selbst ausprobieren.

Gruß
xaromz
nein leider nicht, aber ich habe mir mal die SetBounds routine angeschaut, die verwendet ja x und y gar nicht ... zumindest sehe ich nix davon
daher wird das ganze dann ja auch sicher nicht um die ränder versetzt auf den drucker gezeichnet oder?

Bei mir ist auch die SVG.Height und SVG.Width beides 0, aber die proportionen stimmen bei mir ja beim drucken (wenn ich UnitMillimeter verwende)
mein SVG ist auch in millimeter ausgegben, und hat eine viewbox von genau 0,0,210,297

das problem ist nur, das die druckroutine das ganze in den druckbaren bereich druckt, und so habe ich einen versatz von 4 millimeter
Gruss Hans

2B or not 2B, that is FF
  Mit Zitat antworten Zitat
Gruber_Hans_12345

Registriert seit: 14. Aug 2004
1.426 Beiträge
 
Delphi 2007 Professional
 
#50

Re: Vektor Format anzeigen/drucken

  Alt 19. Nov 2007, 07:44
so, habs nun hinbekommen, das er das ganz genau so druckt, wie es gehört ...

Delphi-Quellcode:
        bounds.X := 0;
        bounds.Y := 0;
        bounds.Width := 210;
        bounds.Height := 297;
        Printer.BeginDoc;

        Graphics := TGPGraphics.Create(Printer.Canvas.Handle);
        try
            Graphics.SetPageUnit(UnitMillimeter);
            Graphics.SetSmoothingMode(SmoothingModeAntiAlias);
            Graphics.TranslateTransform(-MarginToMM(GetDeviceCaps(Printer.Handle, PHYSICALOFFSETX), GetDeviceCaps(Printer.Handle, LOGPIXELSX)), -MarginToMM(GetDeviceCaps(Printer.Handle, PHYSICALOFFSETY), GetDeviceCaps(Printer.Handle, LOGPIXELSY)));
            SVGImage1.SVG.PaintTo(Graphics, Bounds, nil, 0);
        finally
            Graphics.Free;
        end;

        Printer.EndDoc;
danke nochmal für alles und diese extrem geniale komponente!
Gruss Hans

2B or not 2B, that is FF
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:10 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz