Einzelnen Beitrag anzeigen

Cordt

Registriert seit: 10. Jan 2013
32 Beiträge
 
#1

Print Scrollbox in richtiger Größe

  Alt 27. Nov 2020, 17:58
Hallo miteinander,

ich versuche aktuell eine Scrollbox auszudrucken.
Ich habe bereits eine procedure, um die Scrollbox auf die Printer.Canvas zu bekommen, aber beim Ausdrucken ist die übergroße Seite vllt noch 5 cm groß.
Ich würde es gerne auf ne Din A 4 Seite vergrößern. Wenn ich es im PDF-Printer ausdrucke, kann ich in super Qualität bis zur Größe von din A 4 ranzoomen.
Ich hab schon diverses versucht, aber das meiste braucht ein Bitmap zum ausdrucken, das ich ja nicht habe, ebenso ist mir auch keine Kopieren in ein Bitmap gelungen, das ich danach StretchDraw'n könnte, um es dann zu drucken.
Ich hoffe ihr könnt mir hier auf die Sprünge helfen. Danke

Delphi-Quellcode:
procedure TFormKampf.BtnPrintClick(Sender: TObject);
var
PrintDialog : TPrintDialog;
i, breite, hoehe : Integer;

begin

  PrintDialog := TPrintDialog.Create(self);
  if PrintDialog.Execute then
  begin
    Printer.BeginDoc;

    SetMapMode(Printer.Canvas.Handle,MM_ANISOTROPIC);
    breite := GetDeviceCaps(Printer.Canvas.Handle, HORZSIZE);
    hoehe := GetDeviceCaps(Printer.Canvas.Handle, VERTSIZE);

    ScrollBoxToCanvas(ScrollBox1,Printer.Canvas) ;

    Printer.EndDoc;
  end;
end;


procedure TFormKampf.ScrollBoxToCanvas(ScrollBox:TScrollBox; Canvas:TCanvas);
var saveY, Y, SchrittY:integer;
    saveX, X, SchrittX:integer;
    abbruchY, abbruchX:boolean;
    saveBorderStyle:TBorderStyle;
begin
  saveY:=ScrollBox.VertScrollBar.Position;
  saveX:=ScrollBox.HorzScrollBar.Position;
  saveBorderStyle:=ScrollBox.BorderStyle;

  ScrollBox.BorderStyle:=bsNone;
  ScrollBox.VertScrollBar.Position:=0;
  Y:=0;
  SchrittY:=ScrollBox.Height-100;
  repeat
    ScrollBox.HorzScrollBar.Position:=0;
    X:=0;
    SchrittX:=ScrollBox.Width-100;
    abbruchY:=(ScrollBox.VertScrollBar.Position <> Y);
    repeat
      abbruchX:=(ScrollBox.HorzScrollBar.Position <> X);
      ScrollBox.Refresh;
      ScrollBox.PaintTo(Canvas,ScrollBox.HorzScrollBar.Position,
                               ScrollBox.VertScrollBar.Position);
      ScrollBox.HorzScrollBar.Position:=ScrollBox.HorzScrollBar.Position + SchrittX;
      X:=X+SchrittX;
    until abbruchX;
    ScrollBox.VertScrollBar.Position:=ScrollBox.VertScrollBar.Position + SchrittY;
    Y:=Y+SchrittY;
  until abbruchY;

  ScrollBox.VertScrollBar.Position:=saveY;
  ScrollBox.HorzScrollBar.Position:=saveX;
  ScrollBox.BorderStyle:=saveBorderStyle;
end;
  Mit Zitat antworten Zitat