Einzelnen Beitrag anzeigen

Delbor

Registriert seit: 8. Okt 2006
Ort: St.Gallen/Schweiz
1.186 Beiträge
 
Delphi 11 Alexandria
 
#1

TObjectlist und der Seitenwechsel

  Alt 28. Mai 2019, 15:05
Hi zusammen

Um PDFs anzuzeigen, gehe ich erstmal so vor:

Delphi-Quellcode:
procedure TOpenFileFrame.TVFilesExplorerMouseUp(Sender: TObject;
  Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
  var AnItem: TTreeNode; ATextSelection :String;
begin
  AnItem := TVFilesExplorer.GetNodeAt(X, Y);
  if not AnItem.HasChildren then
  begin
    Self.FFileName := AnItem.Text;
    ATextSelection := PNameRec(AnItem.Data)^.RealName;
    if Assigned(OnTextSelectionEvent) then
      OnTextSelectionEvent(Sender,ATextSelection);
  end;
end;
Ich verwende die TFilesearcher-Komponente von DeddyH - den Pfad der im Treeview selektierten Datei gebe ich per Event weiter.
Delphi-Quellcode:
procedure TFileSearchContainerFrame.DoSelectTextEvent(Sender: TObject; const ATextSelection: String);
begin
  FTextSelection := ATextSelection;
  Self.Edit2.Text := ATextSelection;
  if ExtractFileExt(ATextSelection) = AnsiLowerCase('.pdf') then
  begin
    HomeOfficerMainForm.RogersPdfFrame1.PdfFileName := ATextSelection;
    HomeOfficerMainForm.RogersPdfFrame1.PdfViewCreate2;
  end;
Das property RogersPdfFrame1.PdfFileName besitzt einen Setter:
Delphi-Quellcode:
procedure TRogersPdfFrame.SetPdfFileName(Value: String);
begin
  if FPdfFileName <> Value then
  begin
    FPdfFileName := Value;
    if FPdfList.Count > 0 then
      DeletePdfListObjects;
  end;
end;
In diesem Setter sollen nun die Items der Objectliste zerstört werden, wenn der Filename geändert wird.
Zu sagen ist noch: ich arbeite mit den PDF-Komponenten von Winsoft. Diese zeigen das PDF an(bzw. es kann darauf zugegriffen werden), wenn das Property Active true ist - Der Filename kann nur geändert werden, wenn Activ false ist.
DeletePdfListObjects schliesslich:
Delphi-Quellcode:
procedure TRogersPdfFrame.DeletePdfListObjects;
var
  i: Integer;
begin
  for i := 0 to FPdfList.Count - 1 do
  begin
    FPdfList.Items[i].Free;
  end;
end;
Wenn ich nun starte, kann ich mir problemlos ein Pdf anzeigen. Die Probleme beginnen, wenn ich eine anderDatei auswähle. Wenn Count der Liste > 0 ist, wird obige Prozedur aufgerufen, löst aber bei Free eine Exception aus:
Zitat:
Benachrichtigung über Debugger-Exception
---------------------------
Im Projekt HomeOfficerMainProject.exe ist eine Exception der Klasse EInvalidPointer mit der Meldung 'Ungültige Zeigeroperation' aufgetreten.
---------------------------
Dass Free eine Exception irritiertmich doch sehr. Was mache ich falsch?

Gruss
Delbor
Roger
Man muss und kann nicht alles wissen - man muss nur wissen, wo es steht.
Frei nach Albert Einstein
http://roase.ch
  Mit Zitat antworten Zitat