AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

ChartView drucken

Ein Thema von blondervolker · begonnen am 29. Dez 2012 · letzter Beitrag vom 30. Dez 2012
Antwort Antwort
Benutzerbild von blondervolker
blondervolker

Registriert seit: 14. Sep 2010
Ort: Bei: Leeeiipzzhhh
381 Beiträge
 
Delphi XE2 Architect
 
#1

ChartView drucken

  Alt 29. Dez 2012, 16:03
Nachträglich noch alles Gute und einen Guten Rutsch ins "Neue"...

Ich versuche seit Stunden ein Chart von TMS vernünftig auszudrucken.
In der Hilfe findet man keine vernünftigen Beispiele.
Bei mir wird das Chart immer als "EI" dargestellt.
Hab kein Plan...
Siehe Bild als Anhang.

Delphi-Quellcode:
procedure TForm18.Button1Click(Sender: TObject);
var
  bmp: TBitmap;
begin
  bmp := TBitmap.Create;
  bmp.Width := DBAdvGDIPChartView1.Width;
  bmp.Height := DBAdvGDIPChartView1.Height;
  DBAdvGDIPChartView1.PrintAllPanes(bmp.Canvas, Bounds(0,0, bmp.Width, bmp.Height));
  Printer.BeginDoc;
  Printer.Canvas.StretchDraw(Bounds(2000,2000,2000,2000), bmp);
  Printer.EndDoc;
  bmp.Free;
end;
Miniaturansicht angehängter Grafiken
a1.jpg  
www.bewerbungsmaker.de
  Mit Zitat antworten Zitat
MeierZwoo

Registriert seit: 3. Dez 2012
106 Beiträge
 
#2

AW: ChartView drucken

  Alt 29. Dez 2012, 16:17
Du solltest entweder nur die Höhe oder nur die Breite für die BMP vorgeben - dann wird der andere Wert angepaßt. Beide Werte vorgeben verzerrt die BMP (es sei denn, Du triffst genau die richtigen Werte, was aber nur geht, wenn die Auflösungen bekannt und gleich sind).

Geändert von MeierZwoo (29. Dez 2012 um 16:19 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#3

AW: ChartView drucken

  Alt 29. Dez 2012, 16:57
Das Bitmap dürfte vermutlich noch gut aussehen, aber beim Strechdraw solltest Du die Seitenverhältnisse des BItmaps beibehalten.
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)
  Mit Zitat antworten Zitat
Benutzerbild von haentschman
haentschman
Online

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
5.388 Beiträge
 
Delphi 12 Athens
 
#4

AW: ChartView drucken

  Alt 29. Dez 2012, 19:12
Moin...

bist du im Besitz eines Reportgenerators ? FastReport etc. ? Damit wäre das eine Kleinigkeit und die bessere Lösung...
  Mit Zitat antworten Zitat
Benutzerbild von blondervolker
blondervolker

Registriert seit: 14. Sep 2010
Ort: Bei: Leeeiipzzhhh
381 Beiträge
 
Delphi XE2 Architect
 
#5

AW: ChartView drucken

  Alt 29. Dez 2012, 20:43
Hallo,

mit den Seitenverhältnissen,habe ich noch nicht geschnallt bzw.noch nicht
gemacht...

Fastreports habe ich und es funktioniert!!!
Nur kann ich mit Fastreports nicht direkt in meinem Programm eine direkte
Vorschau generieren.Oder liege ich da falsch?
www.bewerbungsmaker.de
  Mit Zitat antworten Zitat
MeierZwoo

Registriert seit: 3. Dez 2012
106 Beiträge
 
#6

AW: ChartView drucken

  Alt 29. Dez 2012, 23:12
Erstmal sorry für meinen Erguß oben - ist zwar prinzipiell richtig, nur völlig daneben ausgedrückt (Kommt davon, wenn man seit Jahren eigene Prc benutzt, die einem dann das Denken abnehmen).

Dein Fehler ist, dass du für die Ausgabe mit StretchDraw einfach völlig willkürlich gewählte Werte benutzt, ohne Rücksicht auf die BMP-Quelle. Deine gewählten Werte bounds(..,2000,2000) quetschen die BMP in ein Quadrat [Breite=Höhe=2000], was an deinem Ausdruck ja auch sehr schön zu sehen ist

Die Breiten- und Höhenwerte müssen dieselben Proportionen wie deine BMP haben, deshalb einen Wert vorgeben, den anderen aus den Proportionen der BMP danach berechnen (Dreisatz).

bounds(.., AWidth, AHeight) müssen dasselbe Verhältnis wie dein bmp.Width und bmp.Height haben.

Wenn das Ausgabegerät auch noch verschiedene Werte für den x/y AspektRatio hat, müssen die auch berücksichtigt werden - wobei die meisten Drucker einen AspektRatio von 1:1 haben und dieser damit unberücksichtigt sein kann.

