AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

String Grid drucken

Ein Thema von Crazymodder · begonnen am 2. Apr 2007 · letzter Beitrag vom 3. Apr 2007
Antwort Antwort
Crazymodder

Registriert seit: 28. Dez 2006
69 Beiträge
 
#1

String Grid drucken

  Alt 2. Apr 2007, 19:17
Hi alle hab nochmal ein kleines Problem:
Hab folgede Prozdeur zum drucken von String Grids gefunden Quelle: www.dsdt.info


Delphi-Quellcode:
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;
Naja klappt auch alles ganz gut nur Ich würde gerne das er auch die Linie mit druckt. Jetzt druckt er zwar alles aber ohne die tabelle. Und die Überschrift wprde ich auch gerne von StringGrid1 Landscape in was anderes ändern wäre sehr nett wenn mir jemand sagen könnte wie ich das am besten realiseiren kann.
Danke im Vorraus
Crazymodder
  Mit Zitat antworten Zitat
Blackheart

Registriert seit: 4. Mai 2005
846 Beiträge
 
Delphi 7 Enterprise
 
#2

Re: String Grid drucken

  Alt 2. Apr 2007, 19:31
Du solltest Dir mal mindestens die erwarteten Parameter der Procedure anschauen, dann ist schon deine halbe Frage beantwortet.
Man muss auch halbwegs wissen was man da macht.(Alles kann man nicht wissen...)
Blackheart
  Mit Zitat antworten Zitat
Crazymodder

Registriert seit: 28. Dez 2006
69 Beiträge
 
#3

Re: String Grid drucken

  Alt 2. Apr 2007, 19:47
Naja mit der Überschrift hab ich ja schon hinbekommen aber wie stellt man das ein das er die Linien mitdruckt?
  Mit Zitat antworten Zitat
boserPascal

Registriert seit: 4. Apr 2006
96 Beiträge
 
Delphi 5 Professional
 
#4

Re: String Grid drucken

  Alt 2. Apr 2007, 19:58
Indem du einen Kasten um den Text zeichnen lässt.
Stefan
  Mit Zitat antworten Zitat
Crazymodder

Registriert seit: 28. Dez 2006
69 Beiträge
 
#5

Re: String Grid drucken

  Alt 3. Apr 2007, 10:54
Aja könnte mir das jemand nochmal genauer erklären kasten zeichnen geht bestimmt mit canvas ist nur die Frage wie hehe. Also wäre über eure Hilfe sehr erfreut.
Danke im Vorraus
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:56 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz