Zitat von
Muetze1:
Zusätzlich könnte ich mir noch vorstellen, dass der SetSize() Aufruf hier fehl am Platze ist, weil dann vllt. das CopyFrom die Datei in der Länge nochmal hinten anhängt an pFile. Somit hast du die doppelte Grösse und nur in der zweiten Hälfte steht die Datei.
Ich habe das mal soweit gemacht, was du vorgeschlagen hast. Nur scheint etwas mit dem Zählvorgang nicht zu stimmen egal ob ich von 0 nach Ende oder von Ende nach gezählt habe, jedesmal eine
exception Listenerror.
Nach einigen Absicherungen und Umwandlung in eine Function jetzt hierdurch ein positives Ergebnis:
Delphi-Quellcode:
function LoadPicture(aFileName:String):Boolean;
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]) or (lCount = Skindateien[0].Count-1) then break;
if aFileName = Skindateien[0].Strings[lCount] then
begin
Size := StrToInt(Skindateien[1].Strings[lCount]);
Position := StrToInt(Skindateien[2].Strings[lCount]);
lFile.Position := Position;
pFile.CopyFrom(lFile,Size);
Result := True;
end else Result:= False;
pFile.Position := 0;
end;
Sowie die Nutzung:
Delphi-Quellcode:
if LoadPicture(SkinPfad + Ini.ReadString(Menu,'Button' + IntToStr(iIndex) + 'Up',''))then
UpPicture.LoadFromStream(pFile);
Jetzt muss nur noch die Laderoutine geändert werden, am besten direkt in den Stream, anstatt über FindallFiles einmal und zum 2.ten Mal nochmal auf das gleiche File zugegriffen wird.
Gruß, bluescreen
...und ich dachte, Delphi ist ein Programmgenerator mit nur einem Button......tzzz