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