JS+
Усиленный язык сценариев для Windows
с возможностью встраивания
в ваши приложения
О языке JS+ Справочник Скачать JS+ DLL
Контакты
СПРАВОЧНИК ПО ЯЗЫКУ JS+ Содержание

FindFirst

- функция JS+
Функции JS+
Начинает поиск файлов и каталогов.
Синтаксис
function FindFirst(
  Path,
  Attr,
  Search
): Number;

Параметры
Параметр Тип Описание
Path String шаблон имени файла/каталога
Attr Enumset атрибуты файла/каталога (см. ниже)
Search TSearchRec дескриптор поисковой записи

Параметр Attr
Значение Описание
faAnyFile любой файл/каталог
faArchive архивный
faDirectory каталог
faHidden скрытый
faNormal обычный
faReadOnly только для чтения
faSymLink символическая ссылка
faSysFile системный
faTemporary временный
faVolumeID идентификатор размера каталога
Возвращаемое значение
0 в случае успеха или код ошибки в противном случае.
Пример (JS+)
var Folder,ColWidth_0,VSW=GetSystemMetrics(SM_CXVSCROLL);

// Главная форма
frm=new TForm();
frm.Caption="JS+ - функция JS+ FindFirst";
frm.Width =600;
frm.Height=600;

// Строка состояния
stb=new TStatusBar(frm);
stb.SimpleText=" Пример работы с файловыми функциями поиска";

// Значки папок и файлов
(ic1=new TIcon()).LoadFromFile(JSPlus.HelpDir+"IMAGE\\Function\\Fld_Opn.ico");
(ic2=new TIcon()).LoadFromFile(JSPlus.HelpDir+"IMAGE\\Function\\Fld_Cls.ico");
(ic3=new TIcon()).LoadFromFile(JSPlus.HelpDir+"IMAGE\\Function\\Doc_Cls.ico");

// Список дисков
cmb=new TComboBox(frm);
cmb.Style=csDropDownList;
cmb.Left=cmb.Top=10;
cmb.Width=frm.ClientWidth-cmb.Left*2;
cmb.OnSelect=cmb_Select;
for (i=0,w=GetLogicalDrives();i<26;i++) {
  if ((w>>i) & 1) {
    tmp_str="Диск "+(dsk_str=String.fromCharCode(65+i)+":");
    if (GetDriveType(dsk_str)==DRIVE_FIXED)
      cmb.Items.Add(tmp_str+" "+DiskLabel(i+1));
  }
}
cmb.ItemIndex=0;

// Таблица строк
stg=new TStringGrid(frm);
stg.BorderStyle=bsSingle;
stg.ScrollBars=ssBoth;
stg.Options=goFixedHorzLine | goFixedVertLine | goRowSelect | goThumbTracking;
stg.ColCount=3;
stg.RowCount=2;
stg.FixedRows=1;
stg.Left=cmb.Left;
stg.Top =cmb.Top+cmb.Height+10;
stg.Width =cmb.Width;
stg.Height=stb.Top-stg.Top-10;
stg.DefaultRowHeight=stg.TextHeight("Q")+4;
stg.Cells[0][0]="Имя файла/каталога";
stg.Cells[1][0]="Дата";
stg.Cells[2][0]="Размер";
stg.ColWidths[1]=stg.TextWidth("00.00.0000")+20;
stg.ColWidths[2]=stg.TextWidth("0000000000")+20;
stg.ColWidths[0]=ColWidth_0=
stg.ClientWidth-stg.ColWidths[1]-stg.ColWidths[2]-2;
stg.OnDblClick=stg_DblClick;
stg.OnDrawCell=stg_DrawCell;
cmb_Select(cmb);
stg.OnSelectCell=stg_SelectCell;

frm.ShowModal();

