{$APPTYPE CONSOLE} uses SysUtils, FileCtrl; var x10:array[0..66000] of byte;//Для любых зумов, от z1 до z24 x1:array[0..9000000] of byte;//Для любых зумов, от z1 до z24, и да, мне 9 мег памяти совершенно не жалко, зато вычисления проще function TileExist(x,y:integer):boolean; var xm10:integer;//Для уменьшения писанины begin TileExist:=false; xm10:=x shr 10; if (x10[xm10]=2) // Не существует каталог тысяч по x? or (x1[x]=2) // Не существует каталог x? then exit;// Файла точно нет, выход с результатом false if x10[xm10]=0 then begin //Наличие каталога проверять лишь если его статус неизвестен if not DirectoryExists('YaSat\z19\'+IntToStr(xm10)) then begin x10[xm10]:=2;// Каталог точно не существует и всех файлов в нём нет exit;// Выход с результатом false end; x10[xm10]:=1;// Каталог точно существует end; if x1[x]=0 then begin //Наличие каталога проверять лишь если его статус неизвестен if not DirectoryExists('YaSat\z19\'+IntToStr(xm10)+'\x'+IntToStr(x)) then begin x1[x]:=2;// Каталог точно не существует и всех файлов в нём нет exit;// Выход с результатом false end; x1[x]:=1;// Каталог точно существует end; if not FileExists('YaSat\z19\'+IntToStr(xm10)+'\x'+IntToStr(x)+'\'+IntToStr(y shr 10)+'\y'+IntToStr(y)+'.*') then exit; TileExist:=true; end; var x,y:integer; xmin,xmax,ymin,ymax:integer;//Тайловые координаты карты заполнения, покрывающие весь экран begin for x:=xmin to xmax do x1[x]:=0;//Очистка кэша перед построением карты заполнения обязательна! for x:=xmin shr 10 to (xmax+1023) shr 10 do x10[x]:=0; for x:=xmin to xmax do begin // Итератор может быть любым, здесь дубовый лишь для простоты примера for y:=ymin to ymax do begin if TileExist(x,y) then begin {...} end; end; end; end.