F1! Stampanje Delphi, ne rade mi procedure

Peruzzi

Domaćin
Poruka
4.066
Treba da se odstampa niz labela na artiju ali na odredjenoj poziciji, u mm. Odnos forme i lista je 1.8:1, ako je jedan pixel na formi = 1 mm na hartiji. Stampa se na A4 formatu. Naisao sam na neke procedure i probao ih i u nastavku ide kod procedura. Prva ne stampa nista, a druga stampa stranu ali umanjenu 4 puta (s tim sto velicina fonta ostaje nepromenjena, greska je u koordinatama)

Pomazite braco, imam jos par dana da zavrsim maturski cu se samoubijem ako ne bude gotovo. Samo mi jos ovo ostalo




ukupnostrana:integer odredjuje koliko ukupno strana ima za stampanje
brojstrane:integer odredjuje koja strana se trenutno stampa
generisistranu:procedura koja popuni caption objekata u niz:array[1..1000] of TLabel;

====================================================
Ova procedura ne stampa nista. Samo provuce praznu stranu kroz stampac

Kod:
procedure TForm1.Stampanje();
var
  j,k:integer;

begin
  Printer.Canvas.Create;
  for i:=1 to ukupnostrana do
  begin
    brojstrane:=i;
    generisistranu;
    Printer.BeginDoc;
    SetMapMode(Printer.Canvas.Handle, MM_LOMETRIC);
    for k:=1 to 1000 do
    begin
      Printer.Canvas.Font.Name:= niz[k].Font.Name;
      Printer.Canvas.Font.Color:=niz[k].Font.Color;
      Printer.Canvas.Font.Size:=niz[k].Font.Size;
      Printer.Canvas.Font.Style:=niz[k].Font.Style;
      Printer.Canvas.TextOut(Round((niz[k].Left-20)/1.8)*10,
                             Round((niz[k].top-20)/1.8)*10, 
                             niz[k].capton);
    end;
  end;
end;

Sta radi procedura

for petljom potera od prve do poslednje stranice
popuni caption objekata vrednostima koje se stampaju na strani koja je trenutno na redu
podesi da je merna jedinica 0.1 mm
prodje kroz niz labela i odstampa ih na datim koordinatama
kod koordinata vrsi se preracunavanje jer su one na prozoru u razmeri 1.8:1 u odnosu na stranu (ako je pixel na formi ekvivalentan milimetru na papiru)


=================================================
Ova procedura stampala je stranu ali 4x manju

Kod:
procedure TForm4.Stampanje();
var j,k:integer;
    ScaleX, ScaleY: Integer;
begin
  Printer.Canvas.Create;
  for j:=1 to ukupnostrana do
  begin
    brojstrane:=j;
    GenerisiStranu;

    With Printer do
    begin
    BeginDoc;
    ScaleX := GetDeviceCaps(Handle, logPixelsX) div PixelsPerInch;
    ScaleY := GetDeviceCaps(Handle, logPixelsY) div PixelsPerInch;
    end;

    for k:=1 to 1000 do
    begin
      Printer.Canvas.Font.Color:=niz[k].Font.Color;
      Printer.Canvas.Font.Size:=niz[k].Font.Size;
      Printer.Canvas.Font.Style:=niz[k].Font.Style;
      Printer.Canvas.TextOut(Round((niz[k].Left-20)/1.8)*ScaleX,Round((niz[k].Top-20)/1.8)*ScaleY,niz[k].Caption);
    end;
    Printer.EndDoc;
  end;
end;

isti princip rada kao i prethodna, s tim sto je ovde ScaleX i ScaleY ipak nesto radilo
 

Back
Top