hi leutz!
Ich hab jetzt den Ratschlag befolgt, jedes Bild vorher in einen Array zu laden, damit dieses nicht immer von der Festplatte geholt werden muss.
Mein Lösungsansatz:
Ich lade lasse das Program erstmal alle Dateien, die mit .bmp aufhören aus diesem Ordner in eine TStringList oder TStrings einlesen.
Danach werde ich diese Dateien dann Zeile für Zeile in das Array laden.
Bevor ich mein Problem beschreibe, erstmal der Code der Auslesefunktion und dann auch gleich der Fehler
Delphi-Quellcode:
// Code entnommen der Codedatenbank "Easy Delphi Helper" ([url]www.delphi-source.de[/url])
procedure GetFilesInDirectory(Directory:
String;
const Mask:
String;
List: TStrings;
WithSubDirs, ClearList: Boolean);
procedure ScanDir(
const Directory:
String);
var SR: TSearchRec;
begin
if FindFirst(Directory + Mask, faAnyFile - faDirectory, SR) = 0
then try
repeat
List.Add(Directory + SR.
Name)
until FindNext(SR) <> 0;
finally
FindClose(SR);
end;
if WithSubDirs
then begin
if FindFirst(Directory + '
*.*', faAnyFile, SR) = 0
then try
repeat
if ((SR.attr
and faDirectory) = faDirectory)
and
(SR.
Name <> '
.')
and (SR.
Name <> '
..')
then
ScanDir(Directory + SR.
Name + '
\');
until FindNext(SR) <> 0;
finally
FindClose(SR);
end;
end;
end;
begin
List.BeginUpdate;
try
if ClearList
then
List.Clear;
if Directory = '
'
then Exit;
if Directory[Length(Directory)] <> '
\'
then
Directory := Directory + '
\';
ScanDir(Directory);
finally
List.EndUpdate;
end;
end;
So (versuche) lese ich ein:
Delphi-Quellcode:
var sl: TString; //oder eben TStringList - immer der die gleiche Fehlermeldung...
if high(maptiles) > 0 then
for ii := 0 to high(maptiles) do begin
maptiles[ii].FreeImage; // um vorher die Images aus dem Array zu "entleeren" - stimmt das so?
end;
GetFilesInDirectory(ExtractFileDir(Application.ExeName)+'\IMG\Map\', '*.*', sl, False, True); // Hier sitzt der Fehler!
Gut...
und hier die Fehlermeldung:
Code:
---------------------------
Benachrichtigung über Debugger-
Exception
---------------------------
Im Projekt Xiphoid.exe ist eine
Exception der Klasse EAccessViolation aufgetreten. Meldung: 'Zugriffsverletzung bei Adresse 004956F6 in Modul 'Xiphoid.exe'. Lesen von Adresse 0000004C'. Prozess wurde angehalten. Mit Einzelne Anweisung oder Start fortsetzen.
---------------------------
OK Hilfe
---------------------------
Gut... ne, schlecht...
wenn ich jetzt den Teil "GetFilesInDirectory" auslasse, dann funktioniert alles prima (nur er lädt eben die Dateien nicht in die Strinlist
)
Wenn ich die Funktion jetzt aber in eine TStringBox laden lasse, dann funktioniert alles prima.......
Arrrgh, ich verzweifle!
PS:
@thebe: ja, wer dich machen, sobald ich zeit hab!