Einzelnen Beitrag anzeigen

Benutzerbild von Master_RC
Master_RC

Registriert seit: 18. Jan 2005
459 Beiträge
 
Delphi 7 Enterprise
 
#13

Re: Flackern auf einer Map verhindern...

  Alt 22. Mai 2005, 17:27
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!
Ein Volk ist nur soviel wert, wie es dessen Toten ehrt.
  Mit Zitat antworten Zitat