![]() |
Re: Zwei Datensätze mit for-Schleife auf eine Seite drucken
Ach so. Gut. Verstanden.
Aber damit stimmt noch was nicht. Das ist irgendwie nur jeder zweite oder dritte Datensatz. |
Re: Zwei Datensätze mit for-Schleife auf eine Seite drucken
Zitat:
Hier der (getestete) C# Quellcode:
Code:
for (int i = 0; i < (ContactCount + SetsPerPage - 1) / SetsPerPage; i++)
{ for (int j = 0; j < SetsPerPage; j++) { if ((i * SetsPerPage + j) == ContactCount) break; listBox1.Items.Add(string.Format("Index: {0} ; Seite: {1} ; Nummer {2}", i * SetsPerPage + j, i + 1, j + 1)); } if (i != (ContactCount - 1) / SetsPerPage) listBox1.Items.Add("--- New Page ---"); } |
Re: Zwei Datensätze mit for-Schleife auf eine Seite drucken
So passt es jetzt:
Delphi-Quellcode:
Nur fehlt der letzte Datensatz. Die Seite wird erstellt aber der Datensatz fehlt.
procedure TPrintContacts.PrintAllContacts;
var i: Integer; begin Printer.Title := 'Adressdatenbank - Kontaktliste drucken'; Printer.Orientation := poPortrait; Printer.BeginDoc; FCanvas := Printer.Canvas; SetMapMode(Printer.Canvas.Handle, MM_LOMETRIC); FPaperWidth := GetDeviceCaps(Printer.Canvas.Handle, HORZSIZE); FPaperHeight := GetDeviceCaps(Printer.Canvas.Handle, VERTSIZE); for i := 0 to (FContactList.Count - 1) div CONTACTS_PER_PAGE do begin PrintAllContactsHeader; PrintAllContactsFooter(Printer.PageNumber); PrintPageContacts(i); NewPageIfNeeded(i); end; Printer.EndDoc; end; procedure TPrintContacts.PrintPageContacts(PageIndex: Integer); var j: Integer; begin for j := 0 to CONTACTS_PER_PAGE - 1 do begin if (PageIndex * CONTACTS_PER_PAGE + j) = FContactList.Count - 1 then break; PrintAllSingleContact(ContactPosition(j), FContactList.Items[PageIndex * CONTACTS_PER_PAGE + j]); end; end; function TPrintContacts.ContactPosition(Index: Integer): Integer; var Parts: Integer; begin Parts := (FPaperHeight*10 - TOPMARGIN - BOTTOMMARGIN) div CONTACTS_PER_PAGE; Result := -(Parts * Index) + TOP_FIRST_DETAIL_LINE; end; procedure TPrintContacts.NewPageIfNeeded(PageIndex: Integer); begin if PageIndex <> (FContactList.Count - 1) div CONTACTS_PER_PAGE then Printer.NewPage; end; (Ich habe es mal etwas in einzelne Routinen zerlegt, dann wird es übersichtlicher.) |
Re: Zwei Datensätze mit for-Schleife auf eine Seite drucken
Zitat:
Delphi-Quellcode:
(5 - 1) div 3 = 4 div 3 = 1
(FContactList.Count - 1) div CONTACTS_PER_PAGE
Also muss es so lauten:
Delphi-Quellcode:
Ceil(FContactList.Count / CONTACTS_PER_PAGE)
|
Re: Zwei Datensätze mit for-Schleife auf eine Seite drucken
Du brichst zu früh ab:
Delphi-Quellcode:
So isses richtig:
if (PageIndex * CONTACTS_PER_PAGE + j) = FContactList.Count - 1 then break;
Delphi-Quellcode:
*g*
if (PageIndex * CONTACTS_PER_PAGE + j) = FContactList.Count then break;
@jänicke: Das passt schon. (5 - 1) div 3 = 4 div 3 = 1 also for i := 0 to 1 do macht Seite 0 und Seite 1 = 2 Seiten ;) |
Re: Zwei Datensätze mit for-Schleife auf eine Seite drucken
@jfheins: Die -1 habe ich schon gar nicht mehr gesehen.
Besten Dank. Jetzt haben wir es geschafft. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:27 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz