Drukowanie i oblicznie pixeli

0

Jak obliczyć ile pixeli wychodzi na 1cm danego formatu papieru.

Chciałbym następującą rzecz:

procedure InsText(x,y:integer;tekst:string;);
begin
Printer.Canvas.TextOut(x,y,tekst);
end;

i teraz potrzebuje aby pod x i y podstawić obliczone zmienne.

px:= ....;
py:=...;

InsText(px,15*py,'Jakis Tekst');

i wtedy zeby wydruk wyszedl na stronie na 15 centymetrze od góry i na 1 centymetrze z lewej.

hmmm, jak to obliczyc, wiadomo cos takiego jest potrzebne zeby drukowalo tak samo na kazdej drukarce :D

0

Wpierw musisz pobrac rozdzielczosc drukarki:
jako globalna zmienna:
var
rozdzielczosc:TPoint;

Pozniej zrob sobie procedurke:

procedure hadh:
rozdzielczosc.x:=GetDeviceCaps(Printer.Handle, LOGPIXELSX);
rozdzielczosc.y:=GetDeviceCaps(Printer.Handle, LOGPIXELSY);

pod tymi zmiennnymi masz rozdzielczosc drukarki;
mozesz sobie to tego dodac obliczenie wysokosci czcionki:

w_czcionki:=Abs(muldiv(printer.canvas.font.size,rozdzielczosc.y,72));
inc(w_czcionki,(w_czcionki*4) div 10);// do wysokosci czcionki dodaje 40% na odtep

ile_linii:=printer.pageheight div w_czcionki;
i teraz pod zmienna ile_linii bedziesz mial ile masz linii na papierze

pozniej jak przyjdzie do drukowania jak masz rozdzielczosc drukary to mozesz sobie wydruk dowolnie rzesuwac:

przesun_x:=round(230/254rozdzielczosc.x);
przesun_y:=round(115/254
rozdzielczosc.y);

hmm
To chyba wszystko.Pozdrawiam

0

pozniej jak przyjdzie do drukowania jak masz rozdzielczosc drukary to mozesz sobie wydruk dowolnie rzesuwac:

przesun_x:=round(230/254rozdzielczosc.x);
przesun_y:=round(115/254
rozdzielczosc.y);

no wlasnie wszystko w porzadku ale skad wziac programowo rozdzielczosc drukarki /?? - chyba ze cos pokrecilem lub nie zrozumialem, ale skad te liczby (230/254 i 115/254), a przeciez nie bede robil osobnych progsow na rozne drukarki.

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