Thema: Delphi Tlistview drucken

Einzelnen Beitrag anzeigen

Daniel B
(Gast)

n/a Beiträge
 
#2
  Alt 27. Feb 2003, 22:14
Hallo und willkommen im Forum!

Schau Dir mal folgende sachen in der OH an:
AssignFile, WriteLn, CloseFile, AssignPrn.
Du musst einfach eine Schleife bauen, bezogen auf die Anzahl der Items in der LV.
Delphi-Quellcode:
for i := 0 to ListView1.Items.Count -1 do
begin
  //Hier dann den Code zum schreiben.
end;
Vor der Schleife öffnest Du die Datei zum Drucken.
Also zwischen dem begin und end brauchst Du einfach diese WriteLn.
Hier mal ein Beispiel aus einem Programm von mir.
Delphi-Quellcode:
procedure TMainFormMC2004.DruckenErweitertClick(Sender: TObject);
//Daten Drucken; Im erweiterten Format
var
  tf: TextFile; //tf = Variable zum Datei Schreiben
  pt: TextFile; //pt = Variable zum Datei Drucken
  p: string; //Stringvariable für die Druckdatei
  s, t, r, i, n, g: string; //String für LOKS
  a, b, c: string; //Strings für FUNKTIONEN
  iLok, iFkt{, iWei, iWeiSch, iWeiTri, iMtr, iMtrLok}: integer;
begin
  if PrintDialog.Execute then
  begin
    AssignFile(tf, ExtractFilePath(ParamStr(0)) + 'DatenErweitert.mce');
    ReWrite(tf); //Datei zum Schreiben Öffnen
    WriteLn(tf, '--------------------- LOKS ---------------------');
    WriteLn(tf, '------------------------------------------------');
    WriteLn(tf, ' ID: Name: Adr: Träg: Beschl: Verzög: ');
    WriteLn(tf, '------------------------------------------------');
    for iLok := 0 to ListViewKKLok.Items.Count -1 do
    begin
      s := ListViewKKLok.Items.Item[iLok].Caption;
      t := ListViewKKLok.Items.Item[iLok].SubItems[0];
      r := ListViewKKLok.Items.Item[iLok].SubItems[1];
      i := ListViewKKLok.Items.Item[iLok].SubItems[2];
      n := ListViewKKLok.Items.Item[iLok].SubItems[3];
      g := ListViewKKLok.Items.Item[iLok].SubItems[4];
      while Length(s) < 5 do //Falls die ID weniger als 5 Stellen hat
      begin
        s := s + ' '; //Mit Leerstellen füllen
      end;
      while Length(t) < 10 do //Falls der Name weniger als 10 Stellen hat
      begin
        t := t + ' '; //Mit Leerstellen füllen
      end;
      while Length(r) < 3 do //Falls die Adresse weniger als 3 Stellen hat
      begin
        r := r + ' '; //Mit Leerstellen füllen
      end;
      WriteLn(tf, ' ' + s + ' ' + t + ' ' + r + ' ' + i + ' ' + n + ' ' + g);
    end;
    Writeln(tf); //2 Leerzeilen zur Trennung
    Writeln(tf); //zwischen Loks und Funktionen
    WriteLn(tf, '------------------ FUNKTIONEN ------------------');
    WriteLn(tf, '------------------------------------------------');
    WriteLn(tf, ' ID: Name: Adr: ');
    WriteLn(tf, '------------------------------------------------');
    for iFkt := 0 to ListViewKKFkt.Items.Count -1 do
    begin
      a := ListViewKKFkt.Items.Item[iFkt].Caption;
      b := ListViewKKFkt.Items.Item[iFkt].SubItems[0];
      c := ListViewKKFkt.Items.Item[iFkt].SubItems[1];
      while Length(a) < 5 do //Falls die ID weniger als 5 Stellen hat
      begin
        a := a + ' '; //Mit Leerstellen füllen
      end;
      while Length(b) < 10 do //Falls der Name weniger als 10 Stellen hat
      begin
        b := b + ' '; //Mit Leerstellen füllen
      end;
      while Length(c) < 3 do //Falls die Adresse weniger als 3 Stellen hat
      begin
        c := c + ' '; //Mit Leerstellen füllen
      end;
      WriteLn(tf, ' ' + a + ' ' + b + ' ' + c);
    end;
    Writeln(tf);
    Writeln(tf);
    Reset(tf); //Datei zum Lesen Öffnen
    AssignPrn(pt); //Drucker "Öffnen"
    Printer.Canvas.Font.Name := 'Courier New'; //Schriftart setzen
    Printer.Canvas.Font.Size := 10; //Schriftgrösse setzen
    ReWrite(pt); //Druckdatei zum Schreiben Öffnen
    while not EOF(tf) do //Falls Dateiende noch nicht erreicht
    begin
      ReadLn(tf, p); //Lies Zeile aus der Datei
      WriteLn(pt, p); //Schreib Zeile zum Drucker
    end;
  CloseFile(pt); //Schliesse Druckdatei
  CloseFile(tf); //Schliesse Datei
  end;
  Check;
end;
So hat man alle Items und SubItems formatiert auf dem Blatt. Du musst halt die ganzen Namen der ListViews anpassen.

Grüsse, Daniel
  Mit Zitat antworten Zitat