Kako da ostampam komponente sa Forme ako je to moguce?
And don't be mad at me for crying for humanity,
call it pretensions but I got good intentions,
to keep my sanity, I'm hoping, fuck, there's gotta be
an answer to their strategies and their evil inventions... ~Looptroop
Ako zelis da stampas Formu kao Bitmap onda je zadavanje naredbe za stampanje trivijalno.
Form1.Print;
No ako zelis da stampas sadrzaj komponente,za linije teksta (to je najcesce), a da nemoras da se peglas sa QReport onda postoji alternativa.
U odsjeku za uses dodaj printers,
a procedura za stampanje izgleda ovako:
procedure TForm1.Stampaj(sl: TStrings);
var linija, x, y: integer;
sirina, visina, razmak_l, razmak_g: integer;
begin
if PrintDialog1.Execute then begin
Printer.BeginDoc; //Zapocinje stampanje
SetMapMode(Printer.Canvas.Handle, MM_LOMETRIC); //Prebacuje skalu na 1/10 mm
//Podesavanje slova i pozadine:
Printer.Canvas.Font.Name:='Verdana';
Printer.Canvas.Brush.Color:=clWhite;
Printer.Canvas.Font.Height:=40; //5 mm
//Pronalazenje velicine papira u jedinici 1/10 mm :
sirina:=GetDeviceCaps(Printer.Canvas.Handle, HORZSIZE)*10;
visina:=GetDeviceCaps(Printer.Canvas.Handle, VERTSIZE)*10;
razmak_l:=200; //2 cm
razmak_g:=200; //2 cm
x:=razmak_l;
y:=razmak_g*-1;
for linija:=0 to linije.Count-1 do begin
if -y>(visina-2*razmak_g) then
begin
//zavrsavamo stampanje prve strane i pripremamo novu za nastavak
Printer.EndDoc;
Printer.BeginDoc;
SetMapMode(Printer.Canvas.Handle, MM_LOMETRIC);
Printer.Canvas.Font.Name:='Arial';
Printer.Canvas.Brush.Color:=clWhite;
Printer.Canvas.Font.Height:=40; //5 mm
sirina:=GetDeviceCaps(Printer.Canvas.Handle, HORZSIZE)*10;
visina:=GetDeviceCaps(Printer.Canvas.Handle, VERTSIZE)*10;
razmak_l:=200;
razmak_g:=200;
x:=razmak_l;
y:=razmak_g*-1;
end;
if y=-razmak_g then begin
Printer.Canvas.Font.Style:=[fsbold];
Printer.Canvas.Font.Style:=[];
y:=y-Printer.Canvas.TextHeight(linije[linija]);
end;
Printer.Canvas.TextOut(x, y, linije[linija]);
y:=y-Printer.Canvas.TextHeight(linije[linija]);
end;
Sada ako postavite na Form1 komponentu Memo1,PrintDialog1 i Button1 i na event OnClick za Button jedan izprogramirate na sljedeci nacin: Stampaj(Memo1.lines); stampac ce vam isprintat sadrzaj memo-boxa.
Nezaboraviti dodati u public deklaraciji klase TForm1 sljedecu liniju:
procedure Stampaj(sl:Tstrings);