Einzelnen Beitrag anzeigen

Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#36

AW: Objekte einer TObjectList direkt aus dem Speicher lesen / in ihn schreiben

  Alt 9. Jan 2016, 01:49
Sagen wir mal so: Wenn es die Datei eben noch gegeben hat, dann kann diese jetzt schon wieder über den Jordan sein. Wozu also der "DoppelTest" (Prüfen und beim Laden wird auch geprüft), wenn die Routine eh abgebrochen werden soll?

Ich würde da gar nicht so einen Aufriss von machen:
Delphi-Quellcode:
procedure TBilderListe.LeseVSBAusDatei(Dateiname: string);
var
  BildNr,AnzDS: integer;
  Stream,VSBStream: TMemoryStream;
  VSBBmp: TBitMap;
  VSBHöhe: integer;
const
  PosBiHeight = 14 + 4 + 4;
begin
  Stream := nil;
  VSBStream := nil;
  Try
    Stream := TMemoryStream.Create;
    Stream.LoadFromFile(Dateiname);
    Stream.Position := 0;
    Stream.ReadData(AnzDS);
    If AnzDS <> BilderListe.Count
    then
      raise EInvalidOperation.Create('Die Anzahl der Bilder stimmt nicht');
    VSBStream := TMemoryStream.Create;
    For BildNr := 0 to AnzDS - 1 do
    begin
      VSBBmp := TBitMap.Create;
      try
        VSBBmp.LoadFromStream(Stream);
        VSBStream.Clear;
        VSBBmp.SaveToStream(VSBStream);
        VSBStream.Position := PosBiHeight;
        VSBStream.ReadData(VSBHöhe,SizeOf(VSBHöhe));
        VSBStream.Position := PosBiHeight;
        VSBStream.WriteData(-Abs(VSBHöhe));
        VSBStream.Position := 0;
        VSBBmp.LoadFromStream(VSBStream);
        Self[BildNr].VSB := VSBBmp;
        VSBBmp := nil;
      finally
        VSBBmp.Free;
      end;
    end;
  finally
    Stream.Free;
    VSBStream.Free;
  End;
end;
Wenn es jetzt rummst (sollte im Normalfall aber gar nicht rummsen), dann wieß man auch direkt warum
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)

Geändert von Sir Rufo ( 9. Jan 2016 um 01:51 Uhr)
  Mit Zitat antworten Zitat