Troche dopisalem... moze niepotrzebnie, ale zawsze...
Nie wiem, czy o to chodzi, ale chyba masz na pierwszej stronie jakis tytul, swoje logo itp. a potem jedziesz z drukowaniem pliku tekstowego. Mialem cos takiego, tylko drukowalem linie z RichEdit. W moim przypadku rozwiazalem to tak, ze odnosilem sie nie tyle do ilosci lini na stronie(23, 40), ale do konca strony.
Tak wiec sproboj (jesli o to biega?) zamiast:
if Ctr > 23 then
begin
(cos tam, cos tam...)
end;
zastosowac:
if Ctr > (Printer.PageHeight - 100) then //gdy dojdzie do konca strony, to
begin
Printer.NewPage; //rozpocznie nastepna strone
//Ustaw wartosci poczatkowe!!!na nowej stronie
y:= ... //wartosc, gdzie chcesz zaczac pierwsza linie na nowej stronie
Ctr:=... //wyzerowany licznik (nie wiem jak to bedzie u ciebie, czy 1, czy 0?)
end; //wyskakuje stad i robi dalej petelke
end; //dla while not EOF... do
To "100" jest dla ustawienia jakiegos dolnego marginesu i oczywiscie mozesz tu wpisac inna wartosc, np. 200, 300 itd.
Acha, drukowanie lini ze zbioru tekstowego na pierwszej stronie, z tego co rozumiem, ma sie zaczac od jakiegos ustalonego y. Ta warotsc y z pierwszej strony okresl jeszcze przed petla "for", bo potem jak dojdziesz do nastepnej strony, to ta wartosc bedzie zmieniona na inna, ktora podasz po tym Printer.NewPage (to co napisalem w przykladzie kodu u gory)
Moze beda potrzebne jakies lekkie modyfikacje, ale generalnie powinno chodzic.