AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Doppelte Buchseiten aus einer Liste darstellen
Thema durchsuchen
Ansicht
Themen-Optionen

Doppelte Buchseiten aus einer Liste darstellen

Ein Thema von Luckie · begonnen am 4. Mai 2007 · letzter Beitrag vom 4. Mai 2007
Antwort Antwort
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#1

Doppelte Buchseiten aus einer Liste darstellen

  Alt 4. Mai 2007, 14:09
Ich habe eine Liste mit Buchseite:
Code:
Page0
Page1
Page2
Page3
Page4
PageN
Diese sollen jetzt als Doppelseiten dargestellt werden. Problem ist, dass die erste Seite (Page0) keine linke Seite hat, wie das nun mal bei einem Buch so ist. In einer Listbox steht es entsprechend drinne:
Code:
Seite 1
Seiten 2 - 3
Seiten 4 - 5
Seiten 6 - 7
Das heißt, klicke ich auf den ersten Eintrag, soll nur die rechte Seite dargestellt werden. Der Methode übergebe ich immer den Index der linken Seiten. Die rechte Seite ist dann immer IndexLinkeSeite + 1.

Bisher versuche ich es so:
Delphi-Quellcode:
procedure TFotoBook.DisplayDoublePage(PageIndex: Integer);
begin
  if (PageIndex <> 0) and (PageIndex <> -1) then // Seite ist nicht erste Seite, also anzeigen
  begin
    if Assigned(LeftPage) then
      LeftPage.Visible := False;
    LeftPage := FPageCollection.Items[PageIndex];
    LeftPage.Left := PageParent.Width div 2 - LeftPage.Width - PAGEGAP div 2;
    LeftPage.Top := PageParent.Height div 2 - LeftPage.Height div 2;
    LeftPage.Visible := True;
  end;

  if Assigned(RightPage) then
    RightPage.Visible := False;
  if PageIndex = -1 then
    PageIndex := 0
  else
    PageIndex := PageIndex + 1;
  RightPage := FPageCollection.Items[PageIndex];
  RightPage.Left := PageParent.Width div 2 + PAGEGAP div 2;
  RightPage.Top := PageParent.Height div 2 - RightPage.Height div 2;
  RightPage.Visible := True;
end;
Dies hat aber zur Folge, dass es nicht richtig funktioniert. Wenn ich folgende Liste habe:
Code:
Seite 1
Seite 2 - 3
Und ich wähle den zweiten Eintrag aus, zeigt er mir nur eine Seite an. Erst wenn ich zum zweitenmal auf den Eintrag klicke, zeigt er mir beide an. Wo ist da mein Denkfehler? Irgendwie hab eich auch das Gefühl, als wenn ich zu kompliziert denke.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#2

Re: Doppelte Buchseiten aus einer Liste darstellen

  Alt 4. Mai 2007, 14:23
Hallo Michael,

wenn ich deinen Code richtig interpretiere, dann würde ich ihn eher so schreiben:

Delphi-Quellcode:
procedure TForm1.DisplayDoublePage(PageIndex: Integer);
begin
  if Assigned(LeftPage) then
    LeftPage.Visible := False;
  if PageIndex < 0
    then LeftPage := nil
    else LeftPage := FPageCollection.Items[PageIndex];
  if Assigned(LeftPage) then
  begin
    LeftPage.Left := PageParent.Width div 2 - LeftPage.Width - PAGEGAP div 2;
    LeftPage.Top := PageParent.Height div 2 - LeftPage.Height div 2;
    LeftPage.Visible := True;
  end;

  Inc(PageIndex);

  if Assigned(RightPage) then
    RightPage.Visible := False;
  if PageIndex < FPageCollection.Count
    then RightPage := FPageCollection.Items[PageIndex]
    else RightPage := nil;
  if Assigned(RightPage) then
  begin
    RightPage.Left := PageParent.Width div 2 + PAGEGAP div 2;
    RightPage.Top := PageParent.Height div 2 - RightPage.Height div 2;
    RightPage.Visible := True;
  end;
