Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Prism TStream nach TIdStream 'casten' (https://www.delphipraxis.net/68802-tstream-nach-tidstream-casten.html)

gluglu 5. Mai 2006 16:03


TStream nach TIdStream 'casten'
 
Ich habe probleme mit Indy10 und die SaveToFile oder SaveToStream methode unter Delphi 2006 VCL.NET mit umlauten.

Beim nachsuchen habe ich über eine neue Klasse TIdStream erfahren. Dort steht dann :
Zitat:

TIdStream is often used to cast a TStream instance to TIdStream to allow access to the additional methods for stream-based input and output.
Wie mache ich so etwas ? Ich möchte praktisch die SaveToFile methode des Streams benutzen.

Khabarakh 5. Mai 2006 16:20

Re: TStream nach TIdStream 'casten'
 
Ich kann mir nicht vorstellen, wie das unter .Net funktionieren sollte :gruebel: . Da müsste der Compiler die CLR schon ziemlich aufs Kreuz legen.

gluglu 5. Mai 2006 16:23

Re: TStream nach TIdStream 'casten'
 
Wie kann ich dann TIdStream benutzen unter Delphi 2006 VCL.NET ?

gluglu 5. Mai 2006 16:29

Re: TStream nach TIdStream 'casten'
 
Zitat:

procedure SaveToStream(AStream: TIdStream, const AHeadersOnly: Boolean = False);

AStream is a TIdStream descendant and represents the destination that will be used to write values in the message instance. AStream can be any TStream descendant suitable for use as the output stream in a TIdIOHandlerStream instance.
Wie bekomme ich so etwas hin ?

Ich kann nicht z.B. f := TIdStream.Create('FileName', fmCreate) benutzen, obwohl ich im Uses dir IdStream Datei mit reingebracht habe.

Khabarakh 5. Mai 2006 16:39

Re: TStream nach TIdStream 'casten'
 
Zitat:

Zitat von gluglu
f := TIdStream.Create('FileName', fmCreate)

Kurz gefasst: Hä? Es geht doch gerade darum, keine Instanz von TIdStream zu erstellen, sondern einen anderen Stream zu casten, was die CLR nicht zulassen wird.
Eine Fehlermeldung wäre aber auch nicht schlecht :roll: .

gluglu 5. Mai 2006 16:50

Re: TStream nach TIdStream 'casten'
 
Folgendes gefunden :

unter Uses muss IdObjs stehen (anstatt IdStream).

Dann mache ich folgendes :
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  f : TIdStream;
begin
  if IdPOP31.Connected then IdPOP31.Disconnect;
  IdPOP31.Host    := '...............';
  IdPOP31.Port    := 110;
  IdPOP31.Username := '...............';
  IdPOP31.Password := '......';
  IdPOP31.Connect;

  IdMessage1.Clear;
  IdPOP31.Retrieve(1, IdMessage1);
  f := TIdFileStream.Create('C:\Email.eml', fmCreate);
  IdMessage1.SaveToStream(f);

....
Aber wie schon gesagt. Umlaute werden in der .eml datei falsch dargestellt.

P.D. Benutze Indy10 und Delphi 2006 VCL.Net

gluglu 6. Mai 2006 09:29

Re: TStream nach TIdStream 'casten'
 
Lösung :
Delphi-Quellcode:
IdMessage1.Clear;
IdMessage1.NoDecode := True;
IdPOP31.Retrieve(1, IdMessage1);
IdMessage1.NoEncode := True;
IdMessage1.SaveToFile('C:\EMail.eml');
//(oder SaveToStream wie auch immer)


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:17 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz