|
Возвращает битовую маску, представляющую доступные диски.
Синтаксис
function GetLogicalDrives(): Number;
|
Возвращаемое значение
Битовая маска, представляющая доступные диски, в случае успеха или 0 в противном случае.
Бит в позиции 0 (наименее значимый бит) представляет диск A, в позиции 1 - диск B, в позиции 2 - диск C и т. д.
var Folder,ColWidth_0,VSW=GetSystemMetrics(SM_CXVSCROLL);
// Главная форма frm=new TForm(); frm.Caption="JS+ - функция WinAPI GetLogicalDrives"; 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); }
|
Совместимость
Windows API
|
JS+ | Руководство пользователя
|
|
|