// Формирует список файлов и каталогов
function Make_fList(Fld_Str)
{
  var i,j,str,spl_lst,src=new TSearchRec();

  // Начать поиск файлов и каталогов
  if (FindFirst(Folder+"*.*",faAnyFile,src)!=0) {
    FindClose(src);
    src.Delete();
    return false;
  }

  str=new TStrings();
  if (src.Name!=".")
    str.Add(((src.Attr & faDirectory) ? "D" : "F")+"|"+
    src.Name+"|"+DateToStr(FileDateToDateTime(src.Time))+"|"+
    src.Size);

  // Продолжить поиск
  while (FindNext(src)==0) {
    if (src.Name=="..")
      continue;
    str.Add(((src.Attr & faDirectory) ? "D" : "F")+"|"+
    src.Name+"|"+DateToStr(FileDateToDateTime(src.Time))+"|"+
    src.Size);
  }

  // Завершить поиск
  FindClose(src);
  src.Delete();

  str.Sort();
  if (Folder.split("\\").length>2)
    str.Insert(0,"D|..||");

  for (i=stg.RowCount;i>0;i--)
    stg.Rows[i].Clear();
  stg.Row=1;
  stg.RowCount=str.Count+1;

  for (i=0;i<str.Count;i++) {
    spl_lst=str[i].split("|");
    if ((stg.Cells[0][j=i+1]=spl_lst[1])==Fld_Str)
      stg.Row=j;
    stg.Cells[1][j]=spl_lst[2];
    stg.Cells[2][j]=(spl_lst[0]=="D") ? "-" : spl_lst[3];
  }

  i=ColWidth_0;
  if (stg.RowCount<=(stg.VisibleRowCount+stg.FixedRows))
    i+=VSW;
  stg.ColWidths[0]=i;

  return true;
}

// Обработчик события OnSelect
function cmb_Select(cmb)
{
  Folder=cmb.Items[cmb.ItemIndex].split(" ")[1]+"\\";
  Make_fList("");
  stg.SetFocus();
}

// Обработчик события OnDblClick
function stg_DblClick(stg)
{
  var row,spl_lst,stg_str,old_fld=Folder,fld_str="";
  var pnt=new TPoint(),grc=new TGridCoord();

  GetCursorPos(pnt);
  pnt=stg.ScreenToClient(pnt);
  stg.MouseToCell(pnt.x,pnt.y,grc);
  pnt.Delete();
  row=grc.Y;
  grc.Delete();

  if ((row<1) || (stg.Cells[2][row]!="-"))
    return;

  if ((stg_str=stg.Cells[0][row])=="..") {
    spl_lst=Folder.split("\\");
    fld_str=spl_lst[i=spl_lst.length-2];
    spl_lst.splice(i,1);
    Folder=spl_lst.join("\\");
  }
  else
    Folder+=stg_str+"\\";

  if (Make_fList(fld_str)==false)
    Folder=old_fld;
}

// Обработчик события OnDrawCell
function stg_DrawCell(stg,col,row,rct,state)
{
  var stg_str=stg.Cells[col][row],cnv=stg.Canvas;
  var ttl_str,bclr=stg.Color,fclr=stg.Font.Color;
  var icn,y,out_Style=DT_VCENTER+DT_SINGLELINE;

  if (state & gdFixed)
    bclr=stg.FixedColor;
  else
  if (state & gdSelected) {
    if (stg.RowCount>1) {
      bclr=clHighlight;
      fclr=clHighlightText;
    }
  }
  else
  if ((row % 2==0) &&
    (((col==0) && (stg.Cells[2][row]!="-")) ||
     ((col> 0) && (stg.Cells[2][row]!="-"))))
    bclr=0xF0F0F0.toTColor();

  // Закрасить ячейку
  cnv.Brush.Color=bclr;
  rct.Right+=1;
  cnv.FillRect(rct);

  // Вывести текст ячейки
  cnv.Font.Color=fclr;
  if (row==0)
    out_Style+=DT_CENTER;
  else
  switch (col) {
    case 0: switch (stg.Cells[2][row]) {
              case "-": icn=(stg_str=="..") ? ic1 : ic2; break;
               default: icn=ic3;
            }
            y=rct.Top+(rct.Height()-icn.Height)/2;
            cnv.Draw(rct.Left+=4,y,icn);
            rct.Left+=icn.Width+4;
            break;

    case 1: out_Style+=DT_CENTER; break;

    case 2: if (stg_str=="-")
              return;
            rct.Right-=stg.TextWidth(" ");
            out_Style+=DT_RIGHT;
  }
  DrawText(cnv.Handle,stg_str,-1,rct,out_Style);
}

// Обработчик события OnSelectCell
function stg_SelectCell(stg,col,row)
{
  var stb_str=Folder+stg.Cells[col][row];
  var cnv=stb.Canvas,dx=cnv.ClipRect.Width()-20;

  if (stg.RowCount==1)
    return false;

  if (col!=stg.LeftCol) {
    stg.Col=stg.LeftCol;
    stg.Row=row;
    return false;
  }

  stb.SimpleText=" "+MinimizeName(stb_str,cnv,dx);
}
Совместимость
C++ Builder/Delphi
См. также
JS+Руководство пользователя
Адрес этой страницы: http://jsplus.ru/MANUAL/JSPlus/Function/FindFirst.htm
© 2024,