end;
Vielleicht ist der Fehler dann auch schon weg...

Freundliche Grüße
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#3

Re: Doppelte Buchseiten aus einer Liste darstellen

  Alt 4. Mai 2007, 14:28
Danke für deine Mühe, aber das hat leider keine Auswirkungen auf das Verhalten.

Ich habe festgestellt, dass wenn Seite eins angezeigt wird und ich auf die Seiten 2 - 3 klicke, der Code zwar ausgeführt wird für die Linke Seite, aber sie nicht angezeigt wird.

So funktioniert es:
Delphi-Quellcode:
procedure TFotoBook.DisplayDoublePage(PageIndex: Integer);
begin
  if (not Odd(PageIndex)) and (PageIndex <> 0) then
    Inc(PageIndex);
  // Alles unsichtbar machen, sonst funktio0niert Update nicht
  if Assigned(LeftPage) then
    LeftPage.Visible := False;
  if Assigned(RightPage) then
    RightPage.Visible := False;

  if (PageIndex = 0) or (PageIndex = -1) then
    LeftPage := nil
  else
  begin
    LeftPage := FPageCollection.Items[PageIndex];
    LeftPage.Visible := False;
  end;
  if Assigned(LeftPage) then
  begin
    ShowMessage('Linke Seite anzeigen');
    LeftPage.Left := PageParent.Width div 2 - LeftPage.Width - PAGEGAP div 2;
    LeftPage.Top := PageParent.Height div 2 - LeftPage.Height div 2;
    LeftPage.Visible := True;
  end;

  if (PageIndex > 0) and not (FpageCollection.Count < 0) then
    Inc(PageIndex);

  if PageIndex < FPageCollection.Count then
  begin
    //if (PageIndex > 0) and not (FpageCollection.Count < 0) then
// Inc(PageIndex);
    RightPage := FPageCollection.Items[PageIndex];
  end
  else
    RightPage := nil;
  if Assigned(RightPage) then
  begin
    RightPage.Visible := False;
    ShowMessage('Rechte Seite anzeigen');
    RightPage.Left := PageParent.Width div 2 + PAGEGAP div 2;
    RightPage.Top := PageParent.Height div 2 - RightPage.Height div 2;
    RightPage.Visible := True;
  end;
end;
Bis auf wenn die erste Seite erzeugt wird, dann bekomme ich ein List index out of bounds(-1).
Ich habe gleich ein Knoten im Hirn!
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#4

Re: Doppelte Buchseiten aus einer Liste darstellen

  Alt 4. Mai 2007, 20:02
Hallo Michael,

folgende Fragen halte ich für zielführend:

Welchen Wertebereich hat der Parameter PageIndex?
Ich ging davon aus, dass der Wertebereich [-1 .. FPageCollection.Count-2] ist.

Welchen Typ haben LeftPage und RightPage bzw. die Items der FPageCollection?
Daraus ergibt sich dann für mich, ob eine einfache Zuweisung oder ein Assign() notwendig ist.

Unabhängig davon kann ich meine Code-Zeilen durch eine zusätzliche Zähl-Schleife nochmal halbieren, da mein Code eigentlich redundant ist. Die Dimensionierung der beiden Anzeigeelemente kann man bestimmt auch an einer anderen Stelle sinnvoller erledigen, oder?

Freundliche Grüße
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#5

Re: Doppelte Buchseiten aus einer Liste darstellen

  Alt 4. Mai 2007, 20:50
Ich habe es jetzt hinbekommen. Ich poste am Montag den Code. Aber zu deinen Fragen: LeftPage und RightPage sind sowas wie Images. Der Wertebereich geht von 0 bis FPageCollection.Count - 1. Da ich mich irgendwann mal entshieden habe immer den Index der linkn Seite anzugeben, um zu bestimmen, welches Seitenpaar angezeigt werden soll und die erste Seite ja keine linke Seite hat, kann es schon passieren, dass -1 übergeben wird.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:06 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz