Bitmapa forma zbyt mała przy drukowaniu

0

Witam
Mam następujący problem: Na 'płótnie' rysuję bitmapę mojego forma (uzywajac NazwaForma.GetFormImage). Wszystko się poprawnie kompiluje i nawet drukuje z tym że bitmapa jest strasznie mała.

Kod:

 
begin
   if pdlgPrint.Execute = true then
   begin
    with Printer do
    begin
     Printer.BeginDoc;
      Printer.Canvas.Draw(10,10,frmReport.GetFormImage);
     Printer.EndDoc;
    end;
   end;

Czyli przynacisnieciu obrazka uruchamia się PrintDialog. Po nacisnieciu OK Drukuje bitmape mojego forma. Jedyny problem to jej rozmiar na papierze. Jest to problem z nie ustawieniem pól, błąd delphi czy może drukarki?

Z góry dziękuję
Janek566

0

a szukales na tym forum czy napisales nowego posta nie sprawdzajac czy juz przypadkiem nie bylo podobnego tematu?

0

Tak sprawdzalem. Jedyne co znalazlem to posty w ktorych ludzie piszą o nie załadowaniu siębitmapy z pliku. Ja w tym przypadku podczas programu tworzę bitmape mojego forma a potem uzywam jej jako parametr funkcji Canvas.Draw.

1

Hmm podejrzewam, że tu chodzi o DPI. Ile pikseli ma Twoja forma w pionie i poziomie? zakładając że drukarka drukuje przy 300DPI, to forma 1024x768 będzie miała realne wymiary 86x65mm. a przy 600DPI 43x32mm.

0

Wysokosc formy = 314
Szerokosc formy = 463

wartość PixelsPerInch = 96

PrintScale = poNone

Borland Delphi 2005

Zależy mi na zostawieniu takich samych rozmiarow formy a powiekszeniu bitmapy bo z tego trzeba bedzie czytac a na razie bitmapa na papierze jest mikroskopijna.

0

Ok rozwiązałem problem ale nie można nawet dać prefix'u [Solved] :/

A to jest rozwiązanie:

Bitmapa zależy ort! od płótna drukarki dlatego trzeba wymusic by wygenerowaną bitmapę wrzucić w prostokąt i użyć stretch draw:

 
with Printer do
    begin
     Printer.BeginDoc;
      r := Rect(200,200,2663,2014); // <-- tu tworzymy prostokąt o porządanych rozmiarach
      Printer.Canvas.StretchDraw(r, frmReport.GetFormImage); // <-- tutaj jest on uzywany za pomocą StreczDroł(prostokąt, bitmapa)
     Printer.EndDoc;
    end;

Pozdrawiam
Janek566

0

Dzięki, będę pamiętał.
Można zamknąć.

0

A wystarczyło zmienić właściwość PrintScale.

0
_13th_Dragon napisał(a)

A wystarczyło zmienić właściwość PrintScale.

Nie, juz wcześniej próbowałem ale nic to nie zmieniło, przynajmniej w moim przypadku.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.