Entwickler-Ecke

Grafische Benutzeroberflächen (VCL & FireMonkey) - Tchart drucken im Querformat


Bronstein - Di 14.03.06 10:11
Titel: Tchart drucken im Querformat
Möchte ein TChart drucken. Es soll auf eine Din A4 Seite gedruckt werden und im Querformat. Das Diagramm sollte möglichst die ganze Seite ausfüllen.

Habe hier mal ein bisschen Code im Internet gefunden:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
var
  rect1, rect2 : TRect;
  Printer: TPrinter;
  hoehe, laenge : integer;
begin
  //Printer.Orientation := poPortrait;
  rect1.Left   := 0;
  rect1.Top    := 0;
  rect1.Right  := Printer.PageWidth-1;
  rect1.Bottom := Printer.PageHeight-1;

  Chart1.PrintRect(rect1);
end;


Das funktioniert aber nicht.


Bronstein - Di 14.03.06 16:05

Oder gibt es einen Möglichkeit, dass ich zwei Diagramme auf eine Seite bringe.
So habe ich mein Diagramm jetzt schonmal auf eine schöne größe gebracht, leider halt nur Hochkant und nicht im Querformat.

Jetzt habe ich aber noch ein zweites Diagramm, wie bekomm ich dies jetzt per Code auf die gleiche Seite wie mein erstes diagramm:


Delphi-Quelltext
1:
2:
3:
4:
5:
  rect1.Left   := 0;
  rect1.Top    := 0;
  rect1.Right  := 4800;
  rect1.Bottom := 2600;
  Chart1.PrintRect(rect1);


Bronstein - Di 14.03.06 21:51

Hat niemand eine Ahnung wie das funtionieren könnte?

Habe noch eine andere Idee, da ich ja zwei Diagramme habe könnte ich auch beide auf eine Seite machen, aber wie bekomme ich zwei Diagramme auf eine Seite?


Bronstein - Mi 15.03.06 11:58

Habe jetzt was herrausgefunden, mit dem man das Diagramm im Querformat druckt, jedoch weiß ich jetzt nicht wie ich die Größe des Diagramms angeben kann das ausgedruckt werden soll.
Ich möchte ja, dass das Diagramm den kompletten Platz des Blattes ausfüllt.
Hier der Code zum Querformat drucken:

Delphi-Quelltext
1:
Chart1.PrintLandscape;                    


Bronstein - Fr 04.08.06 16:01

Ich wei jetzt zwar wie man in Querformat druckt, auswählen auf was er druckt, A3 oder A4.

Das drucken im Querformat geht ja folgendermaßen:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
var
x,y:integer;
begin
printer.orientation:=polandscape;
x:=printer.pagewidth-1;
y:=printer.pageheight-1;
printer.begindoc;
chart1.printpartial(rect(0,0,x,y));
printer.enddoc;
end;


Wie kann ich hier jetzt angeben, dass er auf A3 drucken soll


alzaimar - Fr 04.08.06 17:20

Sollte das nicht alles über den Printmanager einzustellen sein? Du musst dem dem TChart doch nur den Druckbereich mitteilen, und dann das Teil ausdrucken, oder?


Bronstein - Fr 11.08.06 13:15

Habe jetzt folgende Lösung angewandt:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
var
  bmp , TargetBitmap: TBitmap;
begin
  bmp := TBitmap.Create;
  BMP.Assign(frmPMJ.GetFormImage);
  TargetBitmap := TBitmap.Create;
  TargetBitmap.Height := frmPMJ.PageControl1.Height-41;
  TargetBitmap.Width := frmPMJ.PageControl1.Width-26;
  BitBlt(TargetBitmap.Canvas.Handle, 00, frmPMJ.PageControl1.Width, frmPMJ.PageControl1.Height-20, bmp.Canvas.Handle,frmPMJ.PageControl1.Left+12, frmPMJ.PageControl1.Top+33, SRCCOPY);
  IF PrintDialog1.Execute
  THEN BEGIN
    printer.orientation:=polandscape;
    Printer.BeginDoc;
    Printer.Canvas.StretchDraw(RECT(0,0,Printer.PageWidth,Printer.PageHeight), TargetBitmap);
    Printer.EndDoc;
  end;


mikhal - Fr 11.08.06 14:40

Folgendes Schnipsel aus einem meiner Projekte. Wochenreihe ist ein TChart.


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
    
uses ..., Printers,...
...
if Wochenreihe.Visible then
  begin
    Wochenreihe.Foot.Text.clear;
    Wochenreihe.Foot.Text.Add('Vertraulich! Nur für autorisiertes Personal!');
    Printer.Orientation := poLandscape;
    Wochenreihe.PrintRect(Rect(0,0,Printer.PageWidth-1,Printer.PageHeight-1));
    Wochenreihe.Foot.Text.clear;
  end...


Funktioniert bei mir einwandfrei.

Mikhal