Die Listbox mit farbigen Zeilen ist sicher Ownerdrawn, die Farbe hast Du möglicherweise in den Objects hinterlegt?
Ich würde so vorgehen, den gegf. nötigen Seitenwechsel habe ich hier noch nicht berücksichtigt, sollte aber auch für Dich kein Problem sein.
Delphi-Quellcode:
var
i:Integer;
s:String;
r:Trect;
begin
r.left := 100;
r.Right := Printer.PageWidth - 100;
r.Top := 100;
Printer.BeginDoc;
for I := 0 to Listbox1.Items.Count - 1 do
begin
// Farbe aus Objects
Printer.Canvas.Font.Color := Integer(Listbox1.items.Objects[i]);
s := Listbox1.items[i];
// benötigten Platz mit Zeilenumbruch berechnen
Printer.Canvas.TextRect(r,s,[tfWordBreak,tfCalcRect]);
Printer.Canvas.TextRect(r,s,[tfWordBreak]);
// Top für nächste Zeile auf Bottom der letzen Zeile setzen
r.Top := r.Bottom;
end;
Printer.EndDoc;
end;