Drukowanie StringGrida w win98 ;(

0

Na wstępie witam wszystkich. Być może tu dostanę odpowiedź na mój problem. Chodzi mi o wydrukowanie StringGrida który ma ponad 100 wierszy. Korzystam z gotowej porcedury znalezionej na torry.net, o to ona:

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;

No i pod windowsem XP i drukarką na USB (Lexmark605, jakiś Samsung i HP) drukuje mi wszystko pięknie ładnie na kilku stronach, ale już na win98 i drukarce pod LPT (Canon BJ-200, HP LJ L6) już nie :( Tzn drukuje tyle ile wejdzie na jedną stronę, a na drugiej kartce drukuje tylko małą czcionką tytuł. Czy ktoś z ludzi dysponujących o wiele większą wiedzą wie jak to rozwiązać? Bo ja Delphi znam tylko z grubsza. A koniecznie muszę ten problem rozwiązać.

Z góry dziękuję i pozdrawiam.

0

Może musisz jeszcze powiedzieć drukarce że robisz drugą stronę
printer.NewPage;


 printer.NewPage;
   // STRONA 2  ******************************************************************
  Printer.Canvas.TextOut(200,200,'  '+ DateToStr(Date)+'         ' +TimeToStr(GetTime)+
  '                Razem worków = '+ edit2.text +'        Razem sztuk = '+ edit3.text +
   '             Strona 2'  );
   //Tutaj rysuję kratki
  with Printer do
  begin
   pozycja:=400 ;
   for i := 0 to (Ilosc_wierszy + 2 )  do
   begin  //wiersze
    Canvas.MoveTo(200, pozycja); // ustaw kursor we wlasciwym miejscu
    Canvas.LineTo(Printer.Pagewidth - 200,pozycja ); // rysuj linie
    pozycja:= 400 + (i * (lineHeight)) ;
   end;
 itd..

Pozdr AS

0

No właśnie informacja dla drukarki o nowej stronie w tej funkcji już jest. Tylko ja obstawiam, że przy pobieraniu wielkości strony jest jakiś problem :-/ Nie mam pojęcia jak to zrobić.

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