problem z drukowaniem

0

W programie mam ustaloną formatkę do wydruku za pomocą polecenia canvas:
if(Form1->PrintDialog->Execute())
{
Printer()->Canvas->Font->Size=10;
Printer()->BeginDoc();
x=100; y=y+100; Printer()->Canvas->MoveTo(x,y); Printer()->Canvas->LineTo(x+4500,y+20);
x=1300; y=y+100; Printer()->Canvas->TextOutA(x,y, "linia1");
x=100; y=y+200; Printer()->Canvas->TextOutA(x,y, "linia2");
Printer()->EndDoc();
}
Jednak mój wydruk zależy w dużym stopniu od ustalenia jakości wydruku.
Jeżeli moja jakość wydruku jest ustalona na tryb normalny to wydruk ma poprawną wielokość. Jednak kiedy zmienię jakość wydruku na zwykłą czy szkic roboczy to mój tekst zostaje rozstrzelony tzn. odstępy między poszczególnymi lininijkami jest większa niż w trybie normalnym.
Czy są jakieś komendy w Builder C++ 6 abym mógł sam odczytać jaka jest ustawiona jakość wydruku drukarki oraz żebym sam mógł to zmienić za pomocą jakiegoś rokazu?

0

Masz właściwości printer takie jak:
PageHeight, PageWidth

Dodatkowo uchwyt Handle - a z WinAPI pozwala to już zrobić co się chce.

Zmieniając jakość wydruku zmieniasz rozdzielczość DPI a zatem jest mniej lub wiecej pixli (to tak obrazowo), a ty nie skalujesz.

0

Czy możesz ewentualnie wskazać linki do stron www gdzie mógłbym się dowiedzieć czegoś więcej na ten temat?

0

Głównie to GetDeviceCaps a opis -> MSDN

To kilka przydatnych funkcji, które dorobiłem do unitu z delphi 3, dotyczą realnych wymiarów i marginesów drukarki (jak pamiętam, kiedyś chciałem zadrukować całą strone i ... się nie dało - marginesy)

function TPrinter.PixPerMMXF:Double;
begin
 Result := (GetDeviceCaps(DC,HORZRES)/GetDeviceCaps(DC,HORZSIZE));
end;

function TPrinter.PixPerMMYF:Double;
begin
  Result := GetDeviceCaps(DC,VERTRES)/GetDeviceCaps(DC,VERTSIZE);
end;

function TPrinter.GetPHYSICALOFFSETY: Integer;
begin
  Result := GetDeviceCaps(DC, PHYSICALOFFSETY);
end;

function TPrinter.GetPHYSICALOFFSETX: Integer;
begin
  Result := GetDeviceCaps(DC, PHYSICALOFFSETX);
end;

function TPrinter.GetPHYSICALHEIGHT: Integer;
begin
  Result := GetDeviceCaps(DC, PHYSICALHEIGHT);
end;

function TPrinter.GetPHYSICALWIDTH: Integer;
begin
  Result := GetDeviceCaps(DC, PHYSICALWIDTH);
end;
0

Dzięki za pomoc Reichel. Już działa. :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1