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

TSearchRec

- компонент
Системные функции
Определяет поисковую запись, используемую функциями FindFirst, FindNext и FindClose.
Создание объекта

SearchRec=new TSearchRec();

Собственные свойства
Свойство Тип Описание
Attr Enumset атрибуты файла/каталога (см. ниже)
ExcludeAttr Enumset атрибуты файла/каталога (см. ниже)
Size Number размер файла в байтах
Time Number дата/время последнего изменения файла/каталога в файловом формате
FindHandle Number служебный дескриптор поиска
Name String имя файла/каталога

Свойство Attr
Значение Описание
faAnyFile любой файл/каталог
faArchive архивный
faDirectory каталог
faHidden скрытый
faNormal обычный
faReadOnly только для чтения
faSymLink символическая ссылка
faSysFile системный
faTemporary временный
faVolumeID идентификатор размера каталога

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

// Главная форма
frm=new TForm();
frm.Caption="JS+ - компонент TSearchRec";
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);
}
Примечание
Для преобразования свойства Time в формат DateTime используйте функцию FileDateToDateTime.
Совместимость
C++ Builder/Delphi
JS+Руководство пользователя
Адрес этой страницы: http://jsplus.ru/MANUAL/JSPlus/Function/Type/TSearchRec.htm
© 2024,