Geändert von MeierZwoo (29. Dez 2012 um 23:54 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von blondervolker
blondervolker

Registriert seit: 14. Sep 2010
Ort: Bei: Leeeiipzzhhh
381 Beiträge
 
Delphi XE2 Architect
 
#7

AW: ChartView drucken

  Alt 30. Dez 2012, 10:27
Hallo,

kannst du mir mal den Code verbessern,ich hab es noch nicht geschnallt.
www.bewerbungsmaker.de
  Mit Zitat antworten Zitat
MeierZwoo

Registriert seit: 3. Dez 2012
106 Beiträge
 
#8

AW: ChartView drucken

  Alt 30. Dez 2012, 11:03
Ich weiß, daß Pozentrechnung, Verhältnisrechnung und Dreisatz (alles dasselbe) das schwierigste im Leben ist - aber auch das einzige aus der Schul-Mathe, was man im Leben wirklich braucht

Um eine Grafik (hier BMP) mit canvas proportional auf einem Endgerät (Bildschirm, Drucker ...) auszugeben, müssen die Zielabmessungen BxH auch dieselben Proportionen wie die der Quelle (deine BMP) haben.

Du hast als Quell-Abmessungen bmp.Width und bmp.Height.
Die Zielabmessungen sind ...StretchDraw(Bounds(Einfx,Einfy,Zielbreite,Zielhöhe)...

Die Bedingung für proportionale Ausgabe ist:
bmp.Width / bmp.Height = Zielbreite / Zielhöhe
in den jeweiligen Einheiten (s.a. Angehängte Abb.).

1)
Normalerweise gibt man eine Ziel-Abmessung vor, z.B. die Breite. Dann muss die Höhe aus den Proportionen errechnet werden:

Aus bmp.Width / bmp.Height = Zielbreite / Zielhöhe folgt
Zielhöhe = Zielbreite * bmp.Height / bmp.Width

also Printer.Canvas.StretchDraw(Bounds(Einfx,Einfy,Ziel höhe,Zielbreite * bmp.Height div bmp.Width), bmp);

oder Printer.Canvas.StretchDraw(Bounds(2000,2000,2000,2 000 * bmp.Height div bmp.Width), bmp);

(Bei Höhe als Vorgabe umgekehrt).

2)
... kann man auch einen Vergrößerungs/Verkleinerungsfaktor vorgeben, dann ist
Zielbreite = bmp.Width * Faktor
Zielhöhe = bmp.Height * Faktor

3)
... oder 1:1 Ausgabe
Zielbreite = bmp.Width
Zielhöhe = bmp.Height

Nur: beide Werte des Zieles willkürlich vorgeben stretcht das Bild eben in diese Vorgaben und es wird verzerrt/gestretcht. Deshalb heißt die Procedure auch StretchDraw, weil sie das Bild eben gnadenlos an die Vorgabewerte anpaßt (s.a. Angehängte Abb.).

Anm: Bezeichnungen wie "Zielhöhe" etc. müssen logo in Syntaxgerechte Bezeichner umgesetzt werden
Miniaturansicht angehängter Grafiken
chart2.gif  

Geändert von MeierZwoo (30. Dez 2012 um 11:15 Uhr)
  Mit Zitat antworten Zitat
MeierZwoo

Registriert seit: 3. Dez 2012
106 Beiträge
 
#9

AW: ChartView drucken

  Alt 30. Dez 2012, 11:52
Noch zwei Anmerkungen:

1)
Die Berechnung mit Ganzzahlen führt automatisch zu Ungenauigkeiten. Ich persönlich arbeite deshalb für alle Abmessungen und x/y-Werte mit Gleitkommatypen, die dann gerundet eingefügt werden. Das ergibt dann maximal 1 Drucker-Pixel Ungenauigkeit in jeder Achse.

Ausnahme: Punkt 2), ganzzahliger Faktor, aber nur bei Vergrößerung oder Punkt 3), 1:1.

2)
Im obigen Beispiel ist ein AspektRatio <> 1:1 des Druckers (Endausgabegerätes) nicht berücksichtigt. Da die meisten Blattdrucker ein Ratio 1:1 haben, ist es auch evtl. unwesentlich, solange der eigene, bekannte Drucker verwendet wird. Aber bei unbekannten (fremden) Druckern sollte man den Ratio doch mit einbauen.

Den Ratio erhält man aus LOGPIXELSX und LOGPIXELSY bzw. ASPECTX und ASPECTY aus den DeviceCaps des Printers (Die Werte, die man ja auch für die Berechnung x/y-Werte in Maßeinheiten (mm, cm, inch) benötigt).
  Mit Zitat antworten Zitat
Antwort Antwort


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 11:40 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