Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Abbrevia und AtViewer wollen nicht mit TMemoryStream (https://www.delphipraxis.net/175542-abbrevia-und-atviewer-wollen-nicht-mit-tmemorystream.html)

Alter Mann 29. Jun 2013 17:37

Abbrevia und AtViewer wollen nicht mit TMemoryStream
 
Hallo Gemeinde,

ich habe mal wieder so ein dummes Problem.

Ich möchte den Inhalt im ATViewer anzeigen.
Nutze ich dazu ein MemoryStream bleibt zeigt der ATViewer nix an(Fenster wird Dunkelgrau):
Delphi-Quellcode:
procedure TMailForm.ShowMemFile(ArchivName : String);
var
  MS : TMemoryStream;
  UZ : TAbUnZipper;
begin
  MS := TMemoryStream.Create;
  try
      UZ := TAbUnZipper.Create(Self);
      try
        UZ.Stream := Stream;
        UZ.ExtractToStream(ConfirmFileName(ArchivName), MS);
        MS.Position := 0;
        ShowContent(MS, vmodeMedia); // <-- Problem?
      finally
        UZ.Free;
      end;
  finally
    MS.Free;
  end;
end;
Delphi-Quellcode:
procedure TMailForm.ShowContent(aStream : TStream; AMode: TATViewerMode);
begin
  ATViewer.OpenStream(aStream, aMode);
end;
Nutze ich dagegen den FileStream, futz es:
Delphi-Quellcode:
procedure TMailForm.ShowFileText(aText : String);
var
  FS : TFileStream;
  FN : String;
begin
  FN := GetTempFileName('temp.html');
  FS := TFileStream.Create(FN, fmCreate, fmShareDenyWrite);
  try
    FS.Write(Pointer(aText)^, Length(aText));
    FS.Position := 0;
  finally
    FS.Free;
  end;
  ATViewer.Open(FN);
end;
Meine Vermutung, es hängt mit
Delphi-Quellcode:
AMode: TATViewerMode
zusammen.

Hat jemand einen kleinen Hinweis?

Ach so, den Typ(?) der Datei kenne ich, in Form von:
Code:
application/pdf
.

Ich Danke Euch und wünsche ein friedsammes Wochenende:wink:

cookie22 29. Jun 2013 18:02

AW: Abbrevia und AtViewer wollen nicht mit TMemoryStream
 
Könnte auch daran liegen, dass der PDF Reader, welcher ja letzt endlich dein Dokument anzeigen soll, den Stream nicht frisst. Warum entpackst du nicht einfach das Dokument temporär, zeigst es an und löscht es dann wieder. Das funzt auf jeden Fall.

jaenicke 29. Jun 2013 20:11

AW: Abbrevia und AtViewer wollen nicht mit TMemoryStream
 
Ich sehe beim ATViewer keinerlei Hinweis, dass er PDFs unterstützt.

Bei vmodeMedia werden intern nur Bild- und Multimediadateierweiterungen aus Open dafür benutzt, wenn dort die Dateierweiterungen analysiert werden. Die Beschreibung in der Hilfe:
Zitat:

Multimedia: all file types supported by MS Windows Media Player: AVI MPEG WMV MP3...
File is shown using WMP ActiveX control.
Wieso sollte der Windows Media Player PDFs darstellen können?!

Am nächsten kommt noch Internet oder Plugins als Typ... evtl. geht das damit...
Zitat:

Internet: all file types supported by MS Internet Explorer: HTML XML DOC XLS...
File is shown using MSIE ActiveX control

Plugins: all files supported by Total Commander Lister plugins.

cookie22 29. Jun 2013 23:24

AW: Abbrevia und AtViewer wollen nicht mit TMemoryStream
 
Zitat:

Zitat von jaenicke (Beitrag 1220084)
Ich sehe beim ATViewer keinerlei Hinweis, dass er PDFs unterstützt

Doch das tut er, wenn der Adobe Reader installiert ist.

jaenicke 30. Jun 2013 08:27

AW: Abbrevia und AtViewer wollen nicht mit TMemoryStream
 
Aber wohl kaum mit dem Windows Media Player Control, das hier ja als Typ angegeben wurde... Ich habe ja geschrieben, wenn, dann vermute ich mal, dass das über die beiden anderen Typen geht. Der Weg über das Internet Explorer Control ist ja allgemein bekannt für PDFs.

cookie22 30. Jun 2013 09:32

AW: Abbrevia und AtViewer wollen nicht mit TMemoryStream
 
Hab länger nicht damit gearbeitet, aber soweit ich mich erinnere ist vmodeMedia richtig. Damit öffnet man auch Word oder Open Office Dokumente, das bezieht sich nicht nur auf den Media Player.

jaenicke 30. Jun 2013 11:29

AW: Abbrevia und AtViewer wollen nicht mit TMemoryStream
 
Ich habe es gerade selbst ausprobiert. :roll:

Wenn man Open mit einer PDF Datei aufruft, wird der Typ als vmodeWeb erkannt und ein TWebBrowser wird benutzt um diese Datei per Navigate aufzurufen. Ganz wie ich es vermutet hatte.

Dass das nicht mit einem Stream geht, ist klar.

Benutzt man OpenStream wird wie man mit einem Blick in den Quelltext sieht nur ein Event wie OnLoadWebStream für Typ Web oder OnLoadImageStream für Typ Media aufgerufen, in dem man selbst den Streaminhalt in den Viewer bringen soll...

cookie22 30. Jun 2013 20:38

AW: Abbrevia und AtViewer wollen nicht mit TMemoryStream
 
Sorry, dann hab ich mich vertan.


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:24 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