Ich habe einen Ergebnislister, der ähnlich wie Adobe pdf Reader Seitenminiaturen anzeigt. Im Beispiel habe ich 316 Seiten, was 316 Images mit Bitmaps 210 x 279 (183 kB) bedeutet.
Das Problem ist, daß nach 188 Images Schluß ist und das Onklick nur bis Seite 94 funktioniert.
Ist das ein Speicherproblem und /oder kann eine Scrollbox nicht ca. 100.000 Pixel hoch sein?
Erzeugen tue ich folgendermaßen:
Delphi-Quellcode:
procedure TViewerForm.FormCreate(Sender: TObject);
var
I, ATop: integer;
AImage: TImage;
ALabel: TLabel;
begin
FFileName := TStrUtils.ExcludeQuotes(ParamStr(1));
FViewer := TViewer.Create(FFileName);
FPlot.CanvasStyle := csDefault;
SetBounds(50, 50, Min(FPlot.CanvasWidth(210 + 10) + ScrollBox.Left, Screen.WorkAreaWidth - 100),
Min(FPlot.CanvasHeight(297), Screen.WorkAreaHeight - 100));
FStretch := FPlot.ppMM / FViewer.ppMM;
FZoom := 100 * FStretch;
PaintBox.Width := Round(FStretch * FViewer.Width);
PaintBox.Height := Round(FStretch * FViewer.Height);
ThumbPanel.Height := FViewer.Count * (297 + 20 + 30) + 20; // zzgl. je Rand oben/unten;
ATop := 20;
for I := 0 to FViewer.Count - 1 do
begin
AImage := TImage.Create(ThumbPanel);
AImage.Name := Format('Image%d', [I]);
AImage.Parent := ThumbPanel;
AImage.Tag := I;
AImage.Left := 10;
AImage.Width := 210;
AImage.Height := 297;
AImage.Top := ATop;
FViewer.LoadThumbFromFile(I);
AImage.Picture.Assign(FViewer.Thumb);
AImage.Cursor := crHandPoint;
AImage.OnClick := LabelClick;
ALabel := TLabel.Create(ThumbPanel);
ALabel.Name := Format('Label%d', [I]);
ALabel.Parent := ThumbPanel;
ALabel.Tag := I;
ALabel.Font.Name := 'Segoe UI';
ALabel.Font.Size := 8;
ALabel.Font.Color := clBlack;
ALabel.Font.Style := [fsUnderline];
ALabel.Caption := IntToStr(I + 1);
ALabel.Top := AImage.Top + AImage.Height + 10;
ALabel.Left := 10 + (AImage.Width - ALabel.Width) div 2;
ALabel.Cursor := crHandPoint;
ALabel.OnClick := LabelClick;
Inc(ATop, 297 + 20 + 30);
end;
end;