Edit: Uups... ich hab meinen Originaltext gelöscht ... Naja, im Titel steht, worum's geht!
Hallo! Bis jetzt bin ich soweit, dass ich zumindest in eine Datei schreiben kann, aber erstens stimmt die Dateigrösse nicht: bei 2 Icons in ImageList 260760 Bytes statt 1532 und zweitens erhalte ich, obwohl ImageList mindestens 40 Icons enthält, immer nur 2 beim Auslesen aus der Datei, die noch dazu nicht wie die Original-*.ico-Files aussehen. Die Prozedur zum Auslesen funktioniert jedenfalls sicher. Was stimmt hier also nicht? Könnte sich das bitte jemand ansehen - die Prozedur Insert hab ich aus dem Forum:
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45:
| procedure WriteIconToFile(const FileName: String; ImageList: TImageList); var TempStream, Stream: TMemoryStream; I: LongInt; Icon: TIcon; begin TempStream := TMemoryStream.Create; Stream := TMemoryStream.Create; Icon := TIcon.Create; for I := 0 to ImageList.Count-1 do begin ImageList.GetIcon(I,Icon); Icon.SaveToStream(Stream); Insert(TempStream,Stream,TempStream.Size); end;
TempStream.SaveToFile(FileName);
Stream.Free; TempStream.Free; Icon.Free; end;
procedure Insert(const Stream, InsertStream: TStream; const Position: LongInt); var MemoryStream: TStream; begin if Position >= Stream.Size then begin Stream.Position := Stream.Size; Stream.CopyFrom(InsertStream, 0); end else begin Stream.Position := Position; MemoryStream := TMemoryStream.Create; try MemoryStream.CopyFrom(Stream, Stream.Size - Stream.Position); Stream.Position := Position; Stream.CopyFrom(InsertStream, 0); Stream.CopyFrom(MemoryStream, 0); finally MemoryStream.Free; end; end; end; |
Danke!
gedunstig war's - und fahle wornen zerschellten karsig im gestrock. oh graus, es gloomt der jabberwock - und die graisligen gulpen nurmen!