D3: TIcon.SafeToStream(): Abstrakter Fehler

Hallo!

Wie verwende ich die Methode SaveToStream der Klasse TIcon richtig?
Bei mir kommt da immer ein „abstrakter Fehler“. Was mach ich falsch?

var
i: ticon;
s: tstream;
begin
s := tstream.create;
i := ticon.create;
i.loadfromfile(‚Icon.ico‘);

// Und hier der Fehler:
i.savetostream(s);

s.free;
i.free;
end;

Wer weiss, wo der Fehler liegt? Ich kann keinen finden…

MFG, Volker

Nun doch…

TStream ist nicht zur direkten Verwendung gedacht, sondern als Basisklasse für Streamobjekte.

TStream.Write ist als abstract deklariert, und diese Methode wird indirekt in SavetoStream verwendet.

Wenn du einen Nachkommen von TStream verwendest (TFilestream, TMemorystream) klappts auch mit dem schreiben :o)

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

…und der nächste Fehler…
Danke für die schnelle Hile!
Jetzt ist aber ein weiteres Problem aufgetreten:
Ich bekomme einen „Stream-Read Fehler“, wenn ich von einem Stream Daten in einen anderen kopieren möchte. In der Hilfe steht nichts genaues darüber.

var
fstream,istream: tmemorystream;
i: ticon;
begin
fstream := tmemorystream.create;
istream := tmemorystream.create;

i := ticon.create;
i.loadfromfile(‚icon.ico‘);
i.savetostream(istream);

// Da ist der Fehler:
fstream.copyfrom(istream,istream.size);

i.free;
istream.free;
fstream.free;
end;

MFG, Volker

Hi Volker,

> var  
> fstream,istream: tmemorystream;  
> i: ticon;  
> begin  
> fstream := tmemorystream.create;  
> istream := tmemorystream.create;

 // Positionszeiger von fstream und istream stehen beide 
 // auf Null



> i := ticon.create;  
> i.loadfromfile('icon.ico');  
> i.savetostream(istream);

 // Positionszeiger von istream steht jetzt auf 766, 
 // (= Größe der Icon-Datei in Bytes)

 // Vor dem Lesen der Icon-Daten aus istream muß dessen 
 // Positionszeiger zurückgesetzt werden
 istream.position := 0;

 // Jetzt wird das Icon von istream nach fstream kopiert


> fstream.copyfrom(istream,istream.size);  
>   
> ...  
>   
> i.free;  
> istream.free;  
> fstream.free;  
> end;

Mit freundlichem Gruß
Martin

Vielen Dank! Blöder Fehler!

MFG, Volker