Mitring napisał(a)
na szybko wyszukan moze cos podopwie ;)
http://entwickler-forum.de/showthread.php?t=14039
Mitring, ślicznie dziękuję za linka... właśnie trafiłeś w samo sedno... :]
Dwa ostatnie fragmenty kodu śmigają jak należy :)
Z tym pierwszym i drugim fragmentem nie mogłem sobie poradzić. Wiem tylko tyle, że zostały wykorzystane pliki strumieniowe. Oto ten kod:
var SF: TFileStream; SA: TStreamAdapter; ||
begin ||
SF := TFileStream.Create(ImageFile); ||
SA := TStreamAdapter.Create(SF); ||
try ||
// der folgende Befehl ist wohl Windows-Standard und übernimmt ImageList.Handle ||
if not ImageList_Write(ImageListe.Handle, SA) ||
then raise EWriteError.CreateRes(@SImageWriteFail); ||
finally ||
SF.Free; ||
SA.Free; ||
end; ||
end;<br>
procedure TForm1.Images_Read( ImageListe: TImageList; ImageFile: string ); ||
var SF: TFileStream; SA: TStreamAdapter; ||
begin ||
SF := TFileStream.Create(ImageFile); ||
SA := TStreamAdapter.Create(Stream); ||
try ||
ImageListe.FreeHandle; ||
ImageListe.Handle := ImageList_Read(SA); ||
if ImageListe.Handle = 0 then raise EReadError.CreateRes(@SImageReadFail); ||
finally ||
SF.Free; ||
SA.Free; ||
end; ||
end;
Mitring, a możesz mi wytłumaczyć, jak zmodyfikować poniższy kod, który zresztą działa bez zarzutów, aby mieć kontrolę nad każdym przesyłanym bajtem? Chodzi o to, że chciałbym mieć możliwość łączenia danych ImageList'a z innymi danymi w jednym pliku. Innymi słowy - mając jakiś tam plik, np. DANE.DAT z bazą np. słów - chcę na końcu tego pliku dołączyć dane z ImageList (wszystkie ikonki)... :)
Coś na wzór przesyłania danych bajt za bajtem, tak jak to się robi za pomocą Write(plik, bajt)... ;-)
var Bild: TBitmap; i1: integer; Ausgabe: TMemoryStream; ||
begin ||
Bild := TBitmap.Create; ||
Ausgabe := TMemoryStream.Create; ||
try ||
for i1 := 0 to ImageListe.Count - 1 ||
do begin ||
ImageListe.GetBitmap( i1, Bild ); ||
Bild.SaveToStream(Ausgabe); ||
end; ||
Ausgabe.SaveToFile( ImageFile ); ||
finally ||
Ausgabe.Free; ||
Bild.Free; ||
end; ||
end;
procedure TForm1.Images_Read ( ImageListe: TImageList; ImageFile: string ); ||
var Bild: TBitmap; Ausgabe: TMemoryStream; ||
begin ||
Bild := TBitmap.Create; ||
Ausgabe := TMemoryStream.Create; ||
ImageListe.Clear; ||
try ||
Ausgabe.LoadFromFile(ImageFile); ||
Ausgabe.Seek( 0, soFromBeginning ); ||
repeat ||
Bild.LoadFromStream(Ausgabe); ||
ImageListe.Add(Bild,nil); ||
until Ausgabe.Position >= Ausgabe.Size; ||
finally ||
Ausgabe.Free; ||
Bild.Free; ||
end; ||
end;
Oleksy_Adam o zasobach czytałem ostatnio, ale to dość trudny dla mnie temat. Może za jakiś czas to zrozumiem. Co do tych wymienionych funkcji, to też starałem się coś z nimi zrobić, ale nic mi nie wychodziło. Tym bardziej, że nie wiem co to jest TResType. A może pokazałby mi ktoś, na przykładzie, jak to zrobić? ;)
Pozdrawiam
RYGAR