Autor Beitrag
galagher
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 2562
Erhaltene Danke: 46

Windows 10 Home
Delphi 10.1 Starter, Lazarus 2.0.6
BeitragVerfasst: Fr 07.05.04 15:37 
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:
ausblenden volle Höhe Delphi-Quelltext
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!