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