Der Titel ist wohl nicht der beste, aber das Problem ist es auch nicht.
Ich habe eine Liste mit Seiten. Diese Liste kann ich auf zwei Arten und Weisen darstellen: Einmal jede Seite einzeln und einmal wie ein aufgeschlagenes Buch als Doppelseite. Damit man die Seiten auswählen kann, werden sie in einer Listbox eingetragen. Bei der Einzelseitendarstellung sähe das so aus:
Code:
Seite 1
Seite 2
Seite 3
Seite 4
Bei der Doppelseitendarstellung sollte das so aussehen:
Code:
Seiten 1 - 2
Seiten 3 - 4
OK, das ist also die Aufgabe. Nebenbedingung: Die Methode für die Beschriftung soll alleine entscheiden wie der Beschriftungstext aussehen soll.
Delphi-Quellcode:
function TFotoBook.ListEntryString(PageIndex: Integer): WideString;
begin
case Self.DesignLayout of
dlSinglePage:
begin
Result := WideFormat(rsListEntryStrSinglePage, [PageIndex]);
end;
dlDoublePage:
begin
Result := WideFormat(rsListEntryStrDblPage, [PageIndex div 2, PageIndex div 2 + 1]);
end;
end;
end;
Aufruf:
Delphi-Quellcode:
for i := 0 to FotoBook.PageCollection.Count - 1 do
begin
ListBox1.Items.Add(FotoBook.ListEntryString(i));
end;
Sin ist der, dass der Benutzer der Klasse sich selber um nichts mehr kümmern muss. Allerdings, wie man sehen kann, darf bei dlDoublePage die Schleife nur bis zu Hälfte durchlaufen werden. Und genau das ist mein Problem.
Lösungen oder Tipps, wie man das machen könnte, sind willkommen.
OK, habe jetzt eine andere Lösung: Ich erstelle die StringListe für die Listbox selber:
Delphi-Quellcode:
procedure TFotoBook.ListEntryStrings(ListEntries: TTntStrings);
var
i : Integer;
begin
case DesignLayout of
dlSinglePage:
begin
for i := 0 to FPageCollection.Count - 1 do
begin
ListEntries.Add(WideFormat(rsListEntryStrSinglePage, [i + 1]));
end;
end;
dlDoublePage:
begin
for i := 0 to FPageCollection.Count - 1 do
begin
if i = 0 then
ListEntries.Add(WideFormat(rsListEntryStrSinglePage, [1]));
if Odd(i) then
ListEntries.Add(WideFormat(rsListEntryStrDblPage, [i + 1, i + 2]))
end;
end;
end;
end;
Gelöst.