Ich verzweifel gerade an Memorystreams. Ich versuche Bilddateien in ein Memorystream zu speichern und zu laden.
Da ich keinen besseren Ansatz habe, habe ich 2 Streams angelegt sowie Stringlisten mit Dateinamen,Position und Size.
Diese Sache klappt auch. Das Laden klappt überhaupt nicht mehr, ich bekomme einfach nicht das File wieder zurück.
//Edit: in den pFile-Stream laden klappt, jedoch nicht LoadFromStream (siehe am Ende!)
Delphi-Quellcode:
procedure LoadMemory; //diese procedure klappt !
var DList:TStrings;
lCount: Integer;
begin
DList := TStringList.Create; //Hilfsliste
lFile := TMemoryStream.Create(); //Gesamtstream aller Files
pFile := TMemoryStream.Create(); //Stream EinzelFile
Search := True;
FindAllFiles(DList,Skindateien[0],Skinpfad,'*',True,False,True);//Dateien finden und in Stringlist
//später austauschen um direkt über
for lCount := 0 to Skindateien[0].Count - 1 do //FindallFiles in Stream zu packen, da sonst
begin //2x Zugriff auf ein File
pFile.LoadFromFile(Skindateien[0].Strings[lCount]);
Skindateien[1].Add(IntToStr(pFile.Size));
Skindateien[2].Add(IntToStr(lFile.Position));
lFile.CopyFrom(pFile,pFile.Size);
pFile.Position := 0;
end;
//zu Testzwecken um zu sehen ob bis hier alles klappt:
//lFile.SaveToFile(ProgrammPfad+'\SkinStream.dat'); gesamter Stream
//Skindateien[0].SaveToFile('Skindateien.txt'); Filenames
//Skindateien[1].SaveToFile('SkindateienSize.txt'); FileSizes
//Skindateien[2].SaveToFile('SkindateienPos.txt'); FilePositionen
DList.Free;
end;
procedure LoadPicture(aFileName:String);
var lCount,Position,Size : Integer;
begin
pFile.Clear;
pFile.Position := 0;
lFile.Position := 0;
for lCount := 0 to Skindateien[0].Count - 1 do
if aFileName = Skindateien[0].Strings[lCount] then break;
Size := StrToInt(Skindateien[1].Strings[lCount]);
Position := StrToInt(Skindateien[2].Strings[lCount]);
lFile.Position := Position;
pFile.SetSize(Size);
pFile.CopyFrom(lFile,Size);
//pFile.SaveToFile(ProgrammPfad+'\pFile'+ IntToStr(lCount)+'.jpg');//klappt ! die Bilder werden auf
end; //der Festplatte gespeichert, sind auch i.O.
Und hier soll das Bild wieder eingesetzt werden:
Delphi-Quellcode:
SkinBackground := TImage.Create(SkinForm);
with SkinBackground
do
begin
Parent := SkinForm;
Name := iString + '
_Background';
SetBounds(0,0, SkinWidth, SkinHeight);
iString := lowercase(Ini.ReadString(Menu,'
Background','
0'));
Picture.RegisterFileFormat('
jpg; *.jpeg','
JPEG',TBitmap);
//if FileExists(SkinPfad + iString) then //anstatt
// Picture.LoadFromFile(SkinPfad + iString); //das hier
LoadPicture(SkinPfad + iString);
//soll
Picture.Bitmap.LoadFromStream(pFile);
//dieses hier, gibt aber immer eine exception!
Kann mir jemand das erklären ?
Gruß, bluescreen
...und ich dachte, Delphi ist ein Programmgenerator mit nur einem Button......tzzz