Stampanje Delphi
Prikazujem rezultate 1 do 20 od 20

Tema: Stampanje Delphi

  1. #1
    -gost-
    Guest

    Podrazumevano Stampanje Delphi

    pa ja imam jako veliki problem sa ovim glupim stringgridom kako da iz te tabele odstampam podatke. ja sam pravio formu sa labelima i namestio da on sam prepisuje i stavljao komandu form1.print;

    ali to neradi kako treba i kad mi treba da podelim to na vise strana izbacuje neke silne grske, stampac pobrljavi...

    da li neko moze za to da mi napise otprilike kako bi to mogao da napravim...

    LJUDI POMAGAJTE AKO TO DA NAPRAVIM !!!!




  2. #2
    Početnik
    Učlanjen
    10.04.2004.
    Poruke
    24
    Reputaciona moć
    0

    Podrazumevano QR

    Jesi li pokusao sa QuckReport-om?

  3. #3
    Programerka
    Guest

    Podrazumevano Re: Stampanje Delphi

    Ako sam dobro razumela, probaj QuckReport.Preview :wink:

    Citat Original postavio -gost-
    pa ja imam jako veliki problem sa ovim glupim stringgridom kako da iz te tabele odstampam podatke. ja sam pravio formu sa labelima i namestio da on sam prepisuje i stavljao komandu form1.print;

    ali to neradi kako treba i kad mi treba da podelim to na vise strana izbacuje neke silne grske, stampac pobrljavi...

    da li neko moze za to da mi napise otprilike kako bi to mogao da napravim...

    LJUDI POMAGAJTE AKO TO DA NAPRAVIM !!!!


  4. #4
    Početnik
    Učlanjen
    10.04.2004.
    Poruke
    24
    Reputaciona moć
    0

    Podrazumevano Re: Stampanje Delphi

    Vidi, mozes koristiti QuickReport komponentu. Ja sam (ne preterano) zadovoljan njome. U sustini, toj komponenti dovedi ulaz koji hoces i ne bi trebalo da bude problema. Pokusaj. ako se ne snadjes, javi.
    Pozdrav.
    Nenad.

  5. #5
    -gost-
    Guest

    Podrazumevano Re: Stampanje Delphi

    Citat Original postavio Programerka
    Ako sam dobro razumela, probaj QuckReport.Preview :wink:

    Citat Original postavio -gost-
    pa ja imam jako veliki problem sa ovim glupim stringgridom kako da iz te tabele odstampam podatke. ja sam pravio formu sa labelima i namestio da on sam prepisuje i stavljao komandu form1.print;

    ali to neradi kako treba i kad mi treba da podelim to na vise strana izbacuje neke silne grske, stampac pobrljavi...

    da li neko moze za to da mi napise otprilike kako bi to mogao da napravim...

    LJUDI POMAGAJTE AKO TO DA NAPRAVIM !!!!

    Ma ja sam nesto pokusao sa qreportom ali mi bas neide ako imate neki primer za to napisite mi cod(ali sa komentarima da bi ja to ukapirao sta je sta),
    ili ako moze to nekako jednostavnije bez qreporta.

  6. #6
    st0rmbringer
    Guest

    Podrazumevano

    ako je nesto jednostavno ne treba ti qreport.
    poslacu ti kod koji sam ja radio za tabele. koristis Printer.Canvas i crtas po njemu linije sa MoveTo(x,y) i LineTo(x,y) da bi nacrtao tabelu (debljinu linije podesavas sa Printer.Canvas.Pen.Width) i popunjavas je sa Printer.Canvas.TextOut(X, Y, Text). Font Podesavas sa (logicno) Pritner.Canvas.Font i to je to.
    Pocetak ti je Printer.BeginDoc a kraj Printer.EndDoc. Svaku novu stranicu posle prve zapocinjes sa Printer.NewPage.
    Ovo sve ti kucam iz glave al bi trebalo da radi, u svakom sl. ces dobit kod pa ces videti vec.

    pozdravi

  7. #7
    -Crazy-
    Guest

    Podrazumevano

    Mislim da sam razumeo ali mi posalji kod da ja vidim kako to funkcionise. Hvala!!!

    Citat Original postavio st0rmbringer
    ako je nesto jednostavno ne treba ti qreport.
    poslacu ti kod koji sam ja radio za tabele. koristis Printer.Canvas i crtas po njemu linije sa MoveTo(x,y) i LineTo(x,y) da bi nacrtao tabelu (debljinu linije podesavas sa Printer.Canvas.Pen.Width) i popunjavas je sa Printer.Canvas.TextOut(X, Y, Text). Font Podesavas sa (logicno) Pritner.Canvas.Font i to je to.
    Pocetak ti je Printer.BeginDoc a kraj Printer.EndDoc. Svaku novu stranicu posle prve zapocinjes sa Printer.NewPage.
    Ovo sve ti kucam iz glave al bi trebalo da radi, u svakom sl. ces dobit kod pa ces videti vec.

    pozdravi

  8. #8
    Primećen član
    Učlanjen
    15.02.2004.
    Lokacija
    Nis-New York
    Poruke
    572
    Reputaciona moć
    56

    Podrazumevano

    evo, to je deo malo vece stvari tako da je komplikovanije nego sto bi trebalo da bude samo za tabelu, al valjda ces se snaci. ako ima pitanja, ti ih postavi

    type TOnePage = array [1..30] of TFilter;
    TPrintPages = array [1..1000] of TOnePage;

    const LinesPerPage: Integer = 25; //25 + header

    ...

    TFilter = record
    Header1......bla bla...Header9: string;
    end;


    var
    Pages: TPrintPages;
    PrintRatios, ViewRatios: array [0..10] of Real;
    HeaderText: array [1..8] of string = ('Header1', 'Header2', 'Header3', 'Header4', 'Header5', 'Header6', 'Header8', 'Header9');

    ...


    procedure DrawGrid(PageNum: Integer);
    var i: Integer;
    PageTitle: string;
    begin
    Printer.Canvas.Font.Name := 'Tahoma';
    //horizontal
    for i := 1 to LinesPerPage do
    begin
    Printer.Canvas.MoveTo(100, 300 + i * (Printer.PageHeight - 500) div (LinesPerPage + 1));
    Printer.Canvas.LineTo(Printer.PageWidth - 100, 300 + i * (Printer.PageHeight - 500) div (LinesPerPage + 1));
    end;

    Printer.Canvas.Font.Style := [fsBold];

    //header
    Printer.Canvas.TextOut(100, 0, 'Spisak 329');
    Printer.Canvas.TextOut(Printer.PageWidth - 100 - Printer.Canvas.TextWidth('Opsta uprava'), 0, 'OpÜta uprava');
    Printer.Canvas.MoveTo(100, 120);
    Printer.Canvas.LineTo(Printer.PageWidth - 100, 120);
    PageTitle := UpperCase('Naslov');
    Printer.Canvas.TextOut((Printer.PageWidth - Printer.Canvas.TextWidth(PageTitle)) div 2, 170, PageTitle);

    //header row
    Printer.Canvas.Rectangle(100, 300, Printer.PageWidth - 100, 300 + (Printer.PageHeight - 500) div (LinesPerPage + 1));
    Printer.Canvas.TextOut(140, 330, HeaderText[1]);
    for i := 2 to 8 do
    Printer.Canvas.TextOut(140 + Round(PrintRatios[i - 1] * (Printer.PageWidth - 200)), 330, HeaderText[i]);

    //vertical
    for i := 1 to 7 do
    begin
    Printer.Canvas.MoveTo(100 + Round(PrintRatios[i] * (Printer.PageWidth - 200)), 300);
    Printer.Canvas.LineTo(100 + Round(PrintRatios[i] * (Printer.PageWidth - 200)), Printer.PageHeight - 200);
    end;

    //frame
    Printer.Canvas.Pen.Width := 10;
    Printer.Canvas.MoveTo(100, 300);
    Printer.Canvas.LineTo(100, Printer.PageHeight - 200);
    Printer.Canvas.LineTo(Printer.PageWidth - 100, Printer.PageHeight - 200);
    Printer.Canvas.LineTo(Printer.PageWidth - 100, 300);
    Printer.Canvas.LineTo(100, 300);
    Printer.Canvas.Pen.Width := 2;

    //text
    Printer.Canvas.TextOut(Printer.PageWidth - 100 - Printer.Canvas.TextWidth('Strana ' + IntToStr(PageNum) + '.'), Printer.PageHeight - 150, 'Strana ' + IntToStr(PageNum) + '.');
    Printer.Canvas.Font.Style := [];
    Printer.Canvas.Font.Name := 'Courier New';
    end;

    procedure TMainForm.PrintButtonClick(Sender: TObject);
    var i, j, k: Integer;
    Lines: TStringList;
    PageNum, LineNum: Integer;
    DB2: TStringList;
    tmp1, tmp2, p: string;
    begin
    //prepare printer
    PrintRatios[1] := 5/100;
    PrintRatios[2] := 30/100;
    PrintRatios[3] := 32/100;
    PrintRatios[4] := 37/100;
    PrintRatios[5] := 49/100;
    PrintRatios[6] := 75/100;
    PrintRatios[7] := 90/100;
    PrintRatios[8] := 100/100;
    Printer.Title := 'Naslov';
    Printer.Orientation := poLandscape;
    Printer.Canvas.Brush.Color := Rgb(240, 240, 240);

    Printer.BeginDoc;
    Printer.Canvas.Font.Charset := EASTEUROPE_CHARSET;
    Printer.Canvas.Font.Size := 10;
    //print pages
    for i := 1 to PageNum do
    begin
    DrawGrid(i);

    if i < PageNum then
    k := LinesPerPage
    else
    k := LineNum;

    //print page
    for j := 1 to k do
    begin
    Printer.Canvas.TextOut(140, 350 + (j) * (Printer.PageHeight - 500) div (LinesPerPage + 1), Pages[i][j].Header1);
    Printer.Canvas.TextOut(140 + Round(PrintRatios[1] * (Printer.PageWidth - 200)), 350 + (j) * (Printer.PageHeight - 500) div (LinesPerPage + 1), Pages[i][j].Header2 + ' ' + Pages[i][j].Header3);
    Printer.Canvas.TextOut(140 + Round(PrintRatios[2] * (Printer.PageWidth - 200)), 350 + (j) * (Printer.PageHeight - 500) div (LinesPerPage + 1), Pages[i][j].Header4);
    Printer.Canvas.TextOut(140 + Round(PrintRatios[3] * (Printer.PageWidth - 200)), 350 + (j) * (Printer.PageHeight - 500) div (LinesPerPage + 1), '1' + Copy(Pages[i][j].Header5, 5, 3));

    ...

    end;
    if i < PageNum then
    begin
    Printer.NewPage;
    BusyForm.Progress.Position := BusyForm.Progress.Position + 1;
    Application.ProcessMessages;
    end;
    end;

    Printer.EndDoc;
    //ShowMessage(IntToStr(Printer.PageHeight) + ' ' + IntToStr(Printer.PageWidth));
    Busyform.Close;
    end;

  9. #9
    crazy_zzr
    Guest

    Podrazumevano

    Hvala ja cu pokusati da ovo iskoristim pa cu javiti sta sam uradio!!!

  10. #10
    crazy_zzr
    Guest

    Podrazumevano

    Ja sam to pravio ovako nekako pa onda sam to prepisivao i prepravljao u 10 button-a i moglo je samo deset strana da stampa ali to bas neradi kako treba hoce da brljavi da li neko to moze malo da prepravi da to samo deli na strane i stampa

    procedure TForm32.Button1Click(Sender: TObject);
    var
    rrr,rr,kraj,r: integer;
    labels_br: array[1..41] of TLabel;
    labels_datum: array[1..41] of TLabel;
    labels_naziv: array[1..41] of TLabel;
    labels_iznosr: array[1..41] of TLabel;
    labels_iznos2r: array[1..41] of TLabel;
    labels_valuta: array[1..41] of TLabel;
    labels_placenod: array[1..41] of TLabel;
    labels_placeno: array[1..41] of TLabel;
    labels_kk: array[1..41] of TLabel;
    shape_linije: array[1..41] of tshape;
    begin
    for r := 1 to 41 do
    begin
    rr:=r-1;
    shape_linije[r] :=Tshape.Create(self);
    with shape_linije[r] do
    begin
    Parent := Form32;
    BidiMode := Form32.Bidimode;
    height := 1;
    width:=800;
    Left := 8;
    Top := 23+rr*18;
    pen.Color := clwhite;
    brush.Color := clwhite;
    end;

    labels_br[r] :=TLabel.Create(self);
    with labels_br[r] do
    begin
    font.Size := 12;
    Parent := Form32;
    BidiMode := Form32.Bidimode;
    Left := kolona1.Left;
    Top := 24+rr*18;
    Caption := form31.StringGrid1.cells[0,r];
    end;

    labels_datum[r] := TLabel.Create(self);
    with labels_datum[r]do
    begin
    font.Size := 12;
    Parent := Form32;
    BidiMode := Form32.Bidimode;
    Left := kolona2.Left;
    Top := 24+rr*18;
    Caption := form31.StringGrid1.cells[1,r];
    end;
    labels_naziv[r] :=TLabel.Create(self);
    with labels_naziv[r] do
    begin
    font.Size := 12;
    Parent := Form32;
    BidiMode := Form32.Bidimode;
    Left := kolona3.Left;
    Top := 24+rr*18;
    Caption := form31.StringGrid1.cells[2,r];
    end;
    labels_iznosr[r] := TLabel.Create(self);
    with labels_iznosr[r]do
    begin
    font.Size := 12;
    Parent := Form32;
    BidiMode := Form32.Bidimode;
    Left := kolona4.Left;
    Top := 24+rr*18;
    Caption := form31.StringGrid1.cells[3,r];
    end;
    labels_iznos2r[r] :=TLabel.Create(self);
    with labels_iznos2r[r] do
    begin
    font.Size := 12;
    Parent := Form32;
    BidiMode := Form32.Bidimode;
    Left := kolona5.Left;
    Top := 24+rr*18;
    autosize := false;
    width := kolona5.Width ;
    ALIGnMENT:= taRightJustify;
    Caption := form31.StringGrid1.cells[4,r];
    end;
    labels_valuta[r] := TLabel.Create(self);
    with labels_valuta[r]do
    begin
    font.Size := 12;
    Parent := Form32;
    BidiMode := Form32.Bidimode;
    Left := kolona6.Left;
    Top := 24+rr*18;
    autosize := false;
    width := kolona6.Width ;
    ALIGnMENT:= taRightJustify;
    Caption := form31.StringGrid1.cells[5,r];
    end;
    labels_placenod[r] :=TLabel.Create(self);
    with labels_placenod[r] do
    begin
    font.Size := 12;
    Parent := Form32;
    BidiMode := Form32.Bidimode;
    Left := kolona7.Left;
    Top := 24+rr*18;
    autosize := false;
    width := kolona7.Width ;
    ALIGnMENT:= taRightJustify;
    Caption := form31.StringGrid1.cells[6,r];
    end;
    labels_placeno[r] := TLabel.Create(self);
    with labels_placeno[r]do
    begin
    font.Size := 12;
    Parent := Form32;
    BidiMode := Form32.Bidimode;
    Left := kolona8.Left;
    Top := 24+rr*18;
    autosize := false;
    width := kolona8.Width ;
    ALIGnMENT:= taRightJustify;
    Caption := form31.StringGrid1.cells[7,r];
    end;
    labels_kk[r] := TLabel.Create(self);
    with labels_kk[r]do
    begin
    font.Size := 12;
    Parent := Form32;
    BidiMode := Form32.Bidimode;
    Left := kolona9.Left;
    Top := 24+rr*18;
    autosize := false;
    width := kolona9.Width ;
    ALIGnMENT:= taleftJustify;
    Caption := form31.StringGrid1.cells[8,r];
    end;

    if r = 41 then
    begin
    form32.Print ;
    sleep(2000);
    Form32.Refresh;
    for rrr:=1 to 41 do
    begin
    labels_br[rrr].free;
    labels_datum[rrr].free;
    labels_naziv[rrr].free;
    labels_iznosr[rrr].free;
    labels_iznos2r[rrr].free;
    labels_valuta[rrr].free;
    labels_placenod[rrr].free;
    labels_placeno[rrr].free;
    labels_kk[rrr].free;
    end;
    page.caption := inttostr(strtoint(page.caption)-1);
    if page.caption = '0' then
    begin
    showmessage('Mozete da nastavite sa radom');
    form32.hide;
    form31.button1click(self);
    end
    else
    begin
    button4click(self);
    end;

    end;
    end;

    end;

    znaci to ima na strani 41 red otprilike 2 trecine strane i to sve brljavi kad je vise strana u stampi !!!

    DA LI JE NEKO OVO RAZUMEO I DA LI MOZE DA MI TO POMOGNE

  11. #11
    Primećen član
    Učlanjen
    15.02.2004.
    Lokacija
    Nis-New York
    Poruke
    572
    Reputaciona moć
    56

    Podrazumevano

    E bas me mrzi da citam sve ovo i tumacim evo ti procedura koju sam naso na netu, trebalo bi da radi

    uses
    printers;

    //StringGrid Inhalt ausdrucken
    procedure PrintStringGrid(Grid: TStringGrid; Title: string;
    Orientation: TPrinterOrientation);
    var
    P, I, J, YPos, XPos, HorzSize, VertSize: Integer;
    AnzSeiten, Seite, Zeilen, HeaderSize, FooterSize, ZeilenSize, FontHeight: Integer;
    mmx, mmy: Extended;
    Footer: string;
    begin
    //Kopfzeile, Fußzeile, Zeilenabstand, Schriftgröße festlegen
    HeaderSize := 100;
    FooterSize := 200;
    ZeilenSize := 36;
    FontHeight := 36;
    //Printer initializieren
    Printer.Orientation := Orientation;
    Printer.Title := Title;
    Printer.BeginDoc;
    //Druck auf mm einstellen
    mmx := GetDeviceCaps(Printer.Canvas.Handle, PHYSICALWIDTH) /
    GetDeviceCaps(Printer.Canvas.Handle, LOGPIXELSX) * 25.4;
    mmy := GetDeviceCaps(Printer.Canvas.Handle, PHYSICALHEIGHT) /
    GetDeviceCaps(Printer.Canvas.Handle, LOGPIXELSY) * 25.4;

    VertSize := Trunc(mmy) * 10;
    HorzSize := Trunc(mmx) * 10;
    SetMapMode(Printer.Canvas.Handle, MM_LOMETRIC);

    //Zeilenanzahl festlegen
    Zeilen := (VertSize - HeaderSize - FooterSize) div ZeilenSize;
    //Seitenanzahl ermitteln
    if Grid.RowCount mod Zeilen <> 0 then
    AnzSeiten := Grid.RowCount div Zeilen + 1
    else
    AnzSeiten := Grid.RowCount div Zeilen;

    Seite := 1;
    //Grid Drucken
    for P := 1 to AnzSeiten do
    begin
    //Kopfzeile
    Printer.Canvas.Font.Height := 48;
    Printer.Canvas.TextOut((HorzSize div 2 - (Printer.Canvas.TextWidth(Title) div 2)),
    - 20,Title);
    Printer.Canvas.Pen.Width := 5;
    Printer.Canvas.MoveTo(0, - HeaderSize);
    Printer.Canvas.LineTo(HorzSize, - HeaderSize);
    //Fußzeile
    Printer.Canvas.MoveTo(0, - VertSize + FooterSize);
    Printer.Canvas.LineTo(HorzSize, - VertSize + FooterSize);
    Printer.Canvas.Font.Height := 36;
    Footer := 'Seite: ' + IntToStr(Seite) + ' von ' + IntToStr(AnzSeiten);
    Printer.Canvas.TextOut((HorzSize div 2 - (Printer.Canvas.TextWidth(Footer) div 2)),
    - VertSize + 150,Footer);
    //Zeilen drucken
    Printer.Canvas.Font.Height := FontHeight;
    YPos := HeaderSize + 10;
    for I := 1 to Zeilen do
    begin
    if Grid.RowCount >= I + (Seite - 1) * Zeilen then
    begin
    XPos := 0;
    for J := 0 to Grid.ColCount - 1 do
    begin
    Printer.Canvas.TextOut(XPos, - YPos,
    Grid.Cells[J, I + (Seite - 1) * Zeilen - 1]);
    XPos := XPos + Grid.ColWidths[J] * 3;
    end;
    YPos := YPos + ZeilenSize;
    end;
    end;
    //Seite hinzufügen
    Inc(Seite);
    if Seite <= AnzSeiten then Printer.NewPage;
    end;
    Printer.EndDoc;
    end;

    //Example
    procedure TForm1.Button1Click(Sender: TObject);
    begin
    //Drucken im Querformat
    PrintStringGrid(Grid, 'StringGrid Print Landscape', poLandscape);
    //Drucken im Hochformat
    PrintStringGrid(Grid, 'StringGrid Print Portrait', poPortrait);
    end;

  12. #12
    crazy_zzr
    Guest

    Podrazumevano

    Hvala za kod javicu da li radi!!!

  13. #13
    crazy_zzr
    Guest

    Podrazumevano

    Znam da sam smorio ali imam problem. ovo sto si mi zadnje napiso ja sam uspeo da nekako iskoristim ali mi izbacuje neku gresku !!!
    tamo na button1click

    procedure TForm1.Button1Click(Sender: TObject);
    begin
    //Drucken im Querformat
    PrintStringGrid(Grid, 'StringGrid Print Landscape', poLandscape);
    //Drucken im Hochformat
    PrintStringGrid(Grid, 'StringGrid Print Portrait', poPortrait);

    end;

    izbaci mi gresku:

    [Error] Unit1.pas(109): Undeclared identifier: 'Grid'

    i zamarkira:

    PrintStringGrid(Grid, 'StringGrid Print Landscape', poLandscape);

    Sto mu je?

    Hvala unapred!!!

  14. #14
    crazy_zzr
    Guest

    Podrazumevano

    Znam da sam smorio ali imam problem. ovo sto si mi zadnje napiso ja sam uspeo da nekako iskoristim ali mi izbacuje neku gresku !!!
    tamo na button1click

    procedure TForm1.Button1Click(Sender: TObject);
    begin
    //Drucken im Querformat
    PrintStringGrid(Grid, 'StringGrid Print Landscape', poLandscape);
    //Drucken im Hochformat
    PrintStringGrid(Grid, 'StringGrid Print Portrait', poPortrait);

    end;

    izbaci mi gresku:

    [Error] Unit1.pas(109): Undeclared identifier: 'Grid'

    i zamarkira:

    PrintStringGrid(Grid, 'StringGrid Print Landscape', poLandscape);

    Sto mu je?

    Hvala unapred!!!

  15. #15
    Primećen član
    Učlanjen
    15.02.2004.
    Lokacija
    Nis-New York
    Poruke
    572
    Reputaciona moć
    56

    Podrazumevano

    pa umesto Grid stavi ime TStringGrid komponente ciji sadrzaj stampas sta si ti mislio?

  16. #16
    crazy_zzr
    Guest

    Podrazumevano

    ma dileja !!! nisam ja to ni procito detaljno sve nego samo copy paste da ja vidim da li to radi kad sam ja sad sve to prelisto video sam sta se tu zbiva!!! HVALA TI BAS SI LIK !!! Da zivis negde bilize vodio bi te na pivo!!!

  17. #17
    Primećen član
    Učlanjen
    15.02.2004.
    Lokacija
    Nis-New York
    Poruke
    572
    Reputaciona moć
    56

    Podrazumevano

    no problem samo vezbaj

  18. #18
    crazy_zzr
    Guest

    Podrazumevano

    Samo jos nesto ja sam pokusavao ali mi nikako ne ide da smanjim duzinu strane odnosno papira. Kako to mogu da uradim ??!!

    Ja sam pokusavao da smanjim heder i futer ali se sve jos vise povecalo i pobrljavilo a posle sam nasao nesto kao:

    VertSize := Trunc(mmy) * 10;
    HorzSize := Trunc(mmx) * 10;

    i nerazumem sta je to tacno ali ne regulise duzinu strane!!!

    Ali ja mislim da bi ovo trebalo ali nece:
    Zeilen := (VertSize - HeaderSize - FooterSize) div ZeilenSize;

    znaci ja sam pokusao od toga u zagradi da oduzmem jos 100 ali neide !!!

    Da li mozes nekako da mi pomognes !!!

    Evo i celog koda ako se neseceas kako to izgleda

    unit Unit1;

    interface

    uses
    Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
    Dialogs,printers, StdCtrls, Grids;

    type
    TForm1 = class(TForm)
    Button1: TButton;
    StringGrid1: TStringGrid;
    Button2: TButton;
    // procedure PrintStringGrid1(stringgrid1: TStringGrid; Title: string ;Orientation: TPrinterOrientation);
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    private
    { Private declarations }
    // grid:tstringgrid;
    public
    { Public declarations }
    end;

    var
    Form1: TForm1;

    implementation

    {$R *.dfm}

    procedure PrintStringGrid(stringgrid1: TStringGrid; Title: string;
    Orientation: TPrinterOrientation);
    var
    P, I, J, YPos, XPos, HorzSize, VertSize: Integer;
    AnzSeiten, Seite, Zeilen, HeaderSize, FooterSize, ZeilenSize, FontHeight: Integer;
    mmx, mmy: Extended;
    Footer: string;
    begin
    //Kopfzeile, Fußzeile, Zeilenabstand, Schriftgröße festlegen
    HeaderSize := 100;
    FooterSize := 200;
    ZeilenSize := 36;
    FontHeight := 36;
    //Printer initializieren
    Printer.Orientation := Orientation;
    Printer.Title := Title;
    Printer.BeginDoc;
    //Druck auf mm einstellen
    mmx := GetDeviceCaps(Printer.Canvas.Handle, PHYSICALWIDTH) /
    GetDeviceCaps(Printer.Canvas.Handle, LOGPIXELSX) * 25.4;
    mmy := GetDeviceCaps(Printer.Canvas.Handle, PHYSICALHEIGHT) /
    GetDeviceCaps(Printer.Canvas.Handle, LOGPIXELSY) * 25.4;

    VertSize := Trunc(mmy) * 10;
    HorzSize := Trunc(mmx) * 10;
    SetMapMode(Printer.Canvas.Handle, MM_LOMETRIC);

    //Zeilenanzahl festlegen
    Zeilen := (VertSize - HeaderSize - FooterSize) div ZeilenSize;
    //Seitenanzahl ermitteln
    if stringgrid1.RowCount mod Zeilen <> 0 then
    AnzSeiten := stringgrid1.RowCount div Zeilen + 1
    else
    AnzSeiten := stringgrid1.RowCount div Zeilen;

    Seite := 1;
    //Grid Drucken
    for P := 1 to AnzSeiten do
    begin
    //Kopfzeile
    Printer.Canvas.Font.Height := 48;
    Printer.Canvas.TextOut((HorzSize div 2 - (Printer.Canvas.TextWidth(Title) div 2)),
    - 20,Title);
    Printer.Canvas.Pen.Width := 5;
    Printer.Canvas.MoveTo(0, - HeaderSize);
    Printer.Canvas.LineTo(HorzSize, - HeaderSize);
    //Fußzeile
    Printer.Canvas.MoveTo(0, - VertSize + FooterSize);
    Printer.Canvas.LineTo(HorzSize, - VertSize + FooterSize);
    Printer.Canvas.Font.Height := 36;
    Footer := 'strana: ' + IntToStr(Seite) + ' od ' + IntToStr(AnzSeiten);
    Printer.Canvas.TextOut((HorzSize div 2 - (Printer.Canvas.TextWidth(Footer) div 2)),
    - VertSize + 150,Footer);
    //Zeilen drucken
    Printer.Canvas.Font.Height := FontHeight;
    YPos := HeaderSize + 10;
    for I := 1 to Zeilen do
    begin
    if stringgrid1.RowCount >= I + (Seite - 1) * Zeilen then
    begin
    XPos := 0;
    for J := 0 to stringgrid1.ColCount - 1 do
    begin
    Printer.Canvas.TextOut(XPos, - YPos,
    stringgrid1.Cells[J, I + (Seite - 1) * Zeilen - 1]);
    XPos := XPos + stringgrid1.ColWidths[J] * 3;
    end;
    YPos := YPos + ZeilenSize;
    end;
    end;
    //Seite hinzufügen
    Inc(Seite);
    if Seite <= AnzSeiten then Printer.NewPage;
    end;
    Printer.EndDoc;
    end;
    procedure TForm1.Button1Click(Sender: TObject);
    begin
    PrintStringGrid(stringgrid1, 'pera zdera', poPortrait);

    end;

  19. #19
    Primećen član
    Učlanjen
    15.02.2004.
    Lokacija
    Nis-New York
    Poruke
    572
    Reputaciona moć
    56

    Podrazumevano

    On ti (bar ja mislim) sam podesava po papiru. Stavi jedan priter setup dialog pre stampanja da mozes da izaberes papir i on ce (valjda) da prilagodi tome.
    Javi sta je bilo.
    Pozdrav

  20. #20
    crazy zzr
    Guest

    Podrazumevano

    Citat Original postavio stormbringer
    On ti (bar ja mislim) sam podesava po papiru. Stavi jedan priter setup dialog pre stampanja da mozes da izaberes papir i on ce (valjda) da prilagodi tome.
    Javi sta je bilo.
    Pozdrav
    pa pokusacu pa cu ti javiti sta se desava!!! Hvala!!!

Slične teme

  1. Stampanje DVD-CD
    Autor cvetko_a u forumu Hardver
    Odgovora: 22
    Poslednja poruka: 28.08.2011., 10:32
  2. F1! Stampanje Delphi, ne rade mi procedure
    Autor Peruzzi u forumu Programiranje
    Odgovora: 3
    Poslednja poruka: 29.05.2007., 02:38
  3. štampanje
    Autor mzbrtel u forumu Softver
    Odgovora: 2
    Poslednja poruka: 24.03.2005., 19:21
  4. stampanje pdf-a
    Autor swen u forumu Softver
    Odgovora: 3
    Poslednja poruka: 18.02.2005., 16:56
  5. Stampanje
    Autor Sharp u forumu Programiranje
    Odgovora: 0
    Poslednja poruka: 18.02.2004., 16:33

Pravila za slanje poruka

  • Ne možete kreirati novu temu
  • Ne možete poslati odgovor
  • Ne možete dodati priloge
  • Ne možete prepraviti svoju poruku
  •