Mam taką procedurkę:
procedure TForm1.PaintScene(aCanvas: TCanvas; SceneRect: TRect);
procedure PaintText(X, Y: Integer; color: TColor; tekst: String; textcolor: TColor);
begin
with aCanvas do
begin
Font.Name := 'Arial';
Font.Size := Round(10 / FZoomFactor);
Pen.Color := color;
Brush.Color := color;
Font.Color := textcolor;
Brush.Style := bsSolid;
TextOut(X, Y, tekst);
end;
end;
var
resX, resY: Integer; // device resolution
begin
resX := GetDeviceCaps(aCanvas.Handle, LOGPIXELSX);
resY := GetDeviceCaps(aCanvas.Handle, LOGPIXELSY);
SetMapMode(aCanvas.Handle, MM_TEXT);
SetViewportExtEx(aCanvas.Handle, resX, resY, nil);
SetWindowExtEx(aCanvas.Handle, Round(100 * FZoomFactor), Round(100 * FZoomFactor), nil);
SetWindowOrgEx(aCanvas.Handle, FOffset.X, FOffset.Y, nil);
SetViewportOrgEx(aCanvas.Handle, SceneRect.Left, SceneRect.Top, nil);
//rysowanie
with aCanvas do
begin
PaintText(39, 39, clWhite, 'X:39 - Y:39', clBlack);
PaintText(100, 100, clWhite, 'X:100 - Y:100', clBlack);
end;
end;
i Teraz wywołuję ją dwa razy:
raz, dla rysowania po PaintBox'ie:
PaintScene(Paintbox.Canvas, Rect(PaintBox.Left, PaintBox.Top, PaintBox.Width, PaintBox.Height));
dwa, dla przesłania jej do drukarki:
PaintScene(Printer.Canvas, Rect(PaintBox.Left, PaintBox.Top, PaintBox.Width, PaintBox.Height));
Obraz na monitorze nie zgadza się z wydrukiem, co w tej procedurce jest nie tak?
Rozmieszczenie obiektów canvasa inaczej wygląda na papierze i na monitorze