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)