AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

loadfile aus TMemoryStream

Ein Thema von bluescreen25 · begonnen am 21. Feb 2008 · letzter Beitrag vom 24. Feb 2008
 
bluescreen25

Registriert seit: 27. Nov 2005
Ort: Geldern
229 Beiträge
 
Delphi 7 Enterprise
 
#1

loadfile aus TMemoryStream

  Alt 21. Feb 2008, 13:49
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
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:00